提案されているように、いくつかの 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
の場合もあります 、 vide02
、 video4
と video6
しかし、今は忘れて構いません。
カメラ番号を識別するための永続的な 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 ポート) になります。