我有一个 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 规则?
终于想通了。使用
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 中的索引不同外,所有创建的端口的路径基本相同。对于我的设备,主端口将始终使用 x = 0 表示 1-1.1:1.x。因此,我在 udev 规则中添加了一条语句:
DEVPATH=="/devices/3530000.xhci/usb1/1-1/1-1.*/1-1.*:1.0/tty/ttyACM*"
. 因为我列出了 1-1.*:1.0,所以只有主端口会满足这个标准。