Mon ordinateur est généralement suspendu et réveillé normalement. Mais lorsque je connecte un disque dur USB3.0, même après son démontage et sa déconnexion, la machine se met immédiatement en veille à chaque fois que j'essaie de suspendre.
Tous les périphériques USB sont désactivés dans /proc/acpi/wakeup
(ci-dessous) et je ne vois aucune erreur dans /var/log/syslog
concernant le disque USB ou le processus de veille ou de réveil.
Le même disque connecté à un port USB 2.0 ne pose pas le même problème, pas plus que les disques USB 2.0 connectés aux ports USB 3.0. Même si aucun périphérique USB n'est connecté, l'ordinateur se met immédiatement en veille si un disque USB 3.0 a déjà été connecté depuis le démarrage.
Le système est un Dell Precision M6700 et le problème est survenu avec 14.04 et persiste avec 14.10.
Qu'est-ce qui pourrait causer ceci et comment puis-je le déboguer plus loin?
> cat /proc/acpi/wakeup
Device S-state Status Sysfs node
P0P1 S4 *disabled
USB1 S3 *disabled
USB2 S3 *disabled
USB3 S3 *disabled
USB5 S3 *disabled
USB6 S3 *disabled
USB7 S3 *disabled
RP01 S4 *disabled pci:0000:00:1c.0
PXSX S4 *disabled
RP02 S4 *disabled pci:0000:00:1c.1
PXSX S4 *disabled pci:0000:03:00.0
RP05 S4 *disabled
PXSX S4 *disabled
RP06 S4 *disabled
PXSX S4 *disabled
RP07 S4 *disabled
PXSX S4 *disabled
RP08 S4 *disabled pci:0000:00:1c.7
PXSX S4 *disabled pci:0000:0c:00.0
PEG0 S4 *disabled pci:0000:00:01.0
PEGP S4 *disabled
PEG1 S4 *disabled
PEG2 S4 *disabled
PEG3 S4 *disabled
USB4 S3 *disabled
RP03 S4 *disabled pci:0000:00:1c.2
RP04 S4 *disabled pci:0000:00:1c.3
PXSX S4 *disabled
GLAN S4 *enabled pci:0000:00:19.0
EHC1 S0 *enabled pci:0000:00:1d.0
EHC2 S0 *enabled pci:0000:00:1a.0
XHC S0 *enabled pci:0000:00:14.0
HDEF S4 *disabled pci:0000:00:1b.0
LID0 S3 *enabled
PBTN S3 *enabled
J'ai maintenant essayé de désactiver le réveil pour tous les appareils (sauf le bouton d'alimentation).
J'ai tout d'abord désactivé les périphériques dans /proc/acpi/wakeup
, puis pour rechercher avec certitude /sys/devices/
tous les fichiers wakeup
:
find /sys/devices/ -name "wakeup" -print -exec grep enabled {} \;
Ensuite, je les définit explicitement sur disabled
, par exemple:
Sudo bash -c "echo disabled > /sys/devices/pci0000:00/0000:00:19.0/power/wakeup"
Ne laissant que le bouton d'alimentation activé:
cat /sys/devices/LNXSYSTM:00/LNXPWRBN:00/power/wakeup
# enabled
Après cela, l’ordinateur se réveille toujours immédiatement de la suspension (chaque fois qu’un disque USB 3.0 a été connecté).
De plus, après le réveil, les périphériques suivants ont été réinitialisés sur enabled
:
/sys/devices/pci0000:00/0000:00:19.0/power/wakeup
/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0/power/wakeup
Le périphérique PCI semble être mon réseau local, car il est également réinitialisé dans /proc/acpi/wakeup
:
Device S-state Status Sysfs node
...
GLAN S4 *enabled pci:0000:00:19.0
...
Peut-il y avoir d'autres facteurs non énumérés dans les appareils qui sont responsables du réveil?
Ajout des informations demandées par Fabby :
> Bus 004 Device 002: ID 357d:7788
> Device Descriptor:
> bLength 18
> bDescriptorType 1
> bcdUSB 3.00
> bDeviceClass 0 (Defined at Interface level)
> bDeviceSubClass 0
> bDeviceProtocol 0
> bMaxPacketSize0 9
> idVendor 0x357d
> idProduct 0x7788
> bcdDevice 0.00
> iManufacturer 10
> iProduct 11
> iSerial 3
> bNumConfigurations 1
> Configuration Descriptor:
> bLength 9
> bDescriptorType 2
> wTotalLength 121
> bNumInterfaces 1
> bConfigurationValue 1
> iConfiguration 0
> bmAttributes 0xc0
> Self Powered
> MaxPower 2mA
> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 0
> bNumEndpoints 2
> bInterfaceClass 8 Mass Storage
> bInterfaceSubClass 6 SCSI
> bInterfaceProtocol 80 Bulk-Only
> iInterface 0
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x81 EP 1 IN
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0400 1x 1024 bytes
> bInterval 0
> bMaxBurst 15
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x02 EP 2 OUT
> Couldn't open device, some information will be missing
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0400 1x 1024 bytes
> bInterval 0
> bMaxBurst 15
> Interface Descriptor:
> bLength 9
> bDescriptorType 4
> bInterfaceNumber 0
> bAlternateSetting 1
> bNumEndpoints 4
> bInterfaceClass 8 Mass Storage
> bInterfaceSubClass 6 SCSI
> bInterfaceProtocol 98
> iInterface 0
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x01 EP 1 OUT
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0400 1x 1024 bytes
> bInterval 0
> bMaxBurst 0
> Command pipe (0x01)
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x82 EP 2 IN
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0400 1x 1024 bytes
> bInterval 0
> bMaxBurst 0
> MaxStreams 32
> Status pipe (0x02)
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x83 EP 3 IN
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0400 1x 1024 bytes
> bInterval 0
> bMaxBurst 15
> MaxStreams 32
> Data-in pipe (0x03)
> Endpoint Descriptor:
> bLength 7
> bDescriptorType 5
> bEndpointAddress 0x04 EP 4 OUT
> bmAttributes 2
> Transfer Type Bulk
> Synch Type None
> Usage Type Data
> wMaxPacketSize 0x0400 1x 1024 bytes
> bInterval 0
> bMaxBurst 15
> MaxStreams 32
> Data-out pipe (0x04)
>
Premièrement, il n’était pas évident pour moi que la liste XHC
dans la sortie wakeup
était un périphérique USB 3.0.
XHC S0 *enabled pci:0000:00:14.0
Cependant, même la désactivation de l'état de réveil de ce périphérique ne résout pas le problème.
Sudo bash -c "echo disabled > \
/sys/devices/pci0000:00/0000:00:14.0/power/wakeup" # Problem persists.
La seule solution de travail que j'ai trouvée consiste à unbind
et bind
le pilote de périphérique à l'aide des commandes suivantes:
Sudo bash -c ' \
echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/unbind && \
echo -n "0000:00:14.0" > /sys/bus/pci/drivers/xhci_hcd/bind;'
Je dois le faire chaque fois entre la connexion d’un périphérique de stockage USB 3.0 et la suspension de l’ordinateur, mais cela fonctionne de manière constante.
Il est à noter que le composant xhci_hcd
du chemin d'accès n'est valide que pour les périphériques USB 3.0. Cette partie du chemin devra être modifiée en fonction du type de bus devant être réinitialisé. Il peut s'agir de l'un des uhci_hcd
, sdhci-pci
ou ehci-pci
pour d'autres types de périphérique de stockage. .
Désolé d'avoir ajouté une réponse, mais je n'ai pas assez de réputation pour ajouter des commentaires ...
(Ce qui est pourquoi je regarde votre problème !) ;-): P
Avez-vous essayé de réinitialiser le bus USB sur lequel le disque venait d'être déconnecté avant de le suspendre?
Si vous ne savez pas comment, pourriez-vous:
lsusb --verbose > /tmp/good-bus.txt 2>&1
lsusb --verbose > /tmp/bad-bus.txt 2>&1
lsusb --verbose > /tmp/worse-bus.txt 2>&1
diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
diff --text /tmp/good-bus.txt /tmp/worse-bus.txt > /tmp/test-g-w.txt
Et rapportez ici avec les résultats de /tmp/test-g-b.txt et /tmp/test-g-w.txt