我有超过 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*
时,我无法看到我创建的新符号链接。可能出了什么问题?
从上面的评论中得到提示,我设法找到了上述问题的解决方案。
上面列出了所
/dev/ttyUSB0
连接端口的 sysfs 路径。使用此值在规则文件中为任意数量的设备 (ttyUSB1
,ttyUSB2
....)创建规则,/etc/udev/rules.d/101-usb-serial.rules
如下所示:完成更改或创建文件后,运行以下命令:
PS:上面的示例场景(我正在使用的场景)是使用 4 端口 Belkin USB 集线器。
Device 1
连接到port 1
集线器Device 2
连接到port 2
等等。