web-dev-qa-db-ja.com

どのUSB-RS232デバイスがどのttyにあるかを調べる方法は?

同じUSB-RS232チップに基づいた2つの異なるUSBデバイスがあります。 USBに接続すると、/ dev/ttyUSB0 ... 3にマウントされます

私の問題は、スクリプト内でどのttyがどの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」に対応していないようです。

「Bus 004 Device 001」は常に「USBルートハブ」であり、したがってdmesgは1以降からカウントされ、lsusbは2以降からカウントされると想定できますか?

または、デバイスIDをマウントポイント(スクリプト内)に関連付ける方法について別の提案がありますか?

Ubuntu 10.04 LTSを使用しています。

25
gabriel_agm

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'がマウントされた場所を(バス/ポートごとに)リストします。

あまり便利ではありませんが、 'works'

23
sehe

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" 
13
starblue

この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}"