Linux:使用ehci_hcd错误和解决方案重置高速USB设备

时间:2020-01-09 10:43:27  来源:igfitidea点击:

我在CentOS/RHEL6.x /var/log/messages文件中经常记录以下消息:

Oct 13 14:00:20 server1 kernel: usb 1-7: reset high speed USB device using ehci_hcd and address 2  Oct 13 14:05:57 server1 kernel: usb 1-7: reset high speed USB device using ehci_hcd and address 2  Oct 13 14:09:18 server1 kernel: usb 1-7: reset high speed USB device using ehci_hcd and address 2  Oct 13 14:11:42 server1 kernel: usb 1-7: reset high speed USB device using ehci_hcd and address 2  Oct 13 14:11:49 server1 kernel: usb 1-7: reset high speed USB device using ehci_hcd and address 2

我该如何解决这个问题?

增强型主机控制器接口(EHCI)是寄存器级接口,使USB或者FireWire硬件的主机控制器能够与软件中的主机控制器驱动程序进行通信。
在这种情况下,USB版本为2.0。

ehci-hcd.ko是USB 2.0增强主机控制器(EHCI)驱动程序。
此错误表明USB 2.0可能无法在您的系统上运行,或者只能以USB 1.1的速度运行。
要解决此问题:

  • 更换硬件:在大多数情况下,您需要更换主板。
  • 删除ehci_hcd驱动程序
  • 禁用ehci_hcd驱动器USB 2.0接口并将其用作USB 1.1。简而言之,请禁用ehci_hcd。

如何查找有关EHCI控制器的更多信息?

执行以下命令:

# lspci |grep -i ehci

输出示例:

00:1d.7 USB Controller: Intel Corporation 631xESB/632xESB/3100 Chipset EHCI USB2 Controller (rev 09)

您还可以使用lsusb命令来获取有关系统中的USB总线以及与其连接的设备的详细信息:

# lsusb
# lsusb -v | less

Linux:删除ehci_hcd驱动程序

您需要通过编辑/etc/modprobe.d/blacklist.conf文件将ehci_hcd驱动程序列入黑名单,执行:

# vi /etc/modprobe.d/blacklist.conf

您需要在此处列出/添加模块,以防止热插拔脚本加载该模块:

blacklist ehci_hcd

保存并关闭文件。
最后,使用mkinitrd脚本构建一个目录结构,该目录结构可以用作没有ehci_hcd的initrd根文件系统:

# mkinitrd -o /boot/initrd.$(uname -r).img $(uname -r)

为了进行测试,请重新引导系统:

# reboot

Linux:禁用ehci_hcd驱动程序

要解除绑定ehci_hcd驱动器支持,请执行以下命令:

# cd /sys/bus/pci/drivers/ehci_hcd/
# ls -l

输出示例:

lrwxrwxrwx. 1 root root    0 Oct 13 17:29 0000:00:1d.7 -> ../../../../devices/pci0000:00/0000:00:1d.7
--w-------. 1 root root 4096 Oct 13 17:29 bind
lrwxrwxrwx. 1 root root    0 Oct 13 17:29 module -> ../../../../module/ehci_hcd
--w-------. 1 root root 4096 Oct 13 17:29 new_id
--w-------. 1 root root 4096 Oct 13 17:29 remove_id
--w-------. 1 root root 4096 Oct 13 17:29 uevent
--w-------. 1 root root 4096 Oct 13 17:29 unbind

执行以下命令:

# echo -n "0000:00:1d.7" > /sys/bus/pci/drivers/ehci_hcd/unbind

这将以1.1速度运行USB。
您将不会看到该消息,并且/或者您将能够使用USB设备本身。
只需将上面的命令添加到/etc/rc.local中,以使其在重新启动系统后即可工作。