udev的rule,在规则匹配(一般是vid、pid)上之后,可以执行自定义的动作(一般是脚本)
例如:
ATTR{idVendor}=="0001", ATTR{idProduct}=="0000", MODE="664", GROUP="nut" RUN="/zspace/shell/ups.sh $attr{idVendor} $attr{idProduct} \"$attr{product}\" \"$attr{manufacturer}\" $attr{serial}"
脚本传递的参数可以能是:
$kernel, %k: 设备的内核设备名称,例如:sda、cdrom.
$number, %n: 设备的内核号码,例如:sda3 的内核号码是 3.
$devpath, %p: 设备的 devpath路径.
$id, %b: 设备在 devpath里的 ID 号.
$sysfs{file}, %s{file}: 设备的 sysfs里 file 的内容.其实就是设备的属性值.
$env{key}, %E{key}: 一个环境变量的值.
$major, %M: 设备的 major 号.
$minor, %m: 设备的 minor 号.
$result, %c: PROGRAM 返回的结果
$parent, %P: 父设备的设备文件名.
$root, %r: udev_root的值,默认是 /dev/.
$tempnode, %N: 临时设备名.
%%: 符号 % 本身.
$$: 符号 $ 本身.
上面这些都是网上流传的,应该来着systemd或者udevd的文档。
代码里有这些:
绝大部分是系统相关,或者说可读性不高。
可读性高或者说当设备插入时,我们关心应该是判断是不是我们设备。最开始的RUN的例子,只使用了$attr{name}.
关于的usb的attr属性,在源码里可以找到这些:
准确说这些attr才是给人读的信息。
只能说man或者wiki的文档会说明主要的功能、选项,但是基本上不会囊括所有的,最直接暴力的方式,是去源码来找。源码是最诚实的,有的就是有,没有的就是没有。