Voyage linux(Debian Squeezeに基づく)を実行しているALIX3d2ボードにUSBセルラーモデムを接続しています。モデムはそれ自体をTTYデバイスとして登録するため、デフォルトでは、udevは/dev
に「ttyUSB0」から「ttyUSB3」という名前のTTYデバイスを作成します。ただし、他のUSB-シリアルデバイスが接続されている可能性があるため、モデムへの既知の参照が必要です。そこで、モデムから/dev/ttyModem{0-3}
へのリンクを作成する簡単なudevルールを作成しましたが、番号付けを自動的に処理する唯一の方法は、udevの%n
変数を使用することでした。これには問題があります。モデムの前に4ポートのUSB-シリアルアダプタが列挙されている場合は、/dev/ttyModem{4-7}
を作成します。古いudevドキュメントで%e
変数への参照がいくつか見つかりましたが、これは必要なことを実行しますが、しばらく前に削除されたようです。
幸い、ttyデバイスごとにデバイスから参照できるポート番号があるので、手動で番号付けを処理できるはずです。ポート番号に基づいてリンクを作成できますが、ポート番号とUSBベンダーID + productIDの両方を使用しようとすると、ルールが適用されなくなります。これらの属性はudevadm info
に従って異なるデバイスで認識されるため、どこかで「単一の親デバイス」ルールに違反している可能性がありますが、私が知る限り、すべての属性は1つのデバイスからのものである必要があります。その親。
適用したルールは次のとおりです。
このルールは機能し、私が始めたものですが、生成される数は0から始まらない場合があります。
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
for port 、 port1 、 port2 、 port の出力です。上から2番目のデバイスにはポート番号が含まれ、4番目のデバイスには識別用USB情報が含まれています。
これは少し XY問題 だと思います。モデムに定数名を付けるより良い方法を知っている場合は、それを回答として投稿してください。
構成を複数のルールに分割することで、「1つの親のみ」の制限を回避することになりました。興味のある人のために、これが私が最終的に得たコードです:
ACTION!="add", GOTO="modem_rules_end"
SUBSYSTEM!="tty" GOTO="modem_rules_end"
#ModemType1
ATTRS{idVendor}=="1199", ATTRS{idProduct}=="0028", GOTO="type1_rules_begin"
GOTO="type1_rules_end"
LABEL="type1_rules_begin"
ATTRS{port_number}=="0", SYMLINK:="ttyType1_0"
ATTRS{port_number}=="1", SYMLINK:="ttyType1_1"
ATTRS{port_number}=="2", SYMLINK:="ttyType1_2"
ATTRS{port_number}=="3", SYMLINK:="ttyType1_3"
LABEL="type1_rules_end"
LABEL="modem_rules_end"
モデムルールは、idVendor、idProduct、およびport_number属性と組み合わせたACTION=="add", SUBSYSTEM=="tty"
と一致する必要があります。
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ポートにモデムを接続している場合に機能します)の既存のシンボリックリンクのいずれかがあなたの目的。
/ dev/ttyUSB *番号を争う他のUSBttyデバイスと一緒に、システム内で一貫した番号付けでUSBセルラーモデムをオンラインにする同様の問題がありました。私の場合、Telitチップセットを搭載したEuroTech ReliaCELL10-20-32でした。ここからいくつかのアイデアを使用して問題を解決し、.rulesに次の抜粋を追加しました。
SUBSYSTEMS=="usb", DRIVERS=="option", ATTRS{bInterfaceNumber}=="00", SYMLINK+="ttyUSB_modem_port_0"
SUBSYSTEMS=="usb", DRIVERS=="option", ATTRS{bInterfaceNumber}=="01", SYMLINK+="ttyUSB_modem_port_1"
SUBSYSTEMS=="usb", DRIVERS=="option", ATTRS{bInterfaceNumber}=="02", SYMLINK+="ttyUSB_modem_port_2"
SUBSYSTEMS=="usb", DRIVERS=="option", ATTRS{bInterfaceNumber}=="03", SYMLINK+="ttyUSB_modem_port_3"
UNIXマシンにアクセスするために、複数の同一のUSBシリアルアダプターを使用してセットアップを行いました。
最後の行のKERNELS属性は、私の「ProlificTechnologyInc。」からのものだと思います。一方が他方に接続されている2つのハブの既存のハブ。
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.5:1.0", SYMLINK+="ttyUSB_Sol1"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.6:1.0", SYMLINK+="ttyUSB_Sol2"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.7:1.0", SYMLINK+="ttyUSB_Sol3"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.4:1.0", SYMLINK+="ttyUSB_Sol4"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.3:1.0", SYMLINK+="ttyUSB_HPUX1"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.2:1.0", SYMLINK+="ttyUSB_HPUX2"
KERNEL=="ttyUSB[0-9]*", SUBSYSTEM=="tty", KERNELS=="1-1.2.1.4:1.0", SYMLINK+="ttyUSB_HPUX3"