USBシリアル「パス別」udevルールが機能しません。

USBシリアル「パス別」udevルールが機能しません。

/dev/ttyUSB0FTDIドライバなどによって列挙されるシリアルデバイスが2つ以上あります。再起動すると、これらのデバイスは異なる順序でスクランブルされる可能性があります。また、これらのデバイス間または他の同様のデバイスを物理的に交換/交換することもできます。/dev/ttyUSB1/dev/ttyUSB2

今、私はこれらを常に列挙したいと思います。デバイスが接続されている物理USBポートに基づいてデバイス名を列挙したい(PCマザーボードのUSBポートに直接接続するか、USBハブを使用できます)。デバイスがUSBハブ、ポート1に接続されているとします。ttyUSB0、ポート2ttyUSB1などのままにしてください。

いくつかの基本的な内容を読んだ後、私は考えました(前述のようにここ)/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*私が作成した新しいシンボリックリンクを見ることができなくなります。何が間違っている可能性がありますか?

答え1

上記のコメントを参考に、上記の問題に対する解決策を見つけました。

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

ポリスチレン:上記の例のシナリオ(私が作業しているシナリオ)では、4ポートBelkin USBハブを使用しています。ハブDevice 1に接続などを接続します。port 1Device 2port 2

関連情報