如何理解和调试 Linux 的 USB 问题

gcb*_*gcb 5 linux usb drivers kernel

我在使用名为Tek Republic TUS-200 USB 共享开关的廉价“反向 USB 集线器”(不确定技术名称可能是什么)时遇到了一个奇怪的问题。它有一个用于设备的 USB 端口和两个可以连接两台计算机的主机端口,然后是一个将设备连接到一台或另一台计算机的开关。我将其用作带有一个 USB 键盘和两台计算机的 KVM)

它在 Windows 上运行良好,但这可能只是因为我使用的笔记本电脑每个端口都有一个 USB 总线……稍后会详细介绍。

在 Linux Debian 7 3.2.0-4-amd64 上,它运行良好,直到在同一 USB 总线上的另一台设备上有大量数据传输。例如,将大文件复制到笔式驱动器。

我几乎可以肯定这与反向 USB 上的接地有关,因为当它仅连接到一台计算机时不会发生这种情况。

但是这里问题不是调试所述设备,而是理解 Linux 内核 USB 系统日志消息,因为我从来不必处理它们,现在我找不到任何用外行术语解释它的东西。

这是:一旦我开始在反向集线器所在的同一 USB 总线上传输到笔式驱动器,我就会得到这个dmesg

Feb  8 16:36:51 dotmatrix kernel: [10807.868649] generic-usb 0003:04D9:0114.0006: can't reset device, 0000:00:1a.0-1.6.4/input1, status -75
Feb  8 16:36:51 dotmatrix kernel: [10807.872669] usb 1-1.6: clear tt 1 (00a0) error -71
Feb  8 16:36:51 dotmatrix kernel: [10807.873710] generic-usb 0003:04D9:A09F.0001: can't reset device, 0000:00:1a.0-1.6.1/input0, status -71
Feb  8 16:36:51 dotmatrix kernel: [10807.876699] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -71
Feb  8 16:36:51 dotmatrix kernel: [10807.877658] usb 1-1.6: clear tt 1 (0080) error -71
Feb  8 16:36:51 dotmatrix kernel: [10807.881663] generic-usb 0003:04D9:A09F.0002: can't reset device, 0000:00:1a.0-1.6.1/input1, status -71
Feb  8 16:36:51 dotmatrix kernel: [10807.881766] usb 1-1.6: clear tt 1 (00a0) error -71
Feb  8 16:36:51 dotmatrix kernel: [10807.883641] generic-usb 0003:0C45:7401.0004: can't reset device, 0000:00:1a.0-1.6.3/input0, status -71
Feb  8 16:36:51 dotmatrix kernel: [10807.885815] generic-usb 0003:04D9:0114.0006: can't reset device, 0000:00:1a.0-1.6.4/input1, status -71
Feb  8 16:36:51 dotmatrix kernel: [10807.885880] usb 1-1.6: clear tt 1 (0080) error -71
Run Code Online (Sandbox Code Playgroud)

过了一会儿,消息变成:

Feb  8 16:36:52 dotmatrix kernel: [10808.890502] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.890752] generic-usb 0003:04D9:A09F.0001: can't reset device, 0000:00:1a.0-1.6.1/input0, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.892162] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.893202] generic-usb 0003:0C45:7401.0004: can't reset device, 0000:00:1a.0-1.6.3/input0, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.894235] generic-usb 0003:04D9:0114.0006: can't reset device, 0000:00:1a.0-1.6.4/input1, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.895038] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.898724] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.900590] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.901409] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:52 dotmatrix kernel: [10808.901668] generic-usb 0003:0C45:7401.0004: can't reset device, 0000:00:1a.0-1.6.3/input0, status -32
Run Code Online (Sandbox Code Playgroud)

然后一个

Feb  8 16:36:57 dotmatrix kernel: [10814.370566] usb 1-1.6.1: device not accepting address 8, error -32
Run Code Online (Sandbox Code Playgroud)

然后回到上面的状态-32。有时它会“重置”:

