簡體   English   中英

如何找出哪個USB-RS232設備在哪個tty上?

[英]How to find out which USB-RS232 device is on which tty?

我有兩個基於相同USB-RS232芯片的不同USB設備。 當我將它們插入USB時,它們被安裝到/dev/ttyUSB0...3

我的問題是,在腳本中,我可以找出哪個是什么tty?

使用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。

使用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'將列出(通過總線/端口)安裝位置。

不太方便,但它“ 有效

您可以使用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"

這個單行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}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM