两台Linux机器(嵌入式板和PC机)通过USB线连接,通过USB gadget/以太网建立通信,双方都有IP地址、ping工作等。我需要找到一种方法来检测板侧的USB电缆断开,理想情况下使用单个Bash命令。ifconfig usb0仍然显示IP地址,即使在拔下电缆后,该设备仍处于“UP”和“RUNNING”状态。
ifconfig usb0
2cmtqfgy1#
在我的特殊情况下,它原来是硬件+软件问题:驱动程序(atmel_usba_udc)是使用USB电源(VBUS)来检测连接,因为它作为一个从机和电源由主机提供。然而,在PCB电源是由板本身无条件地提供所有USB端口一次。通常,任何标准方法都可以工作:ifconfig或sysfs。
lg40wkob2#
一种方法是检查文件:
/sys/class/net/usb0/operstate
字符串如果文件内容为“up”,则链接存在。如果内容为“down”,则没有链接。
s4n0splo3#
在PiZero上有与gadget相同的问题(g_cdc驱动程序)。/sys/class/net/usb0/carrier似乎也不存在。在加载驱动程序后,测试current_speed似乎相当成功(请留出一些时间让它稳定下来)。如果连接了电缆,current_speed可能是high-speed或full-speed。当电缆未连接时,它是UNKNOWN,因此:
g_cdc
/sys/class/net/usb0/carrier
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"
字符串
3条答案
按热度按时间2cmtqfgy1#
在我的特殊情况下,它原来是硬件+软件问题:驱动程序(atmel_usba_udc)是使用USB电源(VBUS)来检测连接,因为它作为一个从机和电源由主机提供。然而,在PCB电源是由板本身无条件地提供所有USB端口一次。
通常,任何标准方法都可以工作:ifconfig或sysfs。
lg40wkob2#
一种方法是检查文件:
字符串
如果文件内容为“up”,则链接存在。如果内容为“down”,则没有链接。
s4n0splo3#
在PiZero上有与gadget相同的问题(
g_cdc
驱动程序)。/sys/class/net/usb0/carrier
似乎也不存在。在加载驱动程序后,测试
current_speed
似乎相当成功(请留出一些时间让它稳定下来)。如果连接了电缆,
current_speed
可能是high-speed
或full-speed
。当电缆未连接时,它是
UNKNOWN
,因此:字符串