USB 串行“按路径”的 udev 规则不起作用

USB 串行“按路径”的 udev 规则不起作用

我有 2 个以上的串行设备被 FTDI 驱动程序枚举为、/dev/ttyUSB0等。重新启动时,这些设备可能会以任何其他顺序混乱。另外,我可能会在这些设备之间或与其他类似设备进行物理替换/交换。/dev/ttyUSB1/dev/ttyUSB2

现在,我想要对这些进行持久枚举。我希望根据设备连接到的物理 USB 端口(我可以直接连接到 PC 主板上的 USB 端口或使用 USB 集线器)来枚举设备名称 - 比如说设备是否连接到USB 集线器,端口 1 应保留为ttyUSB0,端口 2 为 ,ttyUSB1依此类推。

经过一些基本的阅读后,我想(如前所述这里/dev/serial/by-path/以符号链接的形式列出设备。因此,我创建了一个/etc/udev/rules.d/101-usb-serial.rules包含以下内容的文件:

KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", PATH=="pci-0000:00:14.0-usb-0:10.1:1.0", SYMLINK+="ttyUSB000"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", PATH=="pci-0000:00:14.0-usb-0:10.2:1.0", SYMLINK+="ttyUSB001"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", PATH=="pci-0000:00:14.0-usb-0:10.3:1.0", SYMLINK+="ttyUSB002"

但这行不通。执行此操作时,ls /dev/ttyUSB*我无法看到我创建的新符号链接。可能出了什么问题?

答案1

从上面的评论中得到线索,我设法找到了上述问题的解决方案。

udevadm info /dev/ttyUSB0 | grep "ID_PATH="

/dev/ttyUSB0上面列出了所连接端口的 sysfs 路径。使用此值在规则文件中为任意数量的设备( ttyUSB1, ....)创建规则,如下所示:ttyUSB2/etc/udev/rules.d/101-usb-serial.rules

SUBSYSTEM=="tty",ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:10.1:1.0",SYMLINK+="ttyUSB001"
SUBSYSTEM=="tty",ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:10.2:1.0",SYMLINK+="ttyUSB002"
SUBSYSTEM=="tty",ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:10.3:1.0",SYMLINK+="ttyUSB003"

完成更改或创建文件后,运行以下命令:

sudo udevadm control --reload-rules
sudo /etc/init.d/udev restart

聚苯乙烯:上面的示例场景(我正在使用的场景)使用的是 4 端口贝尔金 USB 集线器。Device 1连接到port 1集线器Device 2连接到port 2等等。

相关内容