Jak wyłączyć automatyczne zawieszanie USB w jądrze 3.7.10 lub nowszym?

38

Zaktualizowałem mój HTPC z jądra 3.7.10 do 3.10.7 i wydaje się, że CONFIG_USB_SUSPEND nie ma już opcji jądra i jest uwzględniony w PM.

Głównym problemem, z którym się zmagam, jest to, że mam zewnętrzny dysk twardy, a podczas zawieszania i budzenia HTPC nie jest on dostępny dla systemu. Dysk twardy się budzi (słychać, że ponownie się obraca), ale podczas próby uzyskania dostępu do punktu montowania pojawia się następujący błąd:

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

I na dmesg:

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

W poprzednich jądrach ustawienie CONFIG_USB_SUSPEND = N rozwiązałoby problem, ponieważ dysk twardy sam poradziłby sobie z hibernacją, a punkt podłączenia był zawsze dostępny. Gdy dysk twardy był w trybie uśpienia, a HTPC potrzebował czegoś od punktu montażu dysku twardego, sam dysk twardy budził się i działał bez problemów.

W tej chwili wypróbowałem następujące bez powodzenia:

  1. Ręcznie zmień / sys / bus / usb / devices / usb * / power / control na „on” zamiast „auto” .
  2. Ręcznie zmień / sys / bus / usb / devices / usb * / power / autosuspend na „-1” zamiast „0” .

Ale przy ponownym budzeniu HTPC punkt montowania jest ponownie niedostępny. Jako obejście problemu mogę odmontować i ponownie zamontować punkt montowania i działa on ponownie bez problemów, ale jestem pewien, że powinien istnieć sposób, aby system operacyjny nie obsługiwał automatycznego zawieszenia USB.

Masz pomysł, jak wyłączyć automatyczne zawieszanie USB w jądrze 3.7.10 lub nowszym?

Piotr
źródło
Czy ogon /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistci daje 1? Nie grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)dać y? power-management.txt
Runium
1
power/persistdaje 1i nie mam żadnego pliku konfiguracyjnego /boot. CONFIG_PM_RUNTIME=yjest skonfigurowany w .configpliku jądra .
Peter,

Odpowiedzi:

33

Dla Ubuntu i Debiana , usbcorejest skompilowany w jądrze, więc tworzyć wpisy na /etc/modprobe.dwoli NOT pracy: musimy zmienić parametry startowe jądra.

Edytuj /etc/default/grubplik i zmień GRUB_CMDLINE_LINUX_DEFAULTwiersz, aby dodać usbcore.autosuspend=-1opcję:

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

Zauważ, że quit splashbyły już obecne opcje. Zachowaj więc inne opcje, które masz.

Po zapisaniu pliku zaktualizuj grub:

sudo update-grub

I uruchom ponownie .

Teraz sprawdź autosuspendwartość:

cat /sys/module/usbcore/parameters/autosuspend

I powinno się wyświetlić -1.

W dokumentacji jądra podano, że pewnego dnia w przyszłości ten parametr zmieni się na autosuspend_delay_ms(zamiast autosuspend).

Rael Gugelmin Cunha
źródło
1
Wydaje się, że dotyczy to również Debiana.
Benjamin Trent,
2
Rael, wielkie dzięki za to. To samo dotyczy najnowszej wersji Kali. Dodałem powyższe i mój USB IRToy (v2) działa teraz poprawnie.
dołącz
1
Mam kartę USB w jednym z gniazd mPCIE i po prostu nie chcę prawdy. Uruchamianie Debiana Jessie. To rozwiązało mój problem, rozwiązując ogromny ból głowy, DZIĘKUJĘ!
xebo,
Próbowałem tego w Ubuntu 15.10, ale wartość nie jest stosowana (wartość wynosi 2). Czy jest coś jeszcze, co mogę spróbować?
Jonas Adler
Nadal mam 14.04. Ale afaik, w najnowszych wersjach jądra, param do zmiany jest autosuspend_delay_ms.
Rael Gugelmin Cunha
20

Zgodnie z dokumentacją drzewa jądra , czas opóźnienia bezczynności autosuspend jest kontrolowany przez autosuspendparametr modułu w usbcore. Ustawienie początkowego domyślnego opóźnienia bezczynności na -1 zapobiegnie automatycznemu zawieszeniu się dowolnego urządzenia USB. Nadal powinno być możliwe włączenie automatycznego zawieszania dla wybranych urządzeń.

usbcore.autosuspendParametr jądro może być ustawiona, gdy moduł jest załadowany ręcznie:

$ modprobe usbcore autosuspend=-1

lub dodając następujący wiersz do pliku konfiguracyjnego w /etc/modprobe.d:

options usbcore autosuspend=-1

Jeśli usbcorejest wkompilowany w jądro, parametr można dostosować, dodając następujące polecenie do wiersza poleceń jądra:

usbcore.autosuspend=-1

Na koniec opcję można dostosować w czasie wykonywania, wykonując:

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

Zmiana wpłynie na wszystkie nowe urządzenia USB. Nie wpłynie to na istniejące urządzenia.

Thomas Nyman
źródło
2
Mam usbcoreskompilowany do jądra, ale przy użyciu modprobe.dopcji nie wydaje się do pracy. Mimo, modprobe -c usbcore | grep autosuspendże wyświetla to jako -1, cat /sys/module/usbcore/parameters/autosuspenddostaję2
Peter
1
@Peter: autosuspendjest przestarzałe. Nowy plik autosuspend_delay_mszajmuje ms zamiast sekund. ref . Ale power/controlustawiony na onpowinien mieć ten sam efekt.
Runium,
@Sukminder, co powinienem skonfigurować, aby funkcja automatycznego zawieszania była wyłączona na zawsze? Próbowałem użyć autosuspend=-1zarówno parametru, jak modprobe.di kernelparametru, ale dysk twardy nadal zawiesza się i ładnie się nie budzi.
Peter,
1
@Peter: Gdybym wiedział, powiem ci :). Cytuję tylko jaki dokument. mówi. Twój pt. 1 w twoim poście powinien to zrobić, o ile mogę powiedzieć, nie mam pojęcia, dlaczego tak nie jest. Czy próbowałeś do zestawu autosuspend_delay_msdo -1? (W /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium,
1
Jestem na jądrze 4.4 i autosuspend_delay_msnie ma go. Ale autosuspendJEST.
Mariano Dupont,
3

Mam podobny problem z Microsoft Wheel Mouse Optical USB i zgodny z PS / 2 od czasu uaktualnienia systemu Linux Mint Debian Edition do jądra 3.10-2-amd64. Podejrzewano niewłaściwe automatyczne zawieszanie przez zarządzanie energią USB jądra . W Debianie jest to kompilowane jako usbcoremoduł do jądra.

Możesz to zmienić na stałe, wydając w wierszu polecenia:

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

autosuspend=0Jednak niektóre jądra mogą wymagać .

Jeśli twój system używa initrd(najprawdopodobniej tak), odbuduj initrdjądro.

Na przykład:

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

Uruchom ponownie i sprawdź za pomocą:

cat /sys/module/usbcore/parameters/autosuspend

które powinny ustąpić -1teraz.

Serge Stroobandt
źródło
Nie używam, initrda opisane tutaj działania nie działają w tym przypadku, ponieważ wcześniej otrzymaliśmy odpowiedzi.
Peter