从 udev 规则中调用变量

从 udev 规则中调用变量

我有多个 udev 规则,用于检查 ATTRS{name}=="abc123" 是否存在,并在该设备存在时调用各种函数。这些 udev 规则位于多个位置,因为这是在 bitbake 中为自定义嵌入式操作系统创建的。现在,如果我想更改此设备来测试不同的硬件,则每次更改每个 ATTR{name} 调用都太耗时。

我的解决方案是在某个conf文件中定义一个var,例如$UDEVVAR =“[device_name]”(待定),然后将每个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

解决问题的一种方法是从模板生成文件。

在与开发环境不同的目录树中,创建文件的副本,但将要更改的值替换为,例如

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

然后,当您需要 "def456" 时,通过运行该文件

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

m4预处理器(man m4;info m4)对此很方便。

另见man -k template

相关内容