如何找出哪个USB-RS232设备在哪个tty上?

时间:2012-02-07 21:04:37

标签: linux serial-port usbserial

我有两个基于相同USB-RS232芯片的不同USB设备。 当我将它们插入USB时,它们被安装到/ dev / ttyUSB0 ... 3

我的问题是如何在脚本中找出哪一个是什么?

使用lsusb我可以区分它们:

$> lsusb | grep 0403:f850
Bus 004 Device 002: ID 0403:f850 Future Technology Devices International, Ltd
$> lsusb | grep 0403:6001
Bus 004 Device 003: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC

使用dmesg,我可以知道它们的安装位置:

$> dmesg | grep 'FTDI USB Serial Device converter now attached'
[36051.393350] usb 4-2: FTDI USB Serial Device converter now attached to ttyUSB1
[36061.823513] usb 4-1: FTDI USB Serial Device converter now attached to ttyUSB0

但“usb 4-1”似乎与“Bus 004 Device 002”不对应。

我可以假设“总线004设备001”将始终是“USB根集线器”,因此dmesg将从1开始计算,lsusb从2开始计算?

或者您对如何将设备ID与挂载点(脚本内部)相关联有其他建议吗?

我正在使用Ubuntu 10.04 LTS。

3 个答案:

答案 0 :(得分:23)

使用sysfs查找更多信息:

$ ls /sys/bus/usb-serial/devices/ -ltrah

lrwxrwxrwx 1 root root 0 2012-02-07 22:17 ttyUSB0 -> ../../../devices/pci0000:00/0000:00:0f.4/usb2/2-2/2-2:1.0/ttyUSB0

$ ls -ltrad /sys//devices/pci0000:00/0000:00:0f.4/usb2/2-2/2-2:1.0/ttyUSB0
drwxr-xr-x 4 root root 0 2012-02-07 22:17 /sys//devices/pci0000:00/0000:00:0f.4/usb2/2-2/2-2:1.0/ttyUSB0

$ ls -ltrad /dev/ttyUSB0 
crw-rw---- 1 root dialout 188, 0 2012-02-01 00:17 /dev/ttyUSB0

当然,链接的设备/ ...节点包含很多信息

根据OP的评论添加信息:

如果移除/插入设备,设备编号会不断增加。 lsusb -t可用于将设备号与USB总线/端口相关联。

然后,'lsusb -d devID'可以确定哪个设备在哪个端口上。 最后,'ls / sys / bus / usb-serial / devices / -ltrah'将列出(通过总线/端口)安装位置。

不太方便,但有效'

答案 1 :(得分:13)

您可以使用udev为每个FTDI加密狗分配稳定的符号链接。 使用设备和供应商匹配类型,然后匹配特定设备的序列号。然后使用脚本中的符号链接。

我将我的加密狗命名为ttyFTDI0等,并使用标记在加密狗上写下数字:

$ cat /etc/udev/ftdi.rules 
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTDEN97D", SYMLINK+="ttyFTDI0"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A600b30P", SYMLINK+="ttyFTDI1"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="A600bexU", SYMLINK+="ttyFTDI2"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTFMSA54", SYMLINK+="ttyFTDI3"
SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ATTRS{serial}=="FTFMUW4A", SYMLINK+="ttyFTDI4"

答案 2 :(得分:1)

此单行udev规则将根据给​​定供应商/产品ID的任何设备的序列号给出固定名称(例如/ dev / ttyUSB_A9YL5BJJ)。

将其放入udev规则文件中,例如/etc/udev/rules.d/60-ftdi-serial-names.rules

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ENV{ID_SERIAL_SHORT}=="?*", SYMLINK+="ttyUSB_%E{ID_SERIAL_SHORT}"