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

问题描述 投票:0回答:3

两台Linux机器(嵌入式板和PC)通过USB电缆相互连接,并通过USB小工具/以太网建立通信。双方都有IP地址,ping通等

我需要找到一种方法来检测板侧的 USB 电缆断开连接,最好使用单个 Bash 命令。

ifconfig usb0
即使拔掉电缆后,仍然显示 IP 地址并且该设备处于“UP”和“RUNNING”状态。

linux networking embedded embedded-linux
3个回答
1
投票

在我的特定情况下,结果是硬件+软件问题:驱动程序(atmel_usba_udc)正在使用USB电源(VBUS)来检测连接,因为它充当从设备并且电源由主机提供。然而,在 PCB 中,电路板本身无条件地同时为所有 USB 端口提供电源。

通常任何标准方法都应该有效:ifconfig 或 sysfs。


0
投票

执行此操作的一种方法是检查文件:

/sys/class/net/usb0/operstate

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


0
投票

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"
© www.soinside.com 2019 - 2024. All rights reserved.