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

时间:2018-11-19 19:55:06

标签: 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 *”。

1 个答案:

答案 0 :(得分:0)

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

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

请注意,ATTRS下还有许多选项可用于与特定的USB设备进行匹配。您可以获得诸如PID / VID,设备序列号,manu7facturer等信息。如果您的USB到串行转换器是FTDI制造的,通常我要做的就是使用FTPROG对设备进行重新编程并为其赋予唯一性。接口名称(在这种情况下为usb_converter),然后对其进行匹配以确保始终使用相同的名称。

有关更多信息,请参见this answer,有关编写udev规则,请参见this guide