为具有多个 tty 端口的设备创建 UDEV 规则

为具有多个 tty 端口的设备创建 UDEV 规则

我有一个 USB 调制解调器,插入时会创建多个 ttyACM 连接。我已经制定了一条 udev 规则来创建指向 ttyACM 文件的符号链接,但我不知道如何判断它将链接到哪个 tty 文件。

这是我的规则:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1bc7", ATTRS{idProduct}=="0021", SYMLINK="cellmodem0", MODE="0666"

以下是 ls -l /dev 的当前输出

lrwxrwxrwx  1 root   root           7 Feb 11 12:35 cellmodem0 -> ttyACM3

我希望它指向 ttyACM0 而不是 ACM3,因为 ACM0 是调制解调器的主端口,如以下 mmcli 输出所示:

-------------------------
System   |         device: '/sys/devices/3530000.xhci/usb1/1-1/1-1.1'
         |        drivers: 'cdc_acm'
         |         plugin: 'Telit'
         |   primary port: 'ttyACM0'
         |          ports: 'ttyACM3 (at), ttyACM0 (at)'
-------------------------

TL;DR:如何处理使用多个 ttyACM 端口的设备上的 udev 规则?

答案1

终于搞明白了。使用udevadm info /dev/<relevent port>您可以看到设备的路径。对我来说,它是:/devices/3530000.xhci/usb1/1-1/1-1.1/1-1.1:1.0/tty/ttyACM0对于 ttyACM0,我实际上想要映射到的端口。对于创建的所有端口,此路径基本相同,但 ttyACMx 和 1-1.1:1.x 中的索引会有所不同。对于我的设备,主端口对于 1-1.1:1.x 始终使用 x = 0。

因此,我在 udev 规则中添加了一条语句:DEVPATH=="/devices/3530000.xhci/usb1/1-1/1-1.*/1-1.*:1.0/tty/ttyACM*"。只有主端口才能满足此标准,因为我列出了 1-1.*:1.0。

相关内容