提问人:ivand 提问时间:8/18/2022 最后编辑:ivand 更新时间:11/19/2023 访问量:552
如何检测 usb0 设备(USB 小工具又名 g_ether)的断开连接?
How to detect disconnection of usb0 device (USB gadget aka g_ether)?
问:
两台 Linux 机器(嵌入式板和 PC)通过 USB 电缆相互连接,并通过 USB 小工具/以太网建立通信。双方都有IP地址,ping工作等。
我需要找到一种方法来检测板侧的 USB 电缆断开连接,最好使用单个 Bash 命令。
ifconfig usb0
即使拔下电缆,仍显示 IP 地址,并且该设备仍处于“UP”和“RUNNING”状态。
答:
0赞
Durmus
8/19/2022
#1
一种方法是检查文件:
/sys/class/net/usb0/operstate
如果文件内容为“up”,则链接存在。如果内容“关闭”,则没有链接。
评论
0赞
ivand
8/20/2022
不幸的是,即使拔下电缆,它也会“向上”。看起来这是一个已知的内核问题,我也尝试过 udev 和 ifplugd 无济于事。可能必须定期执行 ping。
1赞
ivand
8/23/2022
#2
在我的特殊情况下,结果是硬件 + 软件问题:驱动程序 (atmel_usba_udc) 使用 USB 电源 (VBUS) 来检测连接,因为它充当从站并且电源由主机提供。然而,在PCB中,电路板本身同时为所有USB端口无条件地提供电源。
通常任何标准方法都应该有效:ifconfig 或 sysfs。
0赞
user2461794
11/15/2023
#3
在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"
评论