USB कर्नेल को 3.7.10 या इसके बाद के संस्करण पर अक्षम कैसे करें?


37

मैंने अपने HTPC को कर्नेल 3.7.10 से 3.10.7 तक अपडेट किया है और ऐसा लगता है कि CONFIG_USB_SUSPEND अब कर्नेल विकल्पों से चला गया है और पीएम में शामिल है।

मुख्य समस्या जिसका मुझे सामना करना पड़ रहा है, वह यह है कि मेरे पास एक बाहरी एचडीडी है और एचटीपीसी को निलंबित करने और जागने के दौरान, यह सिस्टम के लिए उपलब्ध नहीं है। एचडीडी उठता है (आप इसे फिर से स्पिन कर सकते हैं) सुन सकते हैं, लेकिन जब आप माउंट बिंदु तक पहुंचने का प्रयास करते हैं तो आपको निम्न त्रुटि मिलती है:

ZOTAC ~ # ls /media
ls: reading directory /media: Input/output error

और dmesg पर:

[  253.278260] EXT4-fs warning (device sdb1): __ext4_read_dirblock:908: error reading   directory block (ino 2, block 0)

पिछले कर्नेल में, CONFIG_USB_SUSPEND = N को सेट करने से समस्या का समाधान हो जाएगा, क्योंकि HDD अपने हाइबरनेशन को अपने आप संभाल लेगा और आरोह बिंदु हमेशा प्रशंसनीय था। जब एचडीडी नींद में था और एचटीडी को एचडीडी के आरोह बिंदु से कुछ चाहिए था, तो एचडीडी खुद उठेगा और बिना मुद्दों के काम करेगा।

अभी मैंने सफलता के बिना निम्नलिखित कोशिश की है:

  1. मैन्युअल रूप से / sys / बस / usb / उपकरणों / usb * / शक्ति / नियंत्रण को "ऑटो" के बजाय "चालू" में बदलें ।
  2. मैन्युअल रूप से परिवर्तन / sys / बस / USB / उपकरणों / usb * / शक्ति / स्वतःस्थगित को "-1" के बजाय "0"

लेकिन जब HTPC को फिर से जगाते हैं, तो माउंट बिंदु फिर से अप्राप्य है। वर्कअराउंड के रूप में मैं माउंट बिंदु को अनमाउंट और रिमाउंट कर सकता हूं और यह बिना किसी समस्या के फिर से काम करता है, लेकिन मुझे यकीन है कि ओएस को ऑटोसस्पेंड को संभालने के लिए ओएस से बचने का एक तरीका होना चाहिए।

किसी भी विचार कैसे कर्नेल 3.7.10 या इसके बाद के संस्करण पर यूएसओस्पोसपेंड को निष्क्रिय करना है?


क्या पूंछ /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistआपको देती है 1? है grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)आप दे y? power-management.txt
रनियम

1
power/persistदेता है 1और मेरे पास कोई भी कॉन्फ़िगर फ़ाइल नहीं है /bootCONFIG_PM_RUNTIME=yकर्नेल .configफ़ाइल में कॉन्फ़िगर किया गया है ।
पीटर

जवाबों:


32

के लिए Ubuntu और डेबियन , usbcoreकर्नेल में संकलित किया गया है, इतने पर प्रविष्टियां बना /etc/modprobe.dहोगा नहीं काम: हम कर्नेल बूट पैरामीटर को बदलने की जरूरत।

/etc/default/grubफ़ाइल संपादित करें और विकल्प GRUB_CMDLINE_LINUX_DEFAULTजोड़ने के लिए लाइन बदलें usbcore.autosuspend=-1:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

ध्यान दें कि quit splashपहले से ही मौजूद विकल्प थे। इसलिए आपके पास अन्य विकल्प भी रखें।

फ़ाइल को सहेजने के बाद, ग्रब अपडेट करें:

sudo update-grub

और रिबूट

अब autosuspendमूल्य की जाँच करें :

cat /sys/module/usbcore/parameters/autosuspend

और इसे प्रदर्शित करना चाहिए -1

कर्नेल प्रलेखन में कहा गया है कि किसी दिन भविष्य में यह परम बदलेगा autosuspend_delay_ms(बदले में autosuspend)।


1
यह डेबियन के लिए भी सच लगता है।
बेंजामिन ट्रेंट

2
Rael, इसके लिए बहुत बहुत धन्यवाद। काली के सबसे हाल के संस्करण के लिए भी यही सच है। मैंने ऊपर जोड़ा और मेरा USB IRToy (v2) अब ठीक से काम कर रहा है।
जोत

1
मेरे पास mPCIE स्लॉट में से एक में एक USB कार्ड है और सिर्फ सच नहीं चाहता था। चल रहा है डेबियन जेसी। यह एक बड़ा सिरदर्द को हल करने के लिए मेरे मुद्दे को हल कर दिया है, धन्यवाद!
xebo

मैंने Ubuntu 15.10 में यह कोशिश की थी, लेकिन मूल्य लागू नहीं किया गया है (मान 2 है)। क्या यहां कुछ और है जिसके लिए मैं कोशिश कर सकता हूं?
जोनास एडलर

