Come disabilitare la sospensione automatica USB sul kernel 3.7.10 o successivo?


38

Ho aggiornato il mio HTPC dal kernel 3.7.10 alla 3.10.7 e sembra che CONFIG_USB_SUSPEND sia ora passato dalle opzioni del kernel e incluso in PM.

Il problema principale che sto affrontando è che ho un HDD esterno e quando sospendo e riattivo l'HTPC, non è disponibile per il sistema. L'HDD si riattiva (è possibile sentirlo girare di nuovo), ma quando si tenta di accedere al punto di montaggio viene visualizzato il seguente errore:

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

E su dmesg:

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

Nei kernel precedenti, l'impostazione CONFIG_USB_SUSPEND = N avrebbe risolto il problema, poiché l'HDD avrebbe gestito il suo letargo da solo e il punto di mount sarebbe stato sempre accessibile. Quando l'HDD era inattivo e l'HTPC aveva bisogno di qualcosa dal punto di montaggio dell'HDD, l'HDD stesso si svegliava e funzionava senza problemi.

In questo momento ho provato quanto segue senza successo:

  1. Cambia manualmente / sys / bus / usb / devices / usb * / power / control su "on" anziché "auto" .
  2. Cambia manualmente / sys / bus / usb / devices / usb * / power / autosuspendi a "-1" invece di "0" .

Ma al risveglio dell'HTPC, il punto di montaggio è nuovamente inaccessibile. Come soluzione alternativa posso smontare e rimontare il punto di montaggio e funziona di nuovo senza problemi, ma sono sicuro che dovrebbe esserci un modo per evitare che il sistema operativo gestisca la sospensione automatica USB.

Qualche idea su come disabilitare la sospensione automatica USB sul kernel 3.7.10 o successivo?


La coda /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistti dà 1? Ti grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)y? power-management.txt
Runium

1
power/persist1e non ho alcun file di configurazione in /boot. CONFIG_PM_RUNTIME=yè configurato nel .configfile del kernel .
Peter,

Risposte:


33

Per Ubuntu e Debian , usbcoreviene compilato nel kernel, in modo da creare le voci sulla /etc/modprobe.dvolontà NON lavoro: abbiamo bisogno di cambiare i parametri di avvio del kernel.

Modifica il /etc/default/grubfile e cambia la GRUB_CMDLINE_LINUX_DEFAULTriga per aggiungere l' usbcore.autosuspend=-1opzione:

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

Si noti che quit splasherano già presenti opzioni. Quindi mantieni anche altre opzioni.

Dopo aver salvato il file, aggiorna grub:

sudo update-grub

E riavvia .

Ora controlla il autosuspendvalore:

cat /sys/module/usbcore/parameters/autosuspend

E dovrebbe essere visualizzato -1.

Nella documentazione del kernel si afferma che un giorno in futuro questo parametro cambierà in autosuspend_delay_ms(anziché autosuspend).


1
Questo sembra essere vero anche per Debian.
Benjamin Trent,

2
Rael, grazie mille per questo. Lo stesso vale per la versione più recente di Kali. Ho aggiunto quanto sopra e il mio IRToy USB (v2) ora funziona correttamente.
joat

1
Ho una scheda USB in uno degli slot mPCIE e non volevo la verità. Esecuzione di Debian Jessie. Questo ha risolto il mio problema risolvendo un enorme mal di testa, GRAZIE!
xebo,

Ho provato questo in Ubuntu 15.10 ma il valore non è applicato (il valore è 2). C'è qualcos'altro che posso provare?
Jonas Adler,

Sono ancora il 14.04. Tuttavia, nelle ultime versioni del kernel, il parametro da modificare è autosuspend_delay_ms.
Rael Gugelmin Cunha,

20

Secondo la documentazione dell'albero del kernel , il tempo di ritardo inattività di autosuspend è controllato dal autosuspendparametro module in usbcore. L'impostazione del ritardo di inattività iniziale iniziale su -1 impedisce la sospensione automatica di qualsiasi dispositivo USB. Dovresti comunque essere in grado di abilitare la sospensione automatica per i dispositivi selezionati.

Il usbcore.autosuspendparametro del kernel può essere impostato quando il modulo viene caricato manualmente:

$ modprobe usbcore autosuspend=-1

o aggiungendo la seguente riga a un file di configurazione in /etc/modprobe.d:

options usbcore autosuspend=-1

Se usbcoreè compilato nel kernel, il parametro può essere modificato aggiungendo quanto segue alla riga di comando del kernel:

usbcore.autosuspend=-1

Infine, l'opzione può essere regolata in fase di esecuzione facendo:

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

La modifica interesserà tutti i nuovi dispositivi USB. I dispositivi già esistenti non saranno interessati.


2
Ho usbcorecompilato il kernel, ma l'utilizzo modprobe.ddell'opzione non sembra funzionare. Nonostante lo modprobe -c usbcore | grep autosuspendmostri come -1, cat /sys/module/usbcore/parameters/autosuspendsto ottenendo2
Peter,

1
@Peter: autosuspendè obsoleto. Il nuovo file è autosuspend_delay_msche richiede ms anziché secondi. rif . Ma power/controlimpostato su ondovrebbe avere lo stesso effetto.
Runium

@Sukminder, cosa devo configurare per mantenere la sospensione automatica disabilitata per sempre? Ho provato con autosuspend=-1sia modprobe.de kernelparametri, ma il disco fisso sospende ancora e non si sveglia bene.
Peter,

1
@Peter: se sapessi te lo dirò :). Sto solo citando quale doc. dice. Il tuo pt. 1 nel tuo post avrebbe dovuto farlo per quanto posso dire, non ho idea del perché. Hai provato a impostare autosuspend_delay_mssu -1? (In /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium,

1
Sono sul kernel 4.4 e autosuspend_delay_msnon c'è. Ma autosuspendIS.
Mariano Dupont,

3

Ho un problema simile con un mouse Microsoft Wheel Mouse USB ottico e compatibile PS / 2 dall'aggiornamento di un sistema Linux Mint Debian Edition al kernel 3.10-2-amd64. Si sospettava una sospensione automatica inappropriata della gestione dell'alimentazione USB del kernel . In Debian, questo è compilato come usbcoremodulo nel kernel.

Puoi cambiarlo permanentemente emettendo dalla riga di comando:

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

autosuspend=0Tuttavia, alcuni kernel potrebbero richiedere .

Se il tuo sistema utilizza initrd(molto probabilmente lo fa), ricostruisci il file initrdper il tuo kernel.

Per esempio:

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

Riavvia e verifica con:

cat /sys/module/usbcore/parameters/autosuspend

che dovrebbe cedere -1ora.


Non uso initrde le azioni descritte qui non funzionano in questo caso, poiché hanno già ricevuto una risposta.
Peter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.