Wie deaktiviere ich USB Autosuspend auf Kernel 3.7.10 oder höher?

37

Ich habe meinen HTPC von Kernel 3.7.10 auf 3.10.7 aktualisiert und es scheint, dass CONFIG_USB_SUSPEND jetzt von den Kernel-Optionen verschwunden und in PM enthalten ist.

Das Hauptproblem besteht darin, dass ich eine externe Festplatte besitze und diese beim Anhalten und Aufwecken des HTPC nicht für das System verfügbar ist. Die Festplatte wird aktiviert (Sie hören, wie sie sich erneut dreht). Wenn Sie jedoch versuchen, auf den Einhängepunkt zuzugreifen, wird die folgende Fehlermeldung angezeigt:

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

Und auf dmesg:

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

In früheren Kernels konnte das Problem durch Setzen von CONFIG_USB_SUSPEND = N behoben werden, da die Festplatte ihren Ruhezustand selbst handhabte und der Einhängepunkt immer zugänglich war. Wenn sich die Festplatte im Energiesparmodus befand und der HTPC etwas vom Einhängepunkt der Festplatte benötigte, wurde die Festplatte selbst ohne Probleme aktiviert und betriebsbereit.

Im Moment habe ich Folgendes ohne Erfolg versucht:

  1. Ändern Sie / sys / bus / usb / devices / usb * / power / control manuell auf "on" anstatt auf "auto" .
  2. Ändern Sie / sys / bus / usb / devices / usb * / power / autosuspend manuell auf "-1" anstatt auf "0" .

Beim erneuten Aufwecken des HTPC ist der Mount-Punkt jedoch wieder nicht erreichbar. Als Workarround kann ich den Mount-Punkt aushängen und wieder einhängen und es funktioniert wieder ohne Probleme, aber ich bin mir sicher, dass es eine Möglichkeit geben sollte, zu vermeiden, dass das Betriebssystem den USB-Autosuspend handhabt.

Irgendeine Idee, wie man usb autosuspend auf Kernel 3.7.10 oder höher deaktiviert?

Peter
quelle
Gibt /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistdir Schwanz 1? Gibt grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)es dir y? power-management.txt
Runium
1
power/persistgibt 1und ich habe keine Konfigurationsdatei in /boot. CONFIG_PM_RUNTIME=yist in der Kernel- .configDatei konfiguriert .
Peter

Antworten:

32

Für Ubuntu und Debian , usbcorewird in den Kernel kompiliert, erstellen Sie so Einträge /etc/modprobe.dwerden nicht arbeiten: wir müssen die Parameter Kernel - Boot ändern.

Bearbeiten Sie die /etc/default/grubDatei und ändern Sie die GRUB_CMDLINE_LINUX_DEFAULTZeile, um die usbcore.autosuspend=-1Option hinzuzufügen :

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

Beachten Sie, dass quit splashbereits Optionen vorhanden waren. Behalten Sie also auch andere Optionen bei.

Nachdem Sie die Datei gespeichert haben, aktualisieren Sie grub:

sudo update-grub

Und neu starten .

Überprüfen Sie nun den autosuspendWert:

cat /sys/module/usbcore/parameters/autosuspend

Und es sollte angezeigt werden -1.

In der Kerneldokumentation wird angegeben, dass sich dieser Parameter eines Tages in autosuspend_delay_ms(anstelle von autosuspend) ändern wird .

Rael Gugelmin Cunha
quelle
1
Dies scheint auch für Debian zu gelten.
Benjamin Trent
2
Rael, vielen Dank dafür. Gleiches gilt für die neueste Version von Kali. Ich habe das oben Genannte hinzugefügt und mein USB IRToy (v2) funktioniert jetzt ordnungsgemäß.
Joat
1
Ich habe eine USB-Karte in einem der mPCIE-Steckplätze und wollte einfach nicht die Wahrheit wissen. Debian Jessie ausführen. Dies hat mein Problem gelöst und große Kopfschmerzen gelöst. DANKE!
Xebo
Ich habe dies in Ubuntu 15.10 versucht, aber der Wert wird nicht angewendet (der Wert ist 2). Kann ich noch etwas ausprobieren?
Jonas Adler
Ich bin noch am 14.04. Aber afaik, in den neuesten Kernel-Versionen ist der Parameter zu ändern autosuspend_delay_ms.
Rael Gugelmin Cunha
19