मैं अभी भी 14.04 पर हूं। लेकिन afaik, नवीनतम कर्नेल संस्करणों में, बदलने के लिए परम है autosuspend_delay_ms
राएल गुगेलमिन कुन्हा

19

कर्नेल ट्री डॉक्यूमेंटेशन के अनुसार , ऑटोप्लेसेंड आइडल-डिले टाइम को autosuspendमॉड्यूल पैरामीटर द्वारा नियंत्रित किया जाता है usbcore। प्रारंभिक डिफ़ॉल्ट निष्क्रिय-देरी को -1 पर सेट करने से किसी भी USB डिवाइस के ऑटोस्पेंड को रोका जा सकेगा। आप अभी भी चयनित उपकरणों के लिए ऑटोससपेंड को सक्षम करने में सक्षम होना चाहिए।

usbcore.autosuspendकर्नेल पैरामीटर जब मॉड्यूल मैन्युअल लोड किया जाता है स्थापित किया जा सकता:

$ modprobe usbcore autosuspend=-1

या निम्न फ़ाइल को एक कॉन्फ़िगरेशन फ़ाइल में जोड़कर /etc/modprobe.d:

options usbcore autosuspend=-1

यदि usbcoreकर्नेल में संकलित किया गया है, तो कर्नेल कमांड लाइन में निम्नलिखित को जोड़कर पैरामीटर को समायोजित किया जा सकता है:

usbcore.autosuspend=-1

अंत में, विकल्प को रनटाइम पर समायोजित करके किया जा सकता है:

echo -1 >/sys/module/usbcore/parameters/autosuspend

परिवर्तन सभी नए USB उपकरणों को प्रभावित करेगा। पहले से मौजूद डिवाइस प्रभावित नहीं होंगे।


2
मैंने usbcoreकर्नेल में संकलित किया है, लेकिन modprobe.dविकल्प का उपयोग करने से काम नहीं लगता है। modprobe -c usbcore | grep autosuspendइसे प्रदर्शित करने के बावजूद -1, cat /sys/module/usbcore/parameters/autosuspendमैं कर रहा हूँ2
पीटर

1
@ पेटर: autosuspendपदावनत है। नई फ़ाइल autosuspend_delay_msजो सेकंड के बजाय एमएस लेती है। रेफरी । लेकिन power/controlसेट onएक ही प्रभाव होना चाहिए।
रनियम

@Sukminder, ऑटोसस्पेंड को हमेशा के लिए निष्क्रिय रखने के लिए मुझे क्या कॉन्फ़िगर करना चाहिए? मैंने autosuspend=-1दोनों modprobe.dऔर kernelपैरामीटर का उपयोग करने की कोशिश की है , लेकिन एचडीडी अभी भी निलंबित है और अच्छी तरह से नहीं उठता है।
पीटर

1
@Peter: अगर मुझे पता था कि मैं आपको बताऊंगा :)। मैं केवल उद्धृत कर रहा हूं कि क्या डॉक्टर। कहते हैं। आपका पी.टी. 1 अपनी पोस्ट में इसे किया जाना चाहिए जहाँ तक मैं बता सकता हूँ, मुझे नहीं पता कि यह क्यों नहीं है। क्या आपने सेट autosuspend_delay_msकरने की कोशिश की है -1? (इन /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
रनियम

1
मैं कर्नेल 4.4 पर हूं और autosuspend_delay_msवहां नहीं हूं । लेकिन autosuspendआई.एस.
मारियानो डुपोंट

2

मेरे पास Microsoft व्हील माउस ऑप्टिकल USB और PS / 2 के साथ एक समान मुद्दा है क्योंकि लिनक्स मिंट डेबियन एडिशन सिस्टम को कर्नेल में अपग्रेड करना 3.10-2-amd64। कर्नेल के यूएसबी पावर प्रबंधन द्वारा एक अनुचित ऑटोसस्पेंड का संदेह था। डेबियन में, यह usbcoreकर्नेल में मॉड्यूल के रूप में संकलित किया जाता है ।

आप इसे कमांड लाइन पर जारी करके स्थायी रूप से बदल सकते हैं:

sudo echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf > /dev/null

autosuspend=0हालांकि कुछ गुठली की आवश्यकता हो सकती है ।

यदि आपका सिस्टम उपयोग करता है initrd(संभवतः सबसे अधिक करता है), तो initrdअपने कर्नेल के लिए पुनर्निर्माण करें ।

उदाहरण के लिए:

uname -r
sudo dpkg-reconfigure linux-image-3.10-2-amd64

रिबूट और साथ की जाँच करें:

cat /sys/module/usbcore/parameters/autosuspend

जो -1अभी उपज चाहिए ।


मैं उपयोग नहीं करता हूं initrdऔर यहां वर्णित क्रियाएं इस मामले में काम नहीं करती हैं, क्योंकि वे पहले जवाब दे चुके हैं।
पीटर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.