カーネルまたはudevがデバイスノードを作成したかどうかを確認する方法は?

カーネルまたはudevがデバイスノードを作成したかどうかを確認する方法は?

誰がデバイスノードを作成したのかを知る方法はありますか?それでは、udevカーネル自体ですか?

私の場合、2つのウェブカメラがあります。このために作成されたノード /dev/video0はとです/dev/video1。残念ながら、これは継続的な割り当てではありません。これを使用すると、このような場合になると思いましたが、ルールを作成するときにより一定のudevノード(たとえば)を割り当てることができる前に、ノードがすでに作成されているようudevです。video0video1udev/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内容を分析するだけで、多くの謎が残ることがあります。

また、man udevsystemdから:

次のキーに割り当てられた値を取得できます。

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

おすすめ記事