两台Linux机器(嵌入式板和PC)通过USB电缆相互连接,并通过USB小工具/以太网建立通信。双方都有IP地址,ping通等
我需要找到一种方法来检测板侧的 USB 电缆断开连接,最好使用单个 Bash 命令。
ifconfig usb0
即使拔掉电缆后,仍然显示 IP 地址并且该设备处于“UP”和“RUNNING”状态。
在我的特定情况下,结果是硬件+软件问题:驱动程序(atmel_usba_udc)正在使用USB电源(VBUS)来检测连接,因为它充当从设备并且电源由主机提供。然而,在 PCB 中,电路板本身无条件地同时为所有 USB 端口提供电源。
通常任何标准方法都应该有效:ifconfig 或 sysfs。
执行此操作的一种方法是检查文件:
/sys/class/net/usb0/operstate
如果文件内容为“up”,则链接存在。如果内容是“down”,则没有链接。
PiZero 作为小工具(
g_cdc
驱动程序)也有同样的问题。/sys/class/net/usb0/carrier
似乎也不可用。
current_speed
似乎非常成功地在加载驱动程序后检测连接/断开状态(允许一些时间来稳定)。current_speed
可能是 high-speed
或 full-speed
。UNKNOWN
,因此:
udc_gadget="$( dirname "$( find -L /sys/class/udc/* -maxdepth 2 -type f -name "is_a_peripheral")" )"
[ "$( cat "$udc_gadget"/current_speed )" = "UNKNOWN" ] && echo "not connected"