我正在为工作构建一系列带有 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'
这应该可以解决问题。
来源:这里