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

问题描述 投票:0回答:1

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

是否有任何优雅的方法来获取字符串,如“/ dev / ttyUSB0”或“/ dev / ttyUSB1”基于当前在/ dev /中的内容?假设只有一台设备连接是公平的,但假设该设备不是通信所必需的,这是不公平的。

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

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

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

c++ linux serial-port raspbian
1个回答
0
投票

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

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

请注意,ATTRS下有更多选项可用于匹配特定的USB设备。您可以获得PID / VID,设备序列号,制造商等信息。如果您的USB转串口转换器是由FTDI制造的,我通常使用FTPROG重新编程设备并赋予它独特的信息。接口名称(在这种情况下,usb_converter),然后匹配,以确保它将始终相同。

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

© www.soinside.com 2019 - 2024. All rights reserved.