udevルールから変数を呼び出す

udevルールから変数を呼び出す

ATTRS{name}=="abc123"が存在することを確認し、デバイスが存在する場合はさまざまな機能を呼び出すudevルールがあります。これらのudevルールは、カスタム組み込みオペレーティングシステム用のbitbakeで作成されたため、さまざまな場所にあります。別のハードウェアをテストするためにこのデバイスを変更したい場合は、毎回各ATTR {name}呼び出しを変更するのに時間がかかりすぎます。

私の解決策は、$ UDEVVAR = "[device_name]"(保留中)などのいくつかのconfファイルにvarを定義し、各ATTR {name}呼び出しをATTR {name} == "$ {UDEVVAR}"などに変更することですでした。

私はルールは呼び出されませんでしたが、概念証明で書かれたローカルルールでこのアプローチをテストしました。同じ概念に従っても、地域のルールは少し異なります。私が持っているフラッシュドライブが何であれ、ATTR {name}が定義されていないので、USBマウスとそのフラッシュドライブを使用しました。 udevルールは次のとおりです。

SUBSYSTEM=="${UDEVVAR}", ACTION=="add", RUN+="/usr/local/bin/trigger.sh"

Trigger.shはログファイルに日付タイムスタンプを書き込みます。 SUBSYSTEMが=="block"でハードコーディングされている場合、ルールは正常に呼び出されますが、UDEVVAR = "block"が定義されているとルールは呼び出されません。私の考えは、それがうまくいけばUDEVVAR = "hidraw"を定義してマウスをテストすることです。

このような仕事をしようとしている人に関する多くの文書が見つからないようです。私の考えでは、ある種の構文エラーが発生しているか、udevルールがそのようなことを許可していないようです。

助けてくれてありがとう!

ベストアンサー1

問題を解決する1つの方法は、テンプレートからファイルを生成することです。

開発環境とは異なるディレクトリツリーでファイルのコピーを作成しますが、変更したい値を置き換えます。

ATTRS{name}="%%NAME%%"

次に、「def456」が必要な場合は、次のようにファイルを実行します。

sed -e 's/%%NAME%%/def456/' 

これにはマクロm4プリプロセッサ(man m4;info m4)が便利です。

また見てくださいman -k template

おすすめ記事