我有一个 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。