USB 设备不接受地址

USB 设备不接受地址

我正在为工作构建一系列带有 USB 读卡器的机器。当我启动它们时,我收到一长串消息:

...
[ 2347.768419] hub 1-6:1.0: unable to enumerate USB device on port 6
[ 2347.968178] usb 1-6.6: new full-speed USB device number 10 using ehci_hcd
[ 2352.552020] usb 1-6.6: device not accepting address 10, error -32
[ 2352.568421] hub 1-6:1.0: unable to enumerate USB device on port 6
[ 2352.768179] usb 1-6.6: new full-speed USB device number 12 using ehci_hcd
[ 2357.352033] usb 1-6.6: device not accepting address 12, error -32
...

在一些较旧的机器上,只需要尝试几次,读卡器就会最终接受地址,而在较新的机器上,这可能需要几分钟的时间。更换硬件不是一种选择,将 USB 读卡器插入不同的端口只是旧机器的一种选择。这是 11.04 下的一个问题,我现在正在运行 12.04 测试版,它仍然在发生。

我可以在软件中做些什么(也许是 udev 规则?)来解决这个问题?

任何建议都值得赞赏。如果您需要,我很乐意提供更多详细信息。

答案1

您能尝试旧的 USB 设备初始化方案吗?可以通过更改内核参数来完成/etc/default/grub

  • GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"把下面这行改为GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.old_scheme_first=1"
  • 跑步update-grub
  • 重新启动并查看是否有帮助

答案2

就我而言,我的机器内部似乎有一个集线器(可能提供背面的四端口集群),它不会接受分配的地址。

我的日志消息如下所示:

usb 6-1: new low-speed USB device number 116 using uhci_hcd
usb 6-1: device not accepting address 116, error -71
hub 6-0:1.0: unable to enumerate USB device on port 1

这表明USB 总线 6。我跟它没有任何关系,而且我希望它闭嘴。

现在我们需要找到相关的驱动程序。在本例中是uhci_hcd,所以

$ sudo -s
# cd /sys/bus/pci/drivers/uhci_hcd

并查找哪个 PCI 设备提供 USB 总线 6:

# echo */usb6
0000:00:1a.2/usb5

这里的目录名是该 USB 总线对应的 PCI 总线 ID。然后就很简单了:

# echo 0000:00:1d.0 > unbind

将其关闭。

如果这个方法有效,那么只需将最后一行添加到启动时脚本中即可。似乎应该有一个内核参数来避免某些 USB 总线,但我找不到。

(基于titaniumtux 的回答但试图避免解除键盘绑定。可以说我老派,但我仍然使用它。)

答案3

usb 2-2: new high speed USB device using address 10
usb 2-2: device not accepting address 10, error -71
...
usb 2-2: new high speed USB device using address 13
usb 2-2: device not accepting address 13, error -71

在 CentOS 上。

成立http://paulphilippov.com/articles/how-to-fix-device-not-accepting-address-error

果然,在方程中插入一个有源 USB 集线器就可以解决问题。

答案4

制作一个包含以下内容的脚本并在启动时运行它:

cd /sys/bus/pci/drivers/ehci_hcd/

sudo sh -c 'find ./ -name "0000:00:*" -print| sed "s/\.\///">unbind'

这应该可以解决问题。

来源:这里

相关内容