USB 3.0 장치로 인한 일시 중단 상태에서 즉시 해제

USB 3.0 장치로 인한 일시 중단 상태에서 즉시 해제

내 컴퓨터는 일반적으로 정상적으로 일시 중지되고 깨어납니다. 하지만 USB3.0 하드 디스크를 연결하면 마운트 해제 및 연결 해제 후에도 일시 중지하려고 할 때마다 컴퓨터가 즉시 깨어납니다.

(아래) 에서는 모든 USB 장치가 비활성화되어 있으며 USB 디스크나 대기 또는 깨우기 프로세스와 관련된 /proc/acpi/wakeup오류를 볼 수 없습니다 ./var/log/syslog

USB 2.0 포트에 연결된 동일한 디스크는 동일한 문제를 일으키지 않으며 USB 3.0 포트에 연결된 USB 2.0 디스크도 마찬가지입니다. USB 장치가 전혀 연결되지 않은 경우에도 시작 후 USB 3.0 디스크가 연결된 적이 있으면 컴퓨터가 즉시 대기 모드에서 깨어납니다.

시스템은 Dell Precision M6700이며 문제는 14.04에서 발생했으며 14.10에서도 지속됩니다.

이 문제의 원인은 무엇이며, 추가로 디버깅하려면 어떻게 해야 합니까?

> 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

편집 - 장치를 명시적으로 비활성화해도 문제가 해결되지 않습니다.

이제 모든 장치(전원 버튼 제외)에 대해 깨우기 기능을 비활성화해 보았습니다.

먼저 장치를 비활성화 한 다음 모든 파일을 /proc/acpi/wakeup검색했는지 확인했습니다 ./sys/devices/wakeup

find /sys/devices/ -name "wakeup" -print -exec grep enabled {} \;

그런 다음 명시적으로 모두 다음과 같이 설정했습니다 disabled.

sudo bash -c "echo disabled > /sys/devices/pci0000:00/0000:00:19.0/power/wakeup"

전원 버튼만 활성화된 채로 둡니다.

cat /sys/devices/LNXSYSTM:00/LNXPWRBN:00/power/wakeup
# enabled

그 후에도 컴퓨터는 일시 중단 상태에서 즉시 깨어납니다(USB 3.0 디스크가 연결된 적이 있을 때마다).

또한 깨어난 후 다음 장치가 다음과 같이 재설정되었습니다 enabled.

/sys/devices/pci0000:00/0000:00:19.0/power/wakeup
/sys/devices/LNXSYSTM:00/device:00/PNP0C0A:00/power_supply/BAT0/power/wakeup

PCI 장치도 다음에서 재설정되었기 때문에 내 LAN인 것 같습니다 /proc/acpi/wakeup.

Device  S-state   Status   Sysfs node
...
GLAN      S4    *enabled   pci:0000:00:19.0
...

깨우기를 담당하는 장치에 나열되지 않은 다른 요인이 있을 수 있습니까?

편집 - 자세한 lsusb 정보를 추가했습니다.

님이 요청한 정보를 추가했습니다.파비:

> 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)
> 

답변1

XHC첫째, 출력 목록이 wakeupUSB 3.0 장치인지 명확하지 않았습니다 .

XHC       S0    *enabled   pci:0000:00:14.0

그러나 이 장치의 절전 모드 해제 상태를 비활성화해도 문제가 해결되지 않습니다.

sudo bash -c "echo disabled > \
    /sys/devices/pci0000:00/0000:00:14.0/power/wakeup"  # Problem persists.

내가 찾은 유일한 작동 솔루션은 unbind다음 bind명령을 사용하는 장치 드라이버입니다.

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;'

USB 3.0 저장 장치를 연결하고 컴퓨터를 일시 중지할 때마다 이 작업을 수행해야 하지만 일관되게 작동합니다.

xhci_hcd경로의 구성 요소는 USB 3.0 장치에만 유효하다는 점에 유의해야 합니다 . 경로의 이 부분은 재설정해야 하는 버스 유형에 따라 달라져야 하며 , 또는 다른 유형의 저장 장치에 대한 것일 uhci_hcdsdhci-pci있습니다 ehci-pci.

답변2

답변을 추가해서 죄송하지만 댓글을 추가할 만큼 평판이 부족합니다...

(이것은내가 왜 네 문제를 보고 있는 거지?!) ;-) :P

일시 중단하기 전에 디스크가 방금 연결 해제된 USB 버스를 재설정해 보셨나요?

방법을 모르는 경우 다음을 수행할 수 있습니까?

  1. 기계를 끄세요
  2. 모든 USB 장치를 분리하세요
  3. 모든 전원 케이블, UPS, 배터리 등을 제거합니다.
  4. 기계 전원 켜기(예: 전원 케이블 없이!)
  5. 3단계에서 제거한 모든 전원을 다시 넣습니다.
  6. 머신 부팅
  7. 다음을 수행하십시오:lsusb --verbose > /tmp/good-bus.txt 2>&1
  8. 디스크를 연결하세요
  9. 다음을 수행하십시오:lsusb --verbose > /tmp/bad-bus.txt 2>&1
  10. 디스크 마운트 해제
  11. 디스크 꺼내기
  12. 디스크 제거
  13. 다음을 수행하십시오:lsusb --verbose > /tmp/worse-bus.txt 2>&1
  14. 다음을 수행하십시오:diff --text /tmp/good-bus.txt /tmp/bad-bus.txt > /tmp/test-g-b.txt
  15. 다음을 수행하십시오:diff --text /tmp/good-bus.txt /tmp/worse-bus.txt > /tmp/test-g-w.txt

그런 다음 /tmp/test-gb.txt 및 /tmp/test-gw.txt의 출력을 여기에 다시 보고합니다.

관련 정보