FTDIドライバーによって/dev/ttyUSB0
、/dev/ttyUSB1
、/dev/ttyUSB2
などとして列挙された2つ以上のシリアルデバイスがあります。再起動時に、これらは他の順序で混乱する可能性があります。また、これらのデバイスをこれらの間で、または他の同様のデバイスと物理的に交換/交換する場合があります。
ここで、これらの永続的な列挙が必要です。デバイスが接続されている物理USBポート(PCのマザーボードのUSBポートに直接接続するか、USBハブを使用する場合があります)に従ってデバイス名を列挙したい-たとえば、デバイスがに接続されている場合USBハブ、ポート1はttyUSB0
、ポート2はttyUSB1
などの名前で予約する必要があります。
基本的な読み方をした後、(前述のように ここ )/dev/serial/by-path/
がデバイスを一種のシンボリックリンクとしてリストしていることがわかりました。そこで、次のようなファイル/etc/udev/rules.d/101-usb-serial.rules
を作成しました。
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", PATH=="pci-0000:00:14.0-usb-0:10.1:1.0", SYMLINK+="ttyUSB000"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", PATH=="pci-0000:00:14.0-usb-0:10.2:1.0", SYMLINK+="ttyUSB001"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", DRIVERS=="ftdi_sio", PATH=="pci-0000:00:14.0-usb-0:10.3:1.0", SYMLINK+="ttyUSB002"
しかし、これは機能しません。 ls /dev/ttyUSB*
を実行すると、作成した新しいシンボリックリンクが表示されません。何がうまくいかない可能性がありますか?
上記のコメントから手がかりを得て、私はなんとか上記の解決策を見つけることができました。
udevadm info /dev/ttyUSB0 | grep "ID_PATH="
上記は、/dev/ttyUSB0
が接続されているポートのsysfsパスを示しています。この値を使用して、ルールファイルに必要な数のデバイス(ttyUSB1
、ttyUSB2
....)のルールを作成します。たとえば、次のように/etc/udev/rules.d/101-usb-serial.rules
と言います。
SUBSYSTEM=="tty",ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:10.1:1.0",SYMLINK+="ttyUSB001"
SUBSYSTEM=="tty",ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:10.2:1.0",SYMLINK+="ttyUSB002"
SUBSYSTEM=="tty",ENV{ID_PATH}=="pci-0000:00:14.0-usb-0:10.3:1.0",SYMLINK+="ttyUSB003"
変更またはファイルの作成が完了したら、以下を実行します。
Sudo udevadm control --reload-rules
Sudo /etc/init.d/udev restart
P.S。:上記のシナリオ例(私が使用しているシナリオ)は、4ポートのBelkinUSBハブを使用しています。 Device 1
はハブのport 1
に接続され、Device 2
はport 2
に接続されます。