gpt4 book ai didi

linux - C++检测USB串口设备插入/拔出

转载 作者:IT王子 更新时间:2023-10-29 00:43:42 32 4
gpt4 key购买 nike

我需要检测嵌入式系统上的 USB 串行设备何时插入或拔出,​​并知道 tty 是什么与之相关。

我的系统运行在 2.6 Linux 内核上。

因为我没有 udev 的写入权限规则,现在我试图从文件系统中获取此信息,在 /sys/bus/usb/devices 中查找修改目录。但是,我在使用这种方法时遇到了一些问题。

我知道 Id BUS 是什么连接的 USB 端口(例如 1-1.3)。所以,我搜索相关的 tty (在 /sys/bus/usb/devices/<Id BUS>:1.0/tty/ 中寻找目录 - 例如 /sys/bus/usb/devices/1-1.3:1.0/tty/ttyACM0 )。这样我就知道我应该使用 /dev/ttyACM0与我的设备通信。但是,有时,此设备 ( /dev/ttyACM0) 不存在。

有没有更好的方法来获取这些信息?

我什至想尝试从系统日志中获取此信息,但我不知道这是否是个好主意。

编辑:

只是澄清一下,我的系统需要能够检测 USB 总线中的状态变化,即检测何时插入新设备(并获取与其关联的 tty 名称)或拔下现有设备。

系统正在监控 N USB/串行设备,使用 USB HUB 插入。在其正常执行期间,可以插入新设备,可以删除现有设备(或通过远程命令重新启动 - 超出此范围)。当设备重新启动时,它可能会收到不同的 tty来自之前使用的前一个(例如 ttyACM0 -> ttyACM3 ),因为内核指定给它一个 tty目前是免费的,这对我来说是个大问题。

最佳答案

Netlink是内核和用户空间之间通信的首选机制。

您将创建一个带有 NETLINK_KOBJECT_UEVENT 系列的 Netlink 套接字,监听该套接字并过滤掉包含 SUBSYSTEM=usbACTION=add 的消息> 用于 USB 插入事件或 ACTION=remove 用于 USB 拔出事件。

关于linux - C++检测USB串口设备插入/拔出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44010480/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com