我在 Ubuntu 10.1 下从多个相同的 USB 串行适配器读取数据。
有时,它们的/dev/tty 路径会发生变化(例如,如果在启动时连接了其他 USB 设备)。
我需要一种通过任何此类更改重复引用同一适配器的方法。
根据 udevadm,所有设备都具有相同的序列号。
我认为最有可能的选择是识别适配器通过哪个端口连接(它们不会四处移动)。
我可以找到各种可能有用的有趣/dev 路径,但是尽管网上有很多关于 udev 的讨论,但如果设备插入静态设备,我无法找到关于这些路径中的一些是否是静态的明确声明端口。
最佳答案
有一个解决方案。迟到总比不到好 ;)
使用以下 udev
规则将 /dev/ttyUSB{?}
设备映射到 /dev/usb-ports/%bus_id-%port_id
链接。
这是我的/etc/udev/rules.d/usb-parse-devpath.rules:
ACTION=="add", KERNEL=="ttyUSB[0-9]*", PROGRAM="/etc/udev/rules.d/usb-parse-devpath.pm %p", SYMLINK+="usb-ports/%c"
和 usb-parse-devpath.pm
脚本:
#!/usr/bin/perl -w
@items = split("/", $ARGV[0]);
for ($i = 0; $i < @items; $i++) {
if ($items[$i] =~ m/^usb[0-9]+$/) {
print $items[$i + 1] . "\n";
last;
}
}
如您所见,这有助于我们创建指向 /dev/ttyUSB{?}
设备的命名链接,并将它们放在 /dev/usb-ports
中,如下所示格式:bus_id-port_id
。
例如,下一个命令会给出以下内容:
$ udevadm info --query=path --name=/dev/ttyUSB0
/devices/pci0000:00/0000:00:1d.1/usb3/3-1/3-1:1.0/ttyUSB0/tty/ttyUSB0
所以,bus_id
是 3
而 port_id
是 1
现在我的 >/dev/usb 端口
:
$ ls -al /dev/usb-ports
lrwxrwxrwx 1 root root 10 Май 12 00:26 3-1 -> ../ttyUSB0
问候。
关于linux - 如何在 Ubuntu 10.1 下识别多个 USB 串口适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4800099/