udevでシンボリックリンクを作成したときの番号の再割り当て

udevでシンボリックリンクを作成したときの番号の再割り当て

私はvoyage linux(Debian Squeezeベース)を実行しているALIX 3d2ボードにUSBセルラーモデムを接続しました。モデムは自分自身をTTYデバイスとして登録するため、udevはデフォルトで.txtファイルに「ttyUSB0」から「ttyUSB3」までの名前の付いたTTYデバイスを作成します/dev。ただし、他のUSBシリアルデバイスが接続されている可能性があり、モデムへの既知の参照が必要です。そのため、モデムで接続を確立するための単純なudevルールを作成しました。/dev/ttyModem{0-3}しかし、自動的に番号付けを処理する方法を見つけることができる唯一の方法は、4ポートUSBシリアル接続を%n作成するために存在するudevの変数を使用することでした。/dev/ttyModem{4-7}モデムより前のアダプタが列挙されます。%e私のニーズに合った古いudevドキュメントで変数への参照を見つけましたが、しばらく前に削除されたようです。

幸いなことに、各ttyデバイスにはデバイスが参照できるポート番号があるため、手動で番号付けを処理できる必要があります。ポート番号に基づいてリンクを作成できますが、ポート番号とUSBベンダーID +製品IDの両方を使用しようとするたびに、ルールは適用されなくなります。これらの属性は異なるデバイスで識別されるため、どこかで「シングル親デバイス」ルールに違反しているようです。udevadm infoしかし、私が知っている限り、すべての属性は1つのデバイスとその親デバイスから出る必要があります。

私が適用したルールは次のとおりです。

このルールは効果があり、私が使い始めたルールですが、生成される数字はゼロから始まらないかもしれません。

SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", SYMLINK+="ttyUSBID%n"

そのため、ポート番号を指定するために、この4つの規則を試しましたが、失敗しました。 「一つの親デバイス」ルールに違反したからだと思います。

SUBSYSTEMS=="usb", KERNEL=="ttyUSB*", ATTRS{port_number}=="0", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", SYMLINK+="ttyFailingPort0"

このルールの各条件は同じノードから来る必要があるため、このルール(予想どおりに動作)は親ノードを参照できる必要があります。

SUBSYSTEMS=="usb-serial", KERNELS=="ttyUSB*", ATTRS{port_number}=="0", SYMLINK+="ttyPortNumberChild0"

しかし、この規則は失敗し、その理由を知りません。

SUBSYSTEMS=="usb-serial", KERNELS=="ttyUSB*", ATTRS{idVendor}=="1199" ATTRS{port_number}=="0", SYMLINK+="ttyFailingPortNumber0

udevadm info --attribute-walkこれはの出力です。ポート0ポート1ポート2ポート3。上部の2番目のデバイスにはポート番号が含まれ、4番目のデバイスにはUSB識別情報が含まれています。

これはちょっとわかります。XYの問題したがって、モデムの定数名を指定するより良い方法がわかっている場合は、いつでも回答として投稿してください。

ベストアンサー1

モデムルールは、ACTION=="add", SUBSYSTEM=="tty"idVendor、idProduct、およびport_number属性と組み合わせる必要があります。

ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", ATTRS{port_number}=="0", SYMLINK+="ttyPort0"
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", ATTRS{port_number}=="1", SYMLINK+="ttyPort1"
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", ATTRS{port_number}=="2", SYMLINK+="ttyPort2"
ACTION=="add", SUBSYSTEM=="tty", ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", ATTRS{port_number}=="3", SYMLINK+="ttyPort3"

/dev/serial/by-idまた、(モデムに固有のシリアル番号がある場合は役に立ちます)または/dev/serial/by-path(モデムを常に同じUSBポートに接続している場合は機能します)の既存のシンボリックリンクがあなたの目的に適していることを確認してください。

おすすめ記事