linux 如何检测usb0设备(USB小工具又名g_ether)的断开?

vfwfrxfs  于 2023-11-17  发布在  Linux
关注(0)|答案(3)|浏览(244)

两台Linux机器(嵌入式板和PC机)通过USB线连接,通过USB gadget/以太网建立通信,双方都有IP地址、ping工作等。
我需要找到一种方法来检测板侧的USB电缆断开,理想情况下使用单个Bash命令。
ifconfig usb0仍然显示IP地址,即使在拔下电缆后,该设备仍处于“UP”和“RUNNING”状态。

2cmtqfgy

2cmtqfgy1#

在我的特殊情况下,它原来是硬件+软件问题:驱动程序(atmel_usba_udc)是使用USB电源(VBUS)来检测连接,因为它作为一个从机和电源由主机提供。然而,在PCB电源是由板本身无条件地提供所有USB端口一次。
通常,任何标准方法都可以工作:ifconfig或sysfs。

lg40wkob

lg40wkob2#

一种方法是检查文件:

/sys/class/net/usb0/operstate

字符串
如果文件内容为“up”,则链接存在。如果内容为“down”,则没有链接。

s4n0splo

s4n0splo3#

在PiZero上有与gadget相同的问题(g_cdc驱动程序)。
/sys/class/net/usb0/carrier似乎也不存在。
在加载驱动程序后,测试current_speed似乎相当成功(请留出一些时间让它稳定下来)。
如果连接了电缆,current_speed可能是high-speedfull-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"

字符串

相关问题