26

同じ USB-RS232 チップに基づく 2 つの異なる 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」に対応していないようです。

「Bus 004 Device 001」は常に「USB ルート ハブ」であり、dmesg は 1 以降、lsusb は 2 以降と見なすことができますか?

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

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

4

3 に答える 3

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

あまり便利ではありませんが、「機能します

于 2012-02-07T21:20:31.543 に答える
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{シリアル}=="FTFMUW4A"、SYMLINK+="ttyFTDI4"
于 2012-12-06T10:29:26.010 に答える
1

このワンライナー udev ルールは、指定されたベンダー/製品 ID を持つデバイスのシリアル番号に基づいて固定名 (例: /dev/ttyUSB_A9YL5BJJ) を与えます。

これを /etc/udev/rules.d/60-ftdi-serial-names.rules などの udev ルール ファイルに入れます。

SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", ENV{ID_SERIAL_SHORT}=="?*", SYMLINK+="ttyUSB_%E{ID_SERIAL_SHORT}"
于 2015-07-21T02:26:46.837 に答える