GNU/Linux >> Linux の 問題 >  >> Linux

静的な名前で USB デバイスをバインドする方法は?

提案されているように、いくつかの udev ルールを追加できます。 /etc/udev/rules.d/10-local.rules を編集しました 含める:

ACTION=="add", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SYMLINK+="my_uart"

を実行して、デバイスの変数を確認できます。
udevadm info -a -p  $(udevadm info -q path -n /dev/ttyUSB0)

http://www.reactivated.net/writing_udev_rules.html で読むことができるより詳細なガイドがあります


上記のルール構文は一部のディストリビューションでは機能する可能性がありますが、私のもの (Raspbian) では機能しませんでした。すべての内外を説明する 1 つの文書を見つけられなかったので、ここにあるように独自に作成しました。要するにこれです。
1. ttyUSB の内容を調べる:

dmesg | grep ttyUSB  

2. デバイスのすべての属性をリストします:

udevadm info --name=/dev/ttyUSBx --attribute-walk

(もちろん、x の代わりにデバイス番号を使用します)。一意の識別子セット (idVendor + idProduct など) を選択します。同じ idVendor と idProduct を持つデバイスが複数ある場合は、SerialNumber も必要になる場合があります。シリアル番号は、デバイスごとに一意である必要があります。
3. ファイル /etc/udev/rules.d/99-usb-serial.rules を作成します この行のようなもので:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(シリアル番号は必要ないと仮定します。もちろん、ステップ 2 で見つけた idVendor と idProduct の番号も必要です。
4. 新しいルールを読み込みます:

sudo udevadm trigger

5. 何が起こったかを確認します:

ls -l /dev/your_device_name  

シンボリックリンクが移動したttyUSB番号が表示されます。 /dev/ttyUSB1 の場合 、次に、誰がその所有者であり、どのグループに属しているかを確認します:

ls -l /dev/ttyUSB1   

それでは、お楽しみに:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

複数の同一 USB デバイスの問題

私は 4 台のカメラを搭載した Rasperry Pi を持っています。 fswebcam で pix を撮ります カメラを /dev/video0 として識別します .. video3 .カメラが video0 の場合もあります 、 vide02video4video6 しかし、今は忘れて構いません。

カメラ番号を識別するための永続的な ID が必要です。 video0 写真にキャプションを付けているので、常に同じカメラです。残念ながら、これは確実に起こるわけではありません - 起動時に、カメラは video0 として列挙されます ..video3 ただし、常に同じ方法であるとは限りません。

カメラはすべて同じ ID とシリアル番号を持っています。

この問題の解決策には udev ルールが関係しますが、そこにも多くの釣り針があります。

コマンドを発行すると

udevadm info –attribute-walk –path=/dev/video0

大量の出力が得られますが、顕著なビットは

KERNEL=”video0”, SUBSYSTEM=”video4linux” and KERNELS=”1:1.2.4:1.0”.

KERNELS ビットは USB ハブ ポートです。カメラが 4 台の場合、これらは 4 つあり、再起動しても変更されませんが、video{x} ポートに関連付けられている

したがって、ビデオ番号を USB ハブ ポートに関連付ける udev ルールが必要です。たとえば、次のようになります。

KERNEL==”video0”,SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0”,SYMLINK+=”camera0” 

シンプルに見えます – カメラへのアクセス

fswebcam –d  $realpath /dev/camera0

動作しない場合を除いて – これを udev ルールに入れ、システムが video0 (起動時) を別のポートに割り当てた場合、udev ルールは無視されます。 /dev/camera0 へのシンボリックリンク 基本的には no such device と言います .スクエアワン。

video{x} ではなく、USB ハブ アドレスにシンボリック リンクをバインドする必要があります。 番号。 Python プログラムが必要でした。

最初のステップは実行することでした

fswebcam –d /dev/video${x}  tst.jpg

x の場合 1から8の間。 tst.jpg の存在 各通話の後、このビデオ番号にカメラがあるかどうかを識別します。これから、アクティブなビデオ番号のリストを作成します。私の経験では、0,1,2,3 のいずれかです。 または 0,2,4,6 私が使用したカメラについて。

もちろん、別のプロセスを使用してこのリストを作成する人もいます。

次に、リスト内のビデオ番号ごとに実行します

udevadm info –attribute-walk –path=/dev/videox > dd

KERNELS= line を抽出します dd から .このプロセスから、カメラの USB ポート アドレスのリストが得られます。このリストを並べ替えて、次のステップで常に同じ順序で処理できるようにします。これを「アドレスリスト」と呼びます。

udevadm … > dd を実行します もう一度、次のようなリストを作成してください

KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camerax”. Call this the “video list”.

次に、アドレス リストを順に見ていきます。各エントリについて、ビデオ リストから対応するエントリを見つけます。

のような行のコレクションのような新しいリストを作成します。
KERNEL==”video0”, SUBSYSTEM=”video4linux”,KERNELS==”1:1.2.4:1.0 ”,SYMLINK+=”camera2”

x (シンボリックリンク番号) は、アドレスリストのシーケンス番号に置き換えられます。

これで、機能する udev ルールができました。起動時にポートに割り当てられたビデオ番号に関係なく、USB ハブ アドレスに結び付けられるシンボリック リンク。

最終的なリストをファイル /etc/udev/rules.d/cam.rules に書き込みます . udevadm trigger を実行 それをアクティブにすると、仕事は完了です。 /dev/camera2 ビデオ番号に関係なく、同じカメラ (USB ポート) になります。


Linux
  1. 4Linuxで接続されたUSBデバイス名を知るための便利な方法

  2. USBデバイスプラグインでカスタムスクリプトを実行する方法は?

  3. Linux –静的な名前でUsbデバイスをバインドする方法は?

  1. Linux –論理的に切断されたUSBデバイスを再接続する方法は?

  2. Linux で USB デバイスのチップセットを特定するにはどうすればよいですか?

  3. カスタム アプリの静的ポート番号を選択する方法は?

  1. ata デバイス番号を論理デバイス名にマッピングする

  2. デバイスを USB 3 ポートに接続したことを確認するにはどうすればよいですか?

  3. USB バージョン 1.1 または 2.0 を確認する方法