1.概念介绍
1.1sysfs文件系统
Linux 2.6以后的内核引入了sysfs文件系统,sysfs被看成是与proc、devfs和devpty同类别的文件系统,该文件系统是一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图,与提供进程和状态信息的proc文件系统十分类似。
sysfs把连接在系统上的设备和总线组织成为一个分级的文件,它们可以由用户空间存取,向用户空间导出内核数据结构以及它们的属性。sysfs的一个目的就是展示设备驱动模型中各组件的层次关系,其顶级目录包括block、bus、dev、devices、class、fs、kernel、power和firmware
等。
block目录包含所有的块设备;devices目录包含系统所有的设备,并根据设备挂接的总线类型组织成层次结构;bus目录包含系统中所有的总线类型;class目录包含系统中的设备类型(如网卡设备、声卡设备、输入设备等)。
1.2devpath
本文的 devpath是指一个设备在 sysfs文件系统 (/sys)下的相对路径,该路径包含了该设备的属性文件。udev 里的多数命令都是针对 devpath操作的。例如:sda的 devpath是 /block/sda,sda2 的 devpath是 /block/sda/sda2。
1.3 udev工作流程
udev在用户空间中执行,动态建立/删除设备文件,允许每个人都不用关心主/次设备号而提供LSB(Linux标准规范,Linux Standard Base)名称,并且可以根据需要固定名称。工作流程如下:
1)当内核检测到系统中出现了新设备后,内核会通过netlink套接字发送uevent
2)udev获取内核发送的信息,进行规则的匹配。匹配的事物包括SUBSYSTEM、ACTION、atttribute、内核提供的名称(通过KERNEL=)以及其他的环境变量。
2.udev规则文件
2.1 规则文件存储位置
/etc/udev/rules.d/*.rules
2.2 文件规则
udev的规则文件以行为单位,以“#”开头的行代表注释行。其余的每一行代表一个规则。每个规则分成一个或多个匹配部分和赋值部分。匹配部分用匹配专用的关键字来表示,相应的赋值部分用赋值专用的关键字来表示。
匹配关键字包括:ACTION(行为)、KERNEL(匹配内核设备名)、BUS(匹配总线类型)、
SUBSYSTEM(匹配子系统名)、ATTR(属性)等,赋值关键字包括:NAME(创建的设备文件名)、SYMLINK(符号创建链接名)、OWNER(设置设备的所有者)、GROUP(设置设备的组)、IMPORT(调用外部程序)、MODE(节点访问权限)等。
2.3 匹配和赋值操作符
匹配键 | 赋值或匹配 | 说明 |
== | 匹配 | 相等比较 |
!= | 匹配 | 不等比较 |
= | 赋值 | 分配一个特定的值给该键,他可以覆盖之前的赋值。 |
+= | 赋值 | 追加特定的值给已经存在的键 |
:= | 赋值 | 分配一个特定的值给该键,后面的规则不可能覆盖它。 |
2.4 匹配键
键 | 说明 |