Gemäß der Kernel Baum Dokumentation wird die AutoSuspend idle-Verzögerungszeit durch den kontrollierten autosuspendModulparameter in usbcore. Wenn Sie die anfängliche Standard-Leerlaufverzögerung auf -1 einstellen, wird das automatische Suspendieren von USB-Geräten verhindert. Sie sollten weiterhin in der Lage sein, die automatische Suspendierung für ausgewählte Geräte zu aktivieren.

Der usbcore.autosuspendKernel-Parameter kann eingestellt werden, wenn das Modul manuell geladen wird:

$ modprobe usbcore autosuspend=-1

oder durch Hinzufügen der folgenden Zeile zu einer Konfigurationsdatei in /etc/modprobe.d:

options usbcore autosuspend=-1

Wenn usbcoreim Kernel kompiliert, kann der Parameter angepasst werden, indem der Kernel-Befehlszeile Folgendes hinzugefügt wird:

usbcore.autosuspend=-1

Zuletzt kann die Option zur Laufzeit angepasst werden:

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

Die Änderung wirkt sich auf alle neuen USB-Geräte aus. Bereits vorhandene Geräte bleiben davon unberührt.

Thomas Nyman
quelle
2
Ich habe usbcorein den Kernel kompiliert, aber die modprobe.dOption scheint nicht zu funktionieren. Obwohl modprobe -c usbcore | grep autosuspendes so angezeigt wird -1, cat /sys/module/usbcore/parameters/autosuspendbekomme ich2
Peter
1
@Peter: autosuspendist veraltet. Die neue Datei autosuspend_delay_msdauert ms anstatt Sekunden. ref . Aber power/controleingestellt auf onsollte die gleiche Wirkung haben.
Runium
@Sukminder, was sollte ich dann konfigurieren, um Autosuspend für immer deaktiviert zu halten? Ich habe versucht, autosuspend=-1in beiden modprobe.dund kernelParameter zu verwenden, aber die Festplatte wird immer noch angehalten und wacht nicht schön auf.
Peter
1
@ Peter: Wenn ich wüsste, werde ich es dir sagen :). Ich zitiere nur was doc. sagt. Dein pt. 1 in Ihrem Beitrag sollte es getan haben , soweit ich das beurteilen kann, habe ich keine Ahnung , warum es nicht der Fall ist. Haben Sie versucht, zu Satz autosuspend_delay_mszu -1? (In /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium
1
Ich bin auf Kernel 4.4 und autosuspend_delay_msist nicht da. Aber autosuspendIST.
Mariano Dupont
2

Ich habe ein ähnliches Problem mit einer Microsoft Wheel Mouse, die mit optischem USB und PS / 2 kompatibel ist, seit ich ein Linux Mint Debian Edition- System auf den Kernel aktualisiert habe 3.10-2-amd64. Es wurde vermutet, dass das USB-Power-Management des Kernels eine unangemessene automatische Unterbrechung verursacht . In Debian wird dies als usbcoreModul in den Kernel kompiliert .

Sie können dies dauerhaft ändern, indem Sie in der Befehlszeile Folgendes eingeben:

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

Einige Kernel könnten dies jedoch erfordern autosuspend=0.

Wenn Ihr System initrd(höchstwahrscheinlich) verwendet, erstellen Sie das initrdfür Ihren Kernel neu.

Beispielsweise:

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

Starten Sie neu und überprüfen Sie mit:

cat /sys/module/usbcore/parameters/autosuspend

was -1jetzt nachgeben sollte .

Serge Stroobandt
quelle
Ich benutze es nicht initrdund die hier beschriebenen Aktionen funktionieren in diesem Fall nicht, da sie zuvor beantwortet wurden.
Peter