강제로 USB 연결 해제/재연결

강제로 USB 연결 해제/재연결

내 외장 하드 드라이브 도크에는 USB 케이블을 연결하는 것이 마지막 단계(예: 드라이브 삽입, 전원 켜기, 연결)여야 하는 실망스러운 설치 순서가 필요합니다.

이렇게 했더니 잘 작동했지만 케이블에 접근하기가 쉽지 않았고 자주 연결하고 뽑으면 케이블이 손상될까봐 걱정되었습니다.

그래서 USB 케이블을 연결한 상태에서 기기의 전원을 켜 보았습니다. 때로는 작동하지만 때로는 작동하지 않습니다. 작동하지 않으면 다음 메시지가 나타납니다(dmesg).

[372734.412683] xhci_hcd 0000:00:14.0: Command completion event does not match command
[372734.412686] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[372739.622686] xhci_hcd 0000:00:14.0: Timeout while waiting for setup device command
[372739.826432] usb 3-5: device not accepting address 21, error -62

lsusb -v는 다음을 제공합니다.

Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 Unused
  bDeviceProtocol         3 
  bMaxPacketSize0         9
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0003 3.0 root hub
  bcdDevice            4.02
  iManufacturer           3 Linux 4.2.0-0.bpo.1-amd64 xhci-hcd
  iProduct                2 xHCI Host Controller
  iSerial                 1 0000:00:14.0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           31
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 Unused
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
        bMaxBurst               0
Hub Descriptor:
  bLength              12
  bDescriptorType      42
  nNbrPorts             6
  wHubCharacteristic 0x000a
    No power switching (usb 1.0)
    Per-port overcurrent protection
  bPwrOn2PwrGood       10 * 2 milli seconds
  bHubContrCurrent      0 milli Ampere
  bHubDecLat          0.0 micro seconds
  wHubDelay             0 nano seconds
  DeviceRemovable    0x00
 Hub Port Status:
   Port 1: 0000.02a0 5Gbps power Rx.Detect
   Port 2: 0000.02a0 5Gbps power Rx.Detect
   Port 3: 0000.02a0 5Gbps power Rx.Detect
   Port 4: 0000.02a0 5Gbps power Rx.Detect
   Port 5: 0000.02e0 5Gbps power Polling
   Port 6: 0000.02a0 5Gbps power Rx.Detect

그래서 제가 올바르게 이해했다면, 내부 USB 허브 메모리에 약간의 오류가 있는 것입니다.

그래서 USB 케이블을 조작하지 않고도 일종의 재설정을 시뮬레이션하고 장치를 다시 등록할 수 있는 방법이 있는지 궁금했습니다.

이는 예를 들어 장비의 원격 설치에도 도움이 됩니다.

감사해요

답변1

조금 오래되었지만 답변이 필요해서 다른 곳에서 찾았습니다.

먼저 오류 메시지에서 허브 장치 이름을 복사합니다. 당신에 관한 한,0000:00:14.0

그런 다음 루트로서 다음 작업을 수행합니다.

echo 0000:00:14.0 >> /sys/bus/pci/drivers/xhci_hcd/unbind
echo 0000:00:14.0 >> /sys/bus/pci/drivers/xhci_hcd/bind

곧: 허브가 재설정되었으며 계속 사용할 수 있습니다.

나는 수년간 이 오류를 처리해 왔습니다. 이것이 커널 문제인지 하드웨어 문제인지 확실하지 않습니다(내 주요 의심). 하지만 적어도 이제는 USB 허브를 재설정하기 위해 재부팅할 필요가 없습니다.

답변2

실제로 플러그를 뽑았다가 다시 연결하는 것과 가장 가까운 것은절대적으로하지:

  • 바인딩 해제 + 바인딩(예: pass /sys/bus/usb/devices/.../driver/bind)
  • usbresetioctl(), USBDEVFS_RESET을 통해 시작됨
  • ioctl()USBDEVFS_(DIS)CONNECT에는 없음

왜냐하면커널 메시지는 실제 물리적 재삽입과 다르게 보입니다.

그것은 어떻게 생겼나요?커널 로그에 실제 재삽입과 구별할 수 없는 점은 다음과 같습니다.

  • /sys/bus/usb/devices/.../port/disable상호 작용
  • 1비활성화하려면 이 파일 에 쓰십시오 .
  • 인터페이스가 컨트롤러를 기반으로 하는 위치를 기억하세요.pwd -P
  • 또는 읽다답변이 너무 길어요장치를 다시 활성화하는 방법에 대한 자세한 내용 및 예

그것가능한전체 포트 제어는 모든 곳에서 잘 작동하지 않습니다. 일부 하드웨어는 USB 포트에 대한 5V 전원을 절대 비활성화할 수 없기 때문입니다. 나는 오래된 사무실 컴퓨터와 USB 허브가 있는 (또한 오래된) 사무실 모니터에서 임의의 포트를 테스트했습니다. 훌륭하게 작동했습니다.

관련 정보