我有一个小型 Linux 测试盒,上面有一个精美的 USB 局域网千兆适配器。该适配器首先与 4 端口 USB3 集线器连接,然后连接到机器。
机器 -> USB3 4端口集线器 -> 局域网适配器
我也尝试过从外部为集线器供电,但结果没有改变。经过一段随机时间后,这个 USB LAN 接口就死掉了。
这是日志控制日志中,该接口名为eth1
myhost kernel: usb 2-1: USB disconnect, device number 3
myhost kernel: usb 2-1.1: USB disconnect, device number 5
myhost kernel: ax88179_178a 2-1.1:1.0 eth1: unregister 'ax88179_178a' usb-0000:00:14.0-1.1, ASIX AX88179
myhost kernel: ax88179_178a 2-1.1:1.0 eth1: Failed to read reg index 0x0002: -19
myhost kernel: ax88179_178a 2-1.1:1.0 eth1: Failed to write reg index 0x0002: -19
myhost systemd[1]: Stopping ifup for eth1...
myhost kernel: ax88179_178a 2-1.1:1.0 eth1 (unregistered): Failed to write reg index 0x0002: -19
myhost kernel: ax88179_178a 2-1.1:1.0 eth1 (unregistered): Failed to write reg index 0x0001: -19
myhost kernel: ax88179_178a 2-1.1:1.0 eth1 (unregistered): Failed to write reg index 0x0002: -19
相反,这发生在LSSB在设备未响应之前记录:
Bus 002 Device 007: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 002 Device 006: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 002 Device 003: ID 05e3:0626 Genesys Logic, Inc.
Bus 002 Device 004: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 002 Device 002: ID 05e3:0626 Genesys Logic, Inc.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 8087:07dc Intel Corp.
Bus 001 Device 003: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
设备无响应后:
Bus 002 Device 007: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 002 Device 006: ID 0b95:1790 ASIX Electronics Corp. AX88179 Gigabit Ethernet
Bus 002 Device 004: ID 05e3:0626 Genesys Logic, Inc.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 8087:07dc Intel Corp.
Bus 001 Device 003: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 002: ID 05e3:0610 Genesys Logic, Inc. 4-port hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
USB3 集线器似乎有 2 个设备地址 USB2 和 USB3 部分... USB3 部分总线 002 设备 002死亡时总线 001 设备 002仍然是。
重新启动系统再过 30 分钟即可解决问题。
然而重启系统是非常烦人的。
我可以调用一个代码来物理禁用和重新启用 USB 集线器或整个 USB 根目录,而不必每 30 分钟重新启动一次系统?
在更改如此不稳定的硬件之前,我想编写一个 cron 脚本来解决这个问题。
我还尝试了其他问题中提出的一些其他解决方案,但我想重新启动设备的整个 USB 根,这可以代替重新启动无法再访问的单个设备。
谢谢
答案1
您可以尝试使用uhubctl
端口断电和通电。这应该会导致设备重置并且内核应该重新检测它。
例如,在我的机器上,这将关闭/打开 USB 端口 1-2.2
# /usr/sbin/uhubctl -l 1-2 -p 2 -a off
Current status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0101 power connect []
Sent power off request
New status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0000 off
# uhubctl -l 1-2 -p 2 -a on
Current status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0000 off
Sent power on request
New status for hub 1-2 [0bda:5411 Generic 4-Port USB 2.0 Hub, USB 2.10, 4 ports]
Port 2: 0101 power connect []
并非所有 USB 端口都可以通过这种方式进行控制,但我之前曾用它来重新检测 USB 设备。
计算出 和 `-p 的正确值-l
可能需要一些尝试和错误。
你写了
myhost kernel: usb 2-1.1: USB disconnect, device number 5
所以我会先尝试-l 2-1 -p 1