我在测试实验室遇到了一些硬件问题,当被测试的设备出现问题时,它似乎会“崩溃”USB 控制器,导致端口不显示连接的设备……然而情况变得更糟。如果重新启动设备所连接的服务器,它会在 POST 期间挂起,因为戴尔的生命周期控制器尝试枚举 USB 端口,但它们没有响应。
我尝试了很多方法,例如:
- 尝试
powertop
改变端口状态(不执行任何操作) echo 0 > /sys/bus/usb/devices/usb1/bConfigurationValue
,这应该会发出重置指令。- 更改
/sys/bus/usb/devices/usb1/power/wakeup
为启用和禁用,没有变化 - 在 ipmitool 文档中仔细查找,看看是否有办法做到这一点。
- 使用
modprobe -r usbhid
删除 usbhid 内核模块,然后重新安装
我也尝试过
root@least-nest:/sys/bus/pci/drivers/ehci-pci# echo -n '0000:00:14.0' > unbind root@least-nest:/sys/bus/pci/drivers/ehci-pci# echo -n '0000:00:14.0' > bind
但收到一条消息说
-bash:echo:写入错误:没有这样的设备
这些都无法改变任何事情。似乎几乎不可能真正“重置”或关闭 USB 根集线器/端口。似乎唯一能让服务器成功重启的解决方案是racadm
先禁用内部 USB 端口,然后重启机器,绕过 POST 期间的 USB 枚举。
由于重启是一种极端措施,还有其他方法可以“刷新”或“重新加载”主板内置的 USB 控制器吗?我正在同时研究连接的设备是否也有可以查看的东西(远程关闭电源等),但目前的重点是看看我们是否可以先绕过重启机器。
我应该提到,选择的操作系统是 R630 dells 上的 Ubuntu 18.04。
谢谢!
答案1
专门为此编写了一个工具。它可以重置设备本身、所连接的集线器或机器的所有 USB 端口。
安装pip install usb_resetter
用法:
usb_resetter -d 1234:5678 --reset-hub
其中 1234:5678 是您设备的 VID:PID 数据。可以通过以下方式获取
usb_resetter --list
您可以在以下位置找到更多文档https://github.com/netinvent/usb_resetter
答案2
抱歉我的英语不好,所以我用谷歌翻译哈哈。好吧,您运行的命令是:
echo 0 > /sys/bus/usb/devices/usb1/bConfigurationValue
这会使端口电源关闭,但随后您必须使用 1 执行回显才能将其重新打开,这将导致一种重置。
至少对我来说这是有用的,我告诉你,我在 Redhat 5.1 上进行这项工作,内核是 2.6.18,对 usb 的控制很低,内核 2.6.32 在这方面已经更好了,而且大多数现代版本的 linux 对 usb 端口的控制都更多
我希望这对你有帮助,我回复得有点晚,但也许这会对另一位同事有所帮助来自阿根廷的问候
答案3
当我在类似情况下遇到类似问题时,结果发现该设备耗电量很大,并且计算机上的 USB 端口和集线器无法持续供电。
我最终得到了一个外部供电的集线器,从那时起我就再也没有遇到过任何死机的情况。
您可以在网上找到测量 USB 端口(正在使用)电流和电压的设备。我建议您买一个。