誰がデバイスノードを作成したのかを知る方法はありますか?それでは、udev
カーネル自体ですか?
私の場合、2つのウェブカメラがあります。このために作成されたノード
/dev/video0
はとです/dev/video1
。残念ながら、これは継続的な割り当てではありません。これを使用すると、このような場合になると思いましたが、ルールを作成するときにより一定のudev
ノード(たとえば)を割り当てることができる前に、ノードがすでに作成されているようudev
です。video0
video1
udev
/dev/videoLogitech
ここで何が起こっているのかを理解するのに役立つログファイルまたはコマンドに関するアドバイスが必要です。
答え1
ジョブの順序を確認するには、次のようにします。
udevadm monitor --property
これにより、ジョブのリストが表示されます。カメラを追加するときの最初の項目は次のとおりです。
KERNEL[110935.814197] add /devices/.../video4linux/video1 (video4linux)
ACTION=add
DEVNAME=/dev/video1 <<<<---- devname
〜のように@goldilocksが指摘しました。:
残念ながら、systemdを使用している場合、udevバージョンには複雑な「持続的な命名スキーム」があります。udevdにハードコード、あなたは正しいです。この
rules.d
内容を分析するだけで、多くの謎が残ることがあります。
次のキーに割り当てられた値を取得できます。
NAME ネットワークインターフェイスに使用される名前です。インタフェース名の設定の上位レベルのメカニズムについては、systemd.link(5)を参照してください。udevはデバイスノードの名前を変更できず、追加のシンボリックリンクのみを生成できます。
命名とデバッグ
最善の方法は、おそらく次のようなものを使用することです。
udevadm test $(udevadm info -q path -n video1)
ルールを「テスト実行」してエラーを報告できます。
ルールを追加/変更したら、再ロードする必要があります。
udevadm control --reload-rules
その瞬間まで名前次のような結果が得られます。
NAME="smile2thecamera" ignored, kernel device nodes can not be renamed;
please fix it in /etc/udev/rules.d/83-webcam.rules:6
次のようにシンボリックリンク(十分な場合)を使用できます。
KERNEL=="video[0-9]", .... SYMLINK+="video-logitech"
テストでは、次の内容を提供する必要があります。
creating link '/dev/video-logitech' to '/dev/video1'
creating symlink '/dev/video-logitech' to 'video1'
DEVLINKS=.... /dev/video-logitech