在 Linux 中,我在后台运行一个用 C 语言编写的程序,该程序定期与连接到 USB 端口之一的设备进行通信。尽管设备始终插入同一端口,但随着时间的推移,即使没有连接其他设备,它也会从 /dev/ttyACM0
切换到 /dev/ttyACM1
并返回。因此,每次发生切换时,我都必须重新启动程序。
为了解决这个问题,我尝试过setting up a UDEV rule for a new symlink无论所连接设备的路径如何变化,符号链接(symbolic link)都会起作用。然而,当发生切换时,程序仍然停顿,需要重新启动。
是否有一个系统规则可以让设备始终保持相同的路径,或者是否有另一种更通用的方法?
最佳答案
第一种方法(更简单):
如果您有权访问对方的设备代码,我会从中实现 ping 消息。
然后,我会在两个 tty 设备上监听该 ping 消息,以查看在哪个端口接收到该消息(/dev/ttyACM0 或 /dev/ttyACM1)。
第二种方法:
在单独的线程上实现 UDEV 监视器。
监视器检查您的设备使用哪个 TTY 端口。
如果端口发生变化,只需重新初始化通信线程...
请参阅udev_monitor_usb.c用于 udev 监视器 USB 代码。
关于当串行设备的路径改变时,C 程序停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59600960/