udevはID_PATHを使用して永続的な名前付きシンボリックリンクを生成できません。

udevはID_PATHを使用して永続的な名前付きシンボリックリンクを生成できません。

接続されているポートに応じて(USB)デバイスの名前を継続的に指定したいと思います。

udevadminを使用して次の情報を見つけました。

# udevadm info --name=input/event3 | grep ID_PATH
E: ID_PATH=platform-ci_hdrc.1-usb-0:1.1.4:1.0
E: ID_PATH_TAG=platform-ci_hdrc_1-usb-0_1_1_4_1_0

したがって、デバイスには、私が望むものと似たID_PATH属性とID_PATH_TAG属性があるようです。

udev.ruleと一致するように追加しました

SYMLINK+="foo-%E{ID_PATH_TAG} foo1-$env{ID_PATH} foo2-$env{ID_PATH_TAG}"

(この3つのバリエーションは必死に努力しているだけです…動作すれば1つだけで十分です。)

ルールが実行され、ログにエラーがありません(ログレベル=デバッグ)。

ただし、生成されたシンボリックリンクは

/dev/foo-
/dev/foo1-
/dev/foo2-

したがって、私のルールが実行されたときにID_PATH属性とID_PATH_TAG属性が設定されていないようです。注文時に知っておくべきことはありますか?

答え1

デバイスの属性のリストを取得するには、まずこのコマンドを実行します。

udevadm info -a -p $(udevadm info -q path -n <devpath>)

そうすれば、

... SYMLINK+=”device_$attr{serial}”, ...

以下のように、必要なデータで環境変数を設定する必要がある場合もあります。

... ENV{SERIAL_NUMBER}="$attr{serial_number}"

後でこれを試してください。

... SYMLINK+="device_$env{SERIAL_NUMBER}"

答え2

ID_PATHを使用して確認した既存のルールはすべて60 - *以上です。私の評価は45 - *で、歴史的な理由を除いて特別なものはありません。

私のルールファイルの名前を変更すると、ルール番号が違いを生むという事実が明らかになりました。

  1. 59-foo.rules:ID_PATH / ID_PATH_TAGは空の文字列に展開されます。
  2. 60-foo.rules:ID_PATH / ID_PATH_TAGは空の文字列に展開されます。
  3. 61-foo.rules:ID_PATH / ID_PATH_TAGが正しく拡張されました。

説明は次のとおり60-persistent-input.rulesです。

SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id"

組み込み関数のドキュメントが見つかりませんが、組み込み path_id は ID_PATH/ID_PATH_TAG を環境に入れているようです。

関連情報