लिनक्स में पीसीआई उपकरण को रीसेट करें


12

क्या कमांड लाइन से लिनक्स में पीसीआई उपकरण को रीसेट करने का एक सामान्य तरीका है? यही है, पीसीआई बस को रीसेट कमांड जारी करने का कारण बनाएं।

जवाबों:


6

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.

5

एक डिवाइस लेवल रिसेट के लिए पीसीआई बस में सबसे पास की चीज पावर स्टेट को डी 3 और बैक टू डी 0 में बदल रही है। ड्राइवर को उतारने के बाद (ड्राइवर के नीचे से हार्डवेयर को रीसेट करना बुरा होगा), आप setpciपावर स्थिति को बदलने के लिए कंट्रोल रजिस्टरों को लिखने के लिए उपयोग कर सकते हैं , लेकिन मेरा मानना ​​है कि ड्राइवर के उतारने पर यह स्वचालित रूप से होता है।


1

चूँकि जेनेरिक PCI डिवाइस हॉटप्लगबल नहीं है, इसलिए इसे रीसेट करने का कोई तरीका नहीं होगा और कर्नेल इसे फिर से एन्यूमरेट करेगा।

आप जिस भी तरह की समस्याओं को हल करने की कोशिश कर रहे हैं, निश्चित रूप से इसे रीसेट करने की तुलना में बेहतर तरीका है।


4
मैं QEMU में PCI डिवाइस का अनुकरण कर रहा हूं और इसे विकसित करने की आवश्यकता है। मैं इसे अतिथि के भीतर से करना चाहता था।
जोनाथन

1
मेरे पास एक छोटी गाड़ी वाला सीसीटीवी कार्ड है, यह काम कर रहा है लेकिन कभी-कभी एक सेगफॉल्ट के साथ मर जाता है। उसके बाद, पूरे सिस्टम को फिर से शुरू करने की जरूरत है, पीसीआई रिसेट को wiht किया जा सकता है, इससे बचा जा सकता है ... सिस्टम स्थिर है, कोई नुकसान नहीं, केवल वीडियो इनपुट खाली हो जाता है, इसलिए कभी-कभी पीसीआई को पुनरारंभ करने की तुलना में पीसीआई को रीसेट करना बेहतर उपाय है पूरी मशीन हर दिन। (खासकर यदि आप 6 महीने के लिए उस मशीन से 8000 किमी दूर हैं)
जीप्स जकब

1

उपरोक्त समाधानों के साथ समस्या यह है कि उन्हें डिवाइस की सहकारिता की आवश्यकता होती है; हालांकि ज्यादातर परिदृश्यों में इसे रीसेट करने का कारण इसकी गैर-सहकारीता है।

हालांकि, जैसा कि यहां वर्णित है , पीसीआई स्तर पर इसे रीसेट करने का एक और "कठिन" तरीका है: हम इसे पीसीआई बस से हटाते हैं और फिर इसे एक रेककन द्वारा फिर से सम्मिलित करते हैं।

कदम:

  1. echo 1 >/sys/bus/pci/<pci-id-of-device>/remove। हम इसकी PCI ID एक lspciकमांड से पा सकते हैं ।
  2. echo 1 >/sys/bus/pci/rescan

मैं यहाँ एक छोटी गाड़ी पीसी डिवाइस है, कभी-कभी पीसीआई-स्तर रीसेट, कभी-कभी यह हटाने-पढ़ने की चाल इसे ठीक करता है। मैं इसे स्वचालित रूप से करने के लिए एक स्क्रिप्ट लिखने वाला हूं। :-)


ओह। इस रीसेट के बाद भी मेरा USB कंट्रोलर छोटी गाड़ी है।
क्रिस

@ क्रिस क्या आपको यकीन है कि यह नियंत्रक है, और इस पर एक उपकरण नहीं है?
पीटर - मोनिका

हां, मुझे यकीन है कि यह नियंत्रक है 00:14.0 USB controller: Intel Corporation 200 Series/Z370 Chipset Family USB 3.0 xHCI Controller। मैं इसे वीएफआईओ के माध्यम से वीएम में भेजता हूं और वीएम रिबूट के बाद मुझे इसे फिर से काम करने के लिए होस्ट को रिबूट करना होगा, अन्यथा किसी भी यूएसबी प्लग में पता लगाया जाता है, लेकिन संचार विफल रहता है।
क्रिस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.