c++ - 使用 C++ 动态分配/dev/ttyUSB*

标签 c++ linux serial-port raspbian

我在 Raspbian 上运行一个自定义 C++ 程序,它会每隔一段时间重新启动它的 USB 端口。但是,我注意到/dev/USB* 枚举在电源循环之间不一致,需要能够处理这个问题。

是否有任何优雅的方法可以根据当前/dev/中的内容获取诸如“/dev/ttyUSB0”或“/dev/ttyUSB1”之类的字符串?假设只会连接一个设备是公平的,但假设除了通信所需的设备之外还有什么设备是不公平的。

到目前为止我尝试过的事情:

  1. dirent.h - 抓取所有“/dev/”并搜索“ttyUSB”似乎很笨重
  2. 强制 USB 设备名称为静态 - 我需要我的程序不依赖于串行端口上使用的设备

我并不完全反对使用系统调用,但希望尽可能避免使用“ls -l/dev/ttyUSB*”。

最佳答案

执行此操作的最佳方法是创建一个 udev 规则,该规则将在插入设备时创建一个符号链接(symbolic link)。您的 udev 规则将如下所示:

ATTRS{interface}="usb_converter", SYMLINK+="custom_link"

请注意,ATTRS 下还有更多选项可用于匹配特定 USB 设备。您可以获得诸如PID/VID、设备序列号、制造商等信息。如果您的USB转串口转换器是FTDI制造的,通常我所做的是使用FTPROG对设备重新编程并赋予其唯一性接口(interface)名称(在本例中为 usb_converter),然后匹配该名称以确保它始终相同。

参见 this answer了解更多信息,以及 this guide用于编写 udev 规则。

关于c++ - 使用 C++ 动态分配/dev/ttyUSB*,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53381741/

相关文章:

opencv - Raspberry Pi 到 Arduino 通信

c++ - 基本访问中的工厂方法在派生中 protected 构造函数

c++ - #include 头文件已经包含在包含的头文件中是常见的做法吗?

asp.net - Linux 上的 ActiveX 使用 Mono?

linux - 删除警告 : Binaries arch (1) not matching the package arch (2)

c++ - 如何在Linux上从picocom等串口读取数据?

c++ - WINAPI ReadProcessMemory 总是相同的地址

c++ - 在没有换行符的情况下读取引用的 CSV 数据作为结束行

linux - 更改来自 root 的电子邮件的发件人地址

python - 是否可以与/dev/bus/usb/<bus>/<device> 进行串行通信