Feb  8 16:36:58 dotmatrix kernel: [10815.142955] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.144945] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.288169] usb 1-1.6.1: reset full-speed USB device number 8 using ehci_hcd
Feb  8 16:36:58 dotmatrix kernel: [10815.438083] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.452998] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.467998] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.481784] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.508875] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.521838] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.533804] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.545770] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.557731] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.569698] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:58 dotmatrix kernel: [10815.603594] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:59 dotmatrix kernel: [10815.635501] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:59 dotmatrix kernel: [10815.656441] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:59 dotmatrix kernel: [10815.666411] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -32
Feb  8 16:36:59 dotmatrix kernel: [10815.666655] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -32
Feb  8 16:36:59 dotmatrix kernel: [10815.694672] usb 1-1.6.1: device not accepting address 8, error -32
Feb  8 16:36:59 dotmatrix kernel: [10815.696707] usb 1-1.6.1: USB disconnect, device number 8
Feb  8 16:36:59 dotmatrix kernel: [10815.954352] usb 1-1.6.3: reset low-speed USB device number 9 using ehci_hcd
Feb  8 16:36:59 dotmatrix kernel: [10816.213579] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:36:59 dotmatrix kernel: [10816.576510] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:00 dotmatrix kernel: [10816.683747] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -16
Feb  8 16:37:00 dotmatrix kernel: [10816.939302] usb 1-1.6.3: reset low-speed USB device number 9 using ehci_hcd
Feb  8 16:37:00 dotmatrix kernel: [10817.198547] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:01 dotmatrix kernel: [10818.375220] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:05 dotmatrix kernel: [10821.729353] usb 1-1.6.3: reset low-speed USB device number 9 using ehci_hcd
Feb  8 16:37:05 dotmatrix kernel: [10822.135753] usb 1-1.6.3: device not accepting address 9, error -32
Feb  8 16:37:06 dotmatrix kernel: [10823.392464] usb 1-1.6.3: reset low-speed USB device number 9 using ehci_hcd
Feb  8 16:37:07 dotmatrix kernel: [10823.798897] usb 1-1.6.3: device not accepting address 9, error -32
Feb  8 16:37:07 dotmatrix kernel: [10823.871064] usb 1-1.6.4: reset full-speed USB device number 10 using ehci_hcd
Feb  8 16:37:08 dotmatrix kernel: [10825.031645] usb 1-1.6.1: new full-speed USB device number 19 using ehci_hcd
Feb  8 16:37:08 dotmatrix kernel: [10825.509849] usb 1-1.6.1: device not accepting address 19, error -32
Feb  8 16:37:09 dotmatrix kernel: [10826.427537] usb 1-1.6.1: new full-speed USB device number 20 using ehci_hcd
Feb  8 16:37:09 dotmatrix kernel: [10826.524335] usb 1-1.6.1: unable to read config index 0 descriptor/all
Feb  8 16:37:09 dotmatrix kernel: [10826.524340] usb 1-1.6.1: can't read configurations, error -32
Feb  8 16:37:10 dotmatrix kernel: [10826.595014] usb 1-1.6.1: new full-speed USB device number 21 using ehci_hcd
Feb  8 16:37:10 dotmatrix kernel: [10826.832449] usb 1-1.6.1: New USB device found, idVendor=04d9, idProduct=a09f
Feb  8 16:37:10 dotmatrix kernel: [10826.832454] usb 1-1.6.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
Feb  8 16:37:10 dotmatrix kernel: [10826.832457] usb 1-1.6.1: Product: USB Gaming Mouse
Feb  8 16:37:10 dotmatrix kernel: [10826.832459] usb 1-1.6.1: Manufacturer: E-Signal
Feb  8 16:37:10 dotmatrix kernel: [10826.835328] input: E-Signal USB Gaming Mouse as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6.1/1-1.6.1:1.0/input/input11
Feb  8 16:37:10 dotmatrix kernel: [10826.835552] generic-usb 0003:04D9:A09F.0009: input,hidraw0: USB HID v1.10 Mouse [E-Signal USB Gaming Mouse] on usb-0000:00:1a.0-1.6.1/input0
Feb  8 16:37:10 dotmatrix kernel: [10826.840323] input: E-Signal USB Gaming Mouse as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6.1/1-1.6.1:1.1/input/input12
Feb  8 16:37:10 dotmatrix kernel: [10826.840663] generic-usb 0003:04D9:A09F.000A: input,hiddev0,hidraw1: USB HID v1.10 Keyboard [E-Signal USB Gaming Mouse] on usb-0000:00:1a.0-1.6.1/input1
Feb  8 16:37:10 dotmatrix kernel: [10826.843392] generic-usb 0003:04D9:A09F.000B: hiddev0,hidraw2: USB HID v1.10 Device [E-Signal USB Gaming Mouse] on usb-0000:00:1a.0-1.6.1/input2
Feb  8 16:37:10 dotmatrix kernel: [10826.844372] usb 1-1.6.3: USB disconnect, device number 9
Feb  8 16:37:10 dotmatrix kernel: [10827.057683] usb 1-1.6.3: new low-speed USB device number 22 using ehci_hcd
Feb  8 16:37:10 dotmatrix kernel: [10827.129474] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:10 dotmatrix kernel: [10827.304942] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:10 dotmatrix kernel: [10827.480417] usb 1-1.6.3: new low-speed USB device number 23 using ehci_hcd
Feb  8 16:37:10 dotmatrix kernel: [10827.552202] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:11 dotmatrix kernel: [10827.727689] usb 1-1.6.3: device descriptor read/64, error -32
Feb  8 16:37:11 dotmatrix kernel: [10827.903169] usb 1-1.6.3: new low-speed USB device number 24 using ehci_hcd
Feb  8 16:37:11 dotmatrix kernel: [10828.029940] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -32
Feb  8 16:37:11 dotmatrix kernel: [10828.038042] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -32
Feb  8 16:37:11 dotmatrix kernel: [10828.309656] usb 1-1.6.3: device not accepting address 24, error -32
Feb  8 16:37:11 dotmatrix kernel: [10828.381760] usb 1-1.6.3: new low-speed USB device number 25 using ehci_hcd
Feb  8 16:37:12 dotmatrix kernel: [10828.788252] usb 1-1.6.3: device not accepting address 25, error -32
Feb  8 16:37:12 dotmatrix kernel: [10828.788575] hub 1-1.6:1.0: unable to enumerate USB device on port 3
Feb  8 16:37:35 dotmatrix kernel: [10851.552743] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -32
Feb  8 16:37:48 dotmatrix kernel: [10864.780978] generic-usb 0003:04D9:A09F.0009: can't reset device, 0000:00:1a.0-1.6.1/input0, status -32
Feb  8 16:37:48 dotmatrix kernel: [10864.781857] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -32
Feb  8 16:37:50 dotmatrix kernel: [10867.368090] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -32
Feb  8 16:37:57 dotmatrix kernel: [10874.126293] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -32
Feb  8 16:38:05 dotmatrix kernel: [10882.314361] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -75
Feb  8 16:38:05 dotmatrix kernel: [10882.318341] usb 1-1.6: clear tt 1 (0150) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.319290] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.322411] generic-usb 0003:04D9:A09F.0009: can't reset device, 0000:00:1a.0-1.6.1/input0, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.323327] usb 1-1.6: clear tt 1 (00a0) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.327443] generic-usb 0003:04D9:0114.0005: can't reset device, 0000:00:1a.0-1.6.4/input0, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.327450] usb 1-1.6: clear tt 1 (0150) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.331515] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.331548] usb 1-1.6: clear tt 1 (00a0) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.335628] generic-usb 0003:04D9:0114.0006: can't reset device, 0000:00:1a.0-1.6.4/input1, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.335666] usb 1-1.6: clear tt 1 (0150) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.339740] generic-usb 0003:04D9:A09F.0009: can't reset device, 0000:00:1a.0-1.6.1/input0, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.339777] usb 1-1.6: clear tt 1 (00a0) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.343846] generic-usb 0003:04D9:0114.0008: can't reset device, 0000:00:1a.0-1.6.4/input3, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.343890] usb 1-1.6: clear tt 1 (0150) error -71
Feb  8 16:38:05 dotmatrix kernel: [10882.347950] generic-usb 0003:04D9:A09F.000A: can't reset device, 0000:00:1a.0-1.6.1/input1, status -71
Feb  8 16:38:05 dotmatrix kernel: [10882.348006] usb 1-1.6: clear tt 1 (00a0) error -71
Run Code Online (Sandbox Code Playgroud)

