接続時にシリアルデバイスのカスタム名を指定するには?

接続時にシリアルデバイスのカスタム名を指定するには?

研究中です。活性酸素種下にUbuntu14.04オールドロイXU3(ARM開発ボード).

2つのUSBデバイスをボードに接続しましたが、次のように認識されました。ttyACM0そしてttyACM1接続した時間を目安にします。

これらのデバイス(ArduinoとPixHawk)には異なるPID / VIDがあるので、これを「カスタム名」ttyにバインドしたいと思います。ttycontroller0&ttyポジション0例えば。

これによるとトピック、PID、VIDに基づいてリンクデバイスをシミュレートできます。ttyUSB0

決定的な名前への接続をどのようにシミュレートする必要がありますか?/etc/udev/rules.d/99-custom.rulesSimlinkの4つのルールが機能できますか?

ACTION=="add", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyController"


ACTION=="remove", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="0001", RUN+="/bin/rm /dev/ttyController"


ACTION=="add", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/ln -s /dev/ttyACM0 /dev/ttyPosition"


ACTION=="remove", ATTRS{idVendor}=="3210", ATTRS{idProduct}=="0002", RUN+="/bin/rm /dev/ttyPosition"

それとも、カスタムPIDとVIDでUdevを使用できますか?

ベストアンサー1

あなたの設定は基本的に動作しますが、いくつかの提案をしたいと思います。

まずATTRATTRS一致 ATTRSする(親)デバイスを見つけるためにデバイスツリー全体を検索します。これはあなたが望むものではない可能性が高いです。ATTR実際にイベントをトリガーするデバイスには、指定された属性が必要です。

第二に、デバイスノードへのシンボリックリンクを作成することは非常に一般的な作業であるため、これを行うための専用ステートメントがあります。つまり、SYMLINK+="newname"「外部」コマンドに依存しないようにします。さらに、このディレクティブを使用すると、「add」イベントだけを一致させることができます。udevdデバイスが消えると、関連するシンボリックリンクが自動的に削除されるためです。

したがって、あなたの規則は次のようになります。

ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

最後に、追加のSUBSYSTEM制約(たとえば、Add)を追加して一致を絞り込むことをお勧めしますSUBSYSTEM=="usb"。デバイスとベンダーIDはその範囲内でのみ(希望的に)一意であるため、サブシステムの一致を無視すると他のデバイスクラス(PCIデバイスなど)。このシナリオは低い可能性がありますが、通常、udevルールでは良いスタイルと見なされます。

SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0123", ATTR{idProduct}=="0001", SYMLINK+="ttyController"
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="3210", ATTR{idProduct}=="0002", SYMLINK+="ttyPosition"

おすすめ記事