내 외장 하드 드라이브 도크에는 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
) usbreset
ioctl()
, USBDEVFS_RESET을 통해 시작됨ioctl()
USBDEVFS_(DIS)CONNECT에는 없음
왜냐하면커널 메시지는 실제 물리적 재삽입과 다르게 보입니다.
그것은 어떻게 생겼나요?커널 로그에 실제 재삽입과 구별할 수 없는 점은 다음과 같습니다.
/sys/bus/usb/devices/.../port/disable
상호 작용1
비활성화하려면 이 파일 에 쓰십시오 .- 인터페이스가 컨트롤러를 기반으로 하는 위치를 기억하세요.
pwd -P
- 또는 읽다답변이 너무 길어요장치를 다시 활성화하는 방법에 대한 자세한 내용 및 예
그것가능한전체 포트 제어는 모든 곳에서 잘 작동하지 않습니다. 일부 하드웨어는 USB 포트에 대한 5V 전원을 절대 비활성화할 수 없기 때문입니다. 나는 오래된 사무실 컴퓨터와 USB 허브가 있는 (또한 오래된) 사무실 모니터에서 임의의 포트를 테스트했습니다. 훌륭하게 작동했습니다.