接続されているポートに応じて(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 - *で、歴史的な理由を除いて特別なものはありません。
私のルールファイルの名前を変更すると、ルール番号が違いを生むという事実が明らかになりました。
59-foo.rules
:ID_PATH / ID_PATH_TAGは空の文字列に展開されます。60-foo.rules
:ID_PATH / ID_PATH_TAGは空の文字列に展開されます。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 を環境に入れているようです。