0

我有两个被 ACM 驱动程序识别的 USB 设备,我正在用 C 语言开发一个程序来与它们通信。由于每个命令都不同,我需要知道每个命令的名称(usb/acm/X)。

在给定 vendorId 和 productId 的情况下,如何获取此名称?我曾尝试解析 dmesg 文本,但在某些情况下,我可能会有两行“ttyACMX:USB ACM 设备”一个接一个。我可以解析每个设备在 dmesg 中显示其名称的顺序,并在“ttyACMX”中采用相同的数字,但这迫使我也解析断开连接消息,所有这些都变得有点脏。

我已经看到我需要的信息在为每个设备创建的结构 tty_driver 中,我确信我可以比解析 dmesg 更容易地获得这些信息。

有人可以指出我正确的方向吗?

4

3 回答 3

0

使用libudev 或一些更高级别的库,如gudev(基于GLib 的libudev)。除非您的设备是真正的移动宽带 (2G/3G/4G) 调制解调器,否则不要使用 ModemManager。

于 2014-11-18T17:48:29.257 回答
0

我发现这个帖子很有帮助: http: //forum.pololu.com/viewtopic.php?f=16 &t=6741

您可以在/etc/udev/rules.d其中创建一个具有如下规则的 udev 规则文件:

内核=="ttyACM0", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", ATTRS{idVendor}=="1ffb", ATTRS{idProduct}=="008c", ATTRS{serial}=="00053419" , MODE="0666", SYMLINK+="TTYS_002"

/dev/TTYS_002我认为当您插入具有指定供应商 ID、产品 ID 和序列号的 CDC ACM 设备时,这将使设备命名。

于 2014-12-01T17:08:47.303 回答
0

libudev(C)可能是一个解决方案,也看看ModemManager守护进程的来源(C,基于glib)

于 2013-09-02T07:44:51.240 回答