web-dev-qa-db-fra.com

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

J'ai mis à jour mon HTPC depuis le noyau .7.1 vers .10.7 et il semble CONFIG_USB_SUSPEND est maintenant parti des options du noyau et inclus dans PM.

Le principal problème auquel je suis confronté est que j'ai un disque dur externe et lorsque vous suspendez et réveillez le HTPC, il n'est pas disponible pour le système. Le disque dur se réveille (vous pouvez l'entendre tourner à nouveau), mais lorsque vous essayez d'accéder au point de montage, vous obtenez l'erreur suivante:

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 lui-même son hibernation et le point de montage était 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é sans succès ce qui suit:

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

Mais lors du réveil du HTPC, le point de montage est à nouveau inaccessible. Pour contourner le problème, je peux démonter et remonter le point de montage et cela fonctionne à nouveau sans problème, mais je suis sûr qu'il devrait y avoir un moyen d'éviter que le système d'exploitation gère la suspension automatique USB.

Une idée comment désactiver la suspension automatique USB sur le noyau 3.7.10 ou supérieur?

41
Peter

Pour bunt et Debian, usbcore est compilé dans le noyau, donc créez des entrées sur /etc/modprobe.d va PAS fonctionner: nous devons changer les paramètres de démarrage du noyau.

Modifiez le /etc/default/grub fichier et modifiez le GRUB_CMDLINE_LINUX_DEFAULT ligne pour ajouter le usbcore.autosuspend=-1 option:

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

Notez que quit splash étaient déjà des options présentes. Gardez donc les autres options dont vous disposez.

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

Sudo update-grub

Et redémarrage.

Maintenant, vérifiez la valeur de autosuspend:

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 changera en autosuspend_delay_ms (au lieu de autosuspend).

35
Rael Gugelmin Cunha

Selon la documentation de l'arborescence du noya , le temps de retard d'inactivité de la suspension automatique est contrôlé par le paramètre du module autosuspend dans usbcore. La définition du délai d'inactivité par défaut initial à -1 empêchera la suspension automatique de tout périphérique USB. Vous devriez toujours être en mesure d'activer la suspension automatique pour les appareils sélectionnés.

Le usbcore.autosuspend Le paramètre du noyau 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 usbcore est compilé dans le noyau, le paramètre peut être ajusté en ajoutant ce qui suit à la ligne de commande du noyau:

usbcore.autosuspend=-1

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

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

Le changement affectera tous les nouveaux périphériques USB. Les appareils déjà existants ne seront pas affectés.

20
Thomas Nyman

J'ai un problème similaire avec un Microsoft Wheel Mouse Optical USB et PS/2 Compatible depuis la mise à niveau d'un système Linux Mint Debian Edition au noyau 3.10-2-AMD64. Une suspension automatique inappropriée de la part du noyau gestion de l'alimentation USB a été suspectée. Dans Debian, ceci est compilé en tant que module usbcore dans le noyau.

Vous pouvez changer cela de façon permanente en émettant 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 nécessiter autosuspend=0, bien que.

Si votre système utilise initrd (très probablement), alors reconstruisez le initrd pour 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 donner -1 maintenant.

3
Serge Stroobandt