Comment désactiver la suspension automatique USB sur le noyau 3.7.10 ou supérieur?

38

J'ai mis à jour mon HTPC du noyau 3.7.10 vers la version 3.10.7 et il semble que CONFIG_USB_SUSPEND est maintenant partie des options du noyau et incluse dans PM.

Le principal problème auquel je suis confronté est que j'ai un disque dur externe et que, lors de la suspension et du réveil du HTPC, celui-ci n'est pas disponible pour le système. Le disque dur se réveille (vous pouvez l'entendre à nouveau), mais lorsque vous essayez d'accéder au point de montage, vous obtenez le message d'erreur suivant:

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

Et sur dmesg:

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

Dans les noyaux précédents, définir CONFIG_USB_SUSPEND = N résoudrait le problème, car le disque dur gérerait son hibernation lui-même et le point de montage serait toujours accessible. Lorsque le disque dur était en veille et que le HTPC avait besoin de quelque chose du point de montage du disque dur, le disque dur lui-même se réveillait et fonctionnait sans problème.

En ce moment, j'ai essayé ce qui suit sans succès:

  1. Modifiez manuellement / sys / bus / usb / devices / usb * / power / control sur "on" au lieu de "auto" .
  2. Modifiez manuellement / sys / bus / usb / devices / usb * / power / autosuspend en "-1" au lieu de "0" .

Mais au réveil du HTPC, le point de montage est à nouveau inaccessible. Comme solution de rechange, je peux démonter et remonter le point de montage. Il fonctionne à nouveau sans problème, mais je suis certain qu’il devrait exister un moyen d’éviter que le système d’exploitation gère la suspension automatique usb.

Avez-vous une idée de la désactivation automatique de USB sur les versions 3.7.10 et supérieures du noyau?

Peter
la source
Est-ce que la queue /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistte donne 1? Ne grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)vous donner y? power-management.txt
Runium
1
power/persistdonne 1et je n'ai aucun fichier de configuration dans /boot. CONFIG_PM_RUNTIME=yest configuré dans le .configfichier du noyau .
Peter

Réponses:

33

Pour Ubuntu et Debian , usbcoreest compilé dans le noyau, afin de créer des entrées sur /etc/modprobe.dsera pas le travail: nous devons changer les paramètres de démarrage du noyau.

Editez le /etc/default/grubfichier et changez la GRUB_CMDLINE_LINUX_DEFAULTligne pour ajouter l' usbcore.autosuspend=-1option:

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

Notez que ces quit splashoptions étaient déjà présentes. Alors gardez les autres options que vous avez aussi.

Après avoir sauvegardé le fichier, mettez à jour grub:

sudo update-grub

Et redémarrez .

Maintenant, vérifiez la autosuspendvaleur:

cat /sys/module/usbcore/parameters/autosuspend

Et il devrait afficher -1.

Dans la documentation du noyau, il est indiqué qu'un jour, à l'avenir, ce paramètre deviendra autosuspend_delay_ms(au lieu de autosuspend).

Rael Gugelmin Cunha
la source
1
Cela semble être également vrai pour Debian.
Benjamin Trent
2
Rael, merci beaucoup pour ça. Il en va de même pour la version la plus récente de Kali. J'ai ajouté ce qui précède et mon IRToy USB (v2) fonctionne désormais correctement.
Joat
1
J'ai une carte USB dans l'un des emplacements mPCIE et je ne voulais tout simplement pas dire la vérité. Lancer Debian Jessie. Cela a résolu mon problème en résolvant un mal de tête énorme, MERCI!
xebo
J'ai essayé ceci dans Ubuntu 15.10 mais la valeur n'est pas appliquée (la valeur est 2). Y a-t-il autre chose que je puisse essayer?
Jonas Adler
Je suis toujours sur 14.04. Mais autant que je sache, dans les dernières versions du noyau, le paramètre à modifier est autosuspend_delay_ms.
Rael Gugelmin Cunha
20

Selon la documentation de l’arborescence du noyau , le délai d’auto-suspension est contrôlé par le autosuspendparamètre module dans usbcore. Définir le délai d'inactivité initial par défaut sur -1 empêchera la suspension automatique de tout périphérique USB. Vous devez toujours pouvoir activer la suspension automatique pour les périphériques sélectionnés.

Le usbcore.autosuspendparamètre kernel peut être défini lorsque le module est chargé manuellement:

$ modprobe usbcore autosuspend=-1

ou en ajoutant la ligne suivante à un fichier de configuration dans /etc/modprobe.d:

options usbcore autosuspend=-1

Si usbcoreest compilé dans le noyau, le paramètre peut être ajusté en ajoutant les éléments suivants à la ligne de commande du noyau:

usbcore.autosuspend=-1

Enfin, l'option peut être ajustée à l'exécution en faisant:

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

La modification affectera tous les nouveaux périphériques USB. Les appareils existants ne seront pas affectés.

Thomas Nyman
la source
2
J'ai usbcorecompilé dans le noyau, mais l'utilisation de l' modprobe.doption ne semble pas fonctionner. Malgré l' modprobe -c usbcore | grep autosuspendaffiche comme -1, faire cat /sys/module/usbcore/parameters/autosuspendje reçois2
Peter
1
@Peter: autosuspendest obsolète. Le nouveau fichier est celui autosuspend_delay_msqui prend ms au lieu de secondes. réf . Mais power/controlréglé à ondevrait avoir le même effet.
Runium
@Sukminder, que dois-je configurer pour laisser autosuspend désactivé pour toujours? J'ai essayé d'utiliser autosuspend=-1à la fois en paramètre modprobe.det en kernelparamètre, mais le disque dur reste suspendu et ne se réveille pas bien.
Peter
1
@Peter: Si je savais je te le dirais :). Je ne fais que citer ce doc. dit. Votre pt. 1 dans votre message aurait dû le faire autant que je sache, je ne sais pas pourquoi. Avez-vous essayé de mettre autosuspend_delay_msà -1? (En /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium
1
Je suis sur le noyau 4.4 et autosuspend_delay_msn'y est pas. Mais autosuspendEST.
Mariano Dupont
3

J'ai un problème similaire avec une souris USB Wheel Mouse optique compatible USB et PS / 2 depuis la mise à niveau d'un système Linux Mint Debian Edition vers le noyau 3.10-2-amd64. Une suspension automatique inappropriée par la gestion de l'alimentation USB du noyau était suspectée. Dans Debian, cela est compilé en tant que usbcoremodule dans le noyau.

Vous pouvez changer cela de façon permanente en entrant sur la ligne de commande:

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

Certains noyaux peuvent toutefois nécessiter autosuspend=0.

Si votre système utilise initrd(probablement), reconstruisez le initrdpour votre noyau.

Par exemple:

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

Redémarrez et vérifiez avec:

cat /sys/module/usbcore/parameters/autosuspend

qui devrait céder -1maintenant.

Serge Stroobandt
la source
Je ne l'utilise pas initrdet les actions décrites ici ne fonctionnent pas dans ce cas, car elles nous ont déjà été répondues.
Peter