udev 规则详解
udev 是 Linux 系统中用于管理设备文件的工具。udev 以守护进程的形式运行,通过监听内核发出来的 uevent 来管理/dev 目录下的设备文件。
udev 规则是用于告诉 udev 如何处理特定设备的配置文件。udev 规则由一系列键/值对组成,键/值对之间用逗号(,)分割。每一个键或者是用户匹配键,或者是一个赋值键。匹配键确定规则是否被应用,而赋值键表示分配某值给该键。这些值将影响 udev 创建的设备文件。
udev 规则语法
udev 规则的语法如下:
KEY1=VALUE1,KEY2=VALUE2,...
其中:
KEY
:匹配键或赋值键。VALUE
:匹配值或赋值值。
匹配键
匹配键用于确定规则是否被应用于特定设备。常用的匹配键包括:
ACTION
:事件(uevent)的行为,例如:add(添加设备)、remove(删除设备)。KERNEL
:内核设备名称,例如:sda,cdrom。DEVPATH
:设备的 devpath 路径。SUBSYSTEM
:设备的子系统名称,例如:sda 的系统为 block。SYMLINK
:为/dev/ 下的设备文件产生符号链接。OWNER
:设备文件的所有者。GROUP
:设备文件的所属组。MODE
:设备文件的权限。
赋值键
赋值键用于设置设备文件的属性。常用的赋值键包括:
NAME
:在/dev 下产生的设备文件名。SYMLINK
:为/dev/ 下的设备文件产生符号链接。OWNER
:设备文件的所有者。GROUP
:设备文件的所属组。MODE
:设备文件的权限。
操作符
udev 规则支持以下操作符:
==
:匹配相等比较。!=
:匹配不等比较。=
:赋值。+=
:追加赋值。:=
:赋值并拒绝之后所有对该键的改动。
udev 命名规则
- 文件名以数字开头,表示规则的优先级。数字越大,优先级越高。
- 文件名以子系统名称开头,表示该规则仅适用于该子系统下的设备。
- 文件名以设备类型开头,表示该规则仅适用于该类型的设备。
示例
99-my-custom-rule.rules
:这是一个自定义规则,优先级为 99。block-my-custom-rule.rules
:这是一个适用于块设备的自定义规则。usb-my-custom-rule.rules
:这是一个适用于 USB 设备的自定义规则。
udev 规则示例
SUBSYSTEM=="block", ACTION=="add", NAME="sd*"
该规则表示,对于所有添加的块设备,udev 将创建一个名为 sd*的设备文件。
SUBSYSTEM=="usb", ATTR{idVendor}=="0x1234", ATTR{idProduct}=="0x5678", MODE="0664", GROUP="users"
该规则表示,对于所有连接到系统的 USB 设备,如果其供应商 ID 为 0x1234 且产品 ID 为 0x5678,则 udev 将创建一个名为 usb-0x1234-0x5678 的设备文件,该文件的权限为 0664,所属组为 users。
// 50-bridge-network-interface.rules
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="01:23:45:67:89:ab", NAME="eth0"
该规则表示,绑定指定网卡的 mac 地址。
udev 规则的应用
udev 规则可以用于各种目的,例如:
- 为特定设备创建自定义设备文件。
- 为特定设备设置权限。
- 为特定设备加载内核模块。
- 运行自定义脚本。
总结
udev 规则是 udev 用于管理设备文件的配置文件。udev 规则由一系列键/值对组成,键/值对之间用逗号(,)分割。每一个键或者是用户匹配键,或者是一个赋值键。匹配键确定规则是否被应用,而赋值键表示分配某值给该键。这些值将影响 udev 创建的设备文件。