3 つの USB シリアル コンバーター (FTDI USB-RS232) に 3 つの異なるシリアル デバイスを接続しています。それらを接続すると、期待どおりに一般的なデバイス名 /dev/ttyUSBx が取得されます。いくつかの udev ルールを記述しようとすると、udevadm は、一部のデバイス シリアル ID 属性を除いて、3 つのデバイスに対して同じ出力を表示します。
これらのシリアル ID はすべてのデバイスで変更されるため、別の USB シリアル コンバーターを使用すると、ルールが機能しなくなります。そのため、シリアル コンバーターに接続されている特定のデバイスと通信し、その応答によってデバイスを識別する方法が必要です。
"Writing udev rules" HOWTOでは、PROGRAM 機能を使用して外部プログラムを呼び出してデバイスに名前を付ける方法について次のように述べています。
PROGRAM は、デバイス名を生成するプログラムを実行するために使用されます (それ以外のことはすべきではありません)。それらのプログラムが実行されているとき、デバイスノードはまだ作成されていないため、デバイスに対して何らかの操作を行うことはできません。
ルールの例:
SUBSYSTEM=="usb", PROGRAM="/bin/device_namer %k", SYMLINK+="%c"
そのため、デバイスを識別するためにそこから /dev/ttyUSBx に書き込むことはできません。次に、RUN機能がありますが、udevがRUNの出力を取得しないため、新しいSYMLINKを作成できないようです。
ルールの例:
SUBSYSTEM=="usb", RUN="/bin/program"
その RUN スクリプトから udev にシンボリック リンクを作成するように指示できますか? または、そこから手動でそのシンボリックリンクを作成できますか?
ありがとう