C++检测USB串行设备插入/拔出

Val*_*mir 6 linux embedded usb hotplugging

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

Dav*_*son 0

我编写了一个名为libusbp的 USB 抽象库。您应该查看其port_name 示例,它展示了如何使用 libusbp 获取/dev/ttyACM0USB 串行设备的串行端口名称(例如 )。在幕后,libusbp 使用 libudev 获取此信息。