जवाबों:
http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci के अनुसार यदि आप उपकरण के व्यक्तिगत कार्यों को रीसेट कर सकते हैं, यदि यह समर्थित है:
What: /sys/bus/pci/devices/.../reset
Description:
Some devices allow an individual function to be reset
without affecting other functions in the same device.
For devices that have this support, a file named reset
will be present in sysfs. Writing 1 to this file
will perform reset.
एक डिवाइस लेवल रिसेट के लिए पीसीआई बस में सबसे पास की चीज पावर स्टेट को डी 3 और बैक टू डी 0 में बदल रही है। ड्राइवर को उतारने के बाद (ड्राइवर के नीचे से हार्डवेयर को रीसेट करना बुरा होगा), आप setpci
पावर स्थिति को बदलने के लिए कंट्रोल रजिस्टरों को लिखने के लिए उपयोग कर सकते हैं , लेकिन मेरा मानना है कि ड्राइवर के उतारने पर यह स्वचालित रूप से होता है।
चूँकि जेनेरिक PCI डिवाइस हॉटप्लगबल नहीं है, इसलिए इसे रीसेट करने का कोई तरीका नहीं होगा और कर्नेल इसे फिर से एन्यूमरेट करेगा।
आप जिस भी तरह की समस्याओं को हल करने की कोशिश कर रहे हैं, निश्चित रूप से इसे रीसेट करने की तुलना में बेहतर तरीका है।
उपरोक्त समाधानों के साथ समस्या यह है कि उन्हें डिवाइस की सहकारिता की आवश्यकता होती है; हालांकि ज्यादातर परिदृश्यों में इसे रीसेट करने का कारण इसकी गैर-सहकारीता है।
हालांकि, जैसा कि यहां वर्णित है , पीसीआई स्तर पर इसे रीसेट करने का एक और "कठिन" तरीका है: हम इसे पीसीआई बस से हटाते हैं और फिर इसे एक रेककन द्वारा फिर से सम्मिलित करते हैं।
कदम:
echo 1 >/sys/bus/pci/<pci-id-of-device>/remove
। हम इसकी PCI ID एक lspci
कमांड से पा सकते हैं ।echo 1 >/sys/bus/pci/rescan
मैं यहाँ एक छोटी गाड़ी पीसी डिवाइस है, कभी-कभी पीसीआई-स्तर रीसेट, कभी-कभी यह हटाने-पढ़ने की चाल इसे ठीक करता है। मैं इसे स्वचालित रूप से करने के लिए एक स्क्रिप्ट लिखने वाला हूं। :-)
00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller
। मैं इसे वीएफआईओ के माध्यम से वीएम में भेजता हूं और वीएम रिबूट के बाद मुझे इसे फिर से काम करने के लिए होस्ट को रिबूट करना होगा, अन्यथा किसी भी यूएसबी प्लग में पता लगाया जाता है, लेकिन संचार विफल रहता है।