我发现其他人也有同样的消息,但它总是关于 USB 电视加密狗。恰好与此反向集线器具有相同的供应商:设备 ID。此外,一些 8 端口集线器(只有一个端口)也具有相同的供应商:设备 ID。所以我怀疑这是通用USB接口芯片的ID。lsusb给我看。

05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB
Run Code Online (Sandbox Code Playgroud)

问题真的是我在哪里可以获得有关正在发生的事情的更多信息?我如何确保它不是设备故障(例如,如果主板对设备的电流供应不足,我能否在系统的某处看到它)?

为什么它会列出这样的事情generic-usb 0003:0C45:7401.0004?据我所知,这意味着<driver name> <usb bus>:<vendor id>:<device id>:<usb device in bus>……是正确的吗?

为什么它会can’t reset device 0000.00说明这些零的含义?

我在哪里可以找到什么样的地位-32-71-75,等手段?

……我应该阅读什么指南?我对此感到非常迷茫。

Mat*_*lis 4

USB 状态代码及其可能的原因可以在您的内核源文件中找到Documentation/usb/error-codes.txt。在Debian\xc2\xa09 (Stretch) 中,它包含在 package 中linux-doc,该包将其安装在/usr/share/doc/linux-doc-4.9/Documentation/usb/error-codes.txt.gz.

\n

请注意,该文件中的错误由其名称给出(例如-71being EPROTO);要找出号码/姓名匹配,您需要:

\n
grep -w 71 /usr/include/asm-generic/errno*.h\n
Run Code Online (Sandbox Code Playgroud)\n

或者换个方式:

\n
grep -w EPROTO /usr/include/asm-generic/errno*.h\n
Run Code Online (Sandbox Code Playgroud)\n

确保系统上存在开发包含文件(在 Debian 中,通过执行apt-get install linux-libc-dev),否则您将不会得到任何匹配项...

\n
\n

更新的版本(如 Debian 11 (Bullseye))包含/usr/bin/errnomoreutils包中,这样更容易记住:

\n
% errno 71\nEPROTO 71 Protocol error\n\n% errno EPROTO\nEPROTO 71 Protocol error\n
Run Code Online (Sandbox Code Playgroud)\n