USB 设备未响应设置的地址

USB 设备未响应设置的地址

我的内置 USB 设备不响应​​设置地址。它尝试连续设置设备并连续失败:浪费电池、CPU、磁盘空间等。

有没有办法终止 USB 端口或以其他方式阻止内核尝试配置它?

我尝试过重新启动、使用 uhubctl (不称为智能集线器)、使用端口的电源/autosuspend_delay_ms (获取输入/输出错误)、使用端口的电源/控制(已经自动)、使用集线器的电源/电平(无效的论点)。当然,我不能尝试其他电缆——它是嵌入式设备。

我宁愿不完全禁用集线器,但我愿意尝试一下。我实际上可以通过 Linux 删除 PCI 卡,但这会删除我真正需要的东西(高速 USB 集线器)。

我猜测该设备实际上是一个笔记本电脑指纹识别器,我从未使用过或无法使用,但我记得它在附近。

[ 7283.684834] usb usb1-port7: attempt power cycle
[ 7284.312659] usb 1-7: new full-speed USB device number 41 using xhci_hcd
[ 7284.312858] usb 1-7: Device not responding to setup address.
[ 7284.516966] usb 1-7: Device not responding to setup address.
[ 7284.724647] usb 1-7: device not accepting address 41, error -71
[ 7284.838653] usb 1-7: new full-speed USB device number 42 using xhci_hcd
[ 7284.838852] usb 1-7: Device not responding to setup address.
[ 7285.044852] usb 1-7: Device not responding to setup address.
[ 7285.252760] usb 1-7: device not accepting address 42, error -71
[ 7285.252861] usb usb1-port7: unable to enumerate USB device
[ 7285.366647] usb 1-7: new full-speed USB device number 43 using xhci_hcd
[ 7285.480810] usb 1-7: device descriptor read/64, error -71
[ 7285.702811] usb 1-7: device descriptor read/64, error -71
[ 7285.918653] usb 1-7: new full-speed USB device number 44 using xhci_hcd
[ 7286.032729] usb 1-7: device descriptor read/64, error -71
[ 7286.254780] usb 1-7: device descriptor read/64, error -71
[ 7286.356717] usb usb1-port7: attempt power cycle
Repeat forever

运行 lsusb 当然不会报告设备。然而,上游枢纽是:

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
00:14.0 USB controller: Intel Corporation 100 Series/C230 Series Chipset Family USB 3.0 xHCI Controller (rev 31)

答案1

同时,正如OP所说,一些 USB 集线器有一个附加协议允许关闭单个端口,因此使用 uhubctl 可以轻松解决问题,大多数 USB 集线器(包括内部)没有这样的控制。

Linux 中仍然可以通过向树authorized中该设备的控制文件写入 0 来要求内核禁用 USB 设备的使用/sys/bus/usb/devices。对于运行正常的设备来说,这可以解决问题,但对于始终断开连接并重新连接的设备来说则不然。

尽管如此,当任何 USB 集线器被禁用时,它也会禁用并关闭其所有端口。因此,禁用设备所连接的 USB 集线器将有效禁用并关闭不当设备的电源。如果任何其他连接到该集线器的设备的丢失是可以接受的,那么这是一种可能的方法。

写回1文件authorized将再次启用设备,并且对于集线器,将重新打开其端口的电源,从而重新打开所有连接的设备的电源。

例子:

# cat /sys/bus/usb/devices/2-1/product
USB2.0 Hub
# echo 0 > /sys/bus/usb/devices/2-1/authorized
# dmesg|tail -1
[226616.900051] usb 2-1.3: USB disconnect, device number 30

usb 2-1.3是一个键盘,它的 LED 灯熄灭了。

# echo 1 > /sys/bus/usb/devices/2-1/authorized
# dmesg|fgrep 2-1|tail -10
[227055.203089] hub 2-1:1.0: USB hub found
[227055.204441] hub 2-1:1.0: 4 ports detected
[227055.213891] usb 2-1: authorized to connect
[227055.405342] usb 2-1.3: new low-speed USB device number 41 using xhci_hcd
[227055.511969] usb 2-1.3: New USB device found, idVendor=413c, idProduct=2113, bcdDevice= 1.08
[227055.511975] usb 2-1.3: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[227055.511978] usb 2-1.3: Product: Dell KB216 Wired Keyboard
[227055.520754] input: Dell KB216 Wired Keyboard as /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.3/2-1.3:1.0/0003:413C:2113.001A/input/input136
[227055.583032] input: Dell KB216 Wired Keyboard System Control as /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.3/2-1.3:1.1/0003:413C:2113.001B/input/input137
[227055.641748] input: Dell KB216 Wired Keyboard Consumer Control as /devices/pci0000:00/0000:00:14.0/usb2/2-1/2-1.3/2-1.3:1.1/0003:413C:2113.001B/input/input138

答案2

假设您使用的是 systemd (或相当标准的 Linux 发行版),我认为 USB 初始化可能是由乌德夫,在启动过程中。这个链接解释了 udev 如何加载和初始化设备,它基于存储在/lib/udev/rules.d和中的规则文件/etc/udev/rules.d

这些规则文件之一应该处理 USB 设备。我无法提供精确的细节,但我认为应该可以根据设备路径或其他相关属性更改 USB 规则以排除该特定设备。您可能需要四处探索并尝试一些事情。

相关内容