udev_root="/dev/" udev_rules="/etc/udev/rules.d/" udev_log="err"
你的/etc/udev/rules.d下面可能有好几个udev规则文件,这些文件一部分是udev包安装的,另外一部分则是可能是别的硬件或者软件包生成的。比如在Fedora Core 5系统上,sane-backends包就会安装60-libsane.rules文件,另外initscripts包会安装60-net.rules文件。这些规则文件的文件名通常是两个数字开头,它表示系统应用该规则的顺序。
规则文件里的规则有一系列的键/值对组成,键/值对之间用逗号(,)分割。每一个键或者是用户匹配键,或者是一个赋值键。匹配键确定规则是否被应用,而赋值键表示分配某值给该键。这些值将影响udev创建的设备文件。赋值键可以处理一个多值列表。
规则说明
1、udev 规则的所有操作符
“==”: 比较键、值,若等于,则该条件满足;
“!=”: 比较键、值,若不等于,则该条件满足;
“=”: 对一个键赋值;
“+=”: 为一个表示多个条目的键赋值。
“:=”: 对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。
“!=”: 比较键、值,若不等于,则该条件满足;
“=”: 对一个键赋值;
“+=”: 为一个表示多个条目的键赋值。
“:=”: 对一个键赋值,并拒绝之后所有对该键的改动。目的是防止后面的规则文件对该键赋值。
2、udev 规则的匹配键
ACTION: 事件 (uevent) 的行为,例如:add( 添加设备 )、remove( 删除设备 )。
KERNEL: 内核设备名称,例如:sda, cdrom。
DEVPATH: 设备的 devpath 路径。
SUBSYSTEM: 设备的子系统名称,例如:sda 的子系统为 block。
BUS: 设备在 devpath 里的总线名称,例如:usb。
DRIVER: 设备在 devpath 里的设备驱动名称,例如:ide-cdrom。
ID: 设备在 devpath 里的识别号。
SYSFS{filename}: 设备的 devpath 路径下,设备的属性文件“filename”里的内容。
例如:SYSFS{model}==“ST936701SS”表示:如果设备的型号为 ST936701SS,则该设备匹配该 匹配键。
在一条规则中,可以设定最多五条 SYSFS 的 匹配键。
ENV{key}: 环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。
PROGRAM: 调用外部命令。
RESULT: 外部命令 PROGRAM 的返回结果。
KERNEL: 内核设备名称,例如:sda, cdrom。
DEVPATH: 设备的 devpath 路径。
SUBSYSTEM: 设备的子系统名称,例如:sda 的子系统为 block。
BUS: 设备在 devpath 里的总线名称,例如:usb。
DRIVER: 设备在 devpath 里的设备驱动名称,例如:ide-cdrom。
ID: 设备在 devpath 里的识别号。
SYSFS{filename}: 设备的 devpath 路径下,设备的属性文件“filename”里的内容。
例如:SYSFS{model}==“ST936701SS”表示:如果设备的型号为 ST936701SS,则该设备匹配该 匹配键。
在一条规则中,可以设定最多五条 SYSFS 的 匹配键。
ENV{key}: 环境变量。在一条规则中,可以设定最多五条环境变量的 匹配键。
PROGRAM: 调用外部命令。
RESULT: 外部命令 PROGRAM 的返回结果。
3、udev 的重要赋值键
NAME: 在 /dev下产生的设备文件名。只有第一次对某个设备的 NAME 的赋值行为生效,之后匹配的规则再对该设备的 NAME 赋值行为将被忽略。如果没有任何规则对设备的 NAME 赋值,udev 将使用内核设备名称来产生设备文件。
SYMLINK: 为 /dev/下的设备文件产生符号链接。由于 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。
OWNER, GROUP, MODE: 为设备设定权限。
ENV{key}: 导入一个环境变量。
SYMLINK: 为 /dev/下的设备文件产生符号链接。由于 udev 只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。
OWNER, GROUP, MODE: 为设备设定权限。
ENV{key}: 导入一个环境变量。
4、udev 的值和可调用的替换操作符
Linux 用户可以随意地定制 udev 规则文件的值。例如:my_root_disk, my_printer。同时也可以引用下面的替换操作符:
$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: 临时设备名。
%%: 符号 % 本身。
$$: 符号 $ 本身。
$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: 临时设备名。
%%: 符号 % 本身。
$$: 符号 $ 本身。
给出一个列子来解释如何使用这些键,下面的例子来自Fedora Core 5系统的标准配置文件: