设备管理-Udev(一)
1.udev概述
- udev是 Linux2.6内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具,能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。
- udev以守护进程的形式运行,通过帧听内核发出来的uevent来管理/dev目录下的设备文件。不像之前的设备管理工具,udev在用户空间运行,而不在内核空间运行。
- udev会根据
/etc/udev/udev.conf
文件中的udev_rules指定的目录,逐个检查该目录下的文件,这个目录下的文件都是针对某类或某个设备应该施行什么措施的规则文件。
2.配置udev
配置使用udev通常涉及创建和编辑udev规则,这些规则定义了设备在系统中行为。在使用udev之前,了解一些基本概念,例如subsystem、KERNEL、ACTION等。
键 | 含义 |
---|---|
ACTION | 事件 (uevent) 的行为,例如:add( 添加设备 )、remove( 删除设备 )。 |
KERNEL | 在内核里看到的设备名字,比如sd*表示任意SCSI磁盘设备 |
DEVPATH | 内核设备路径,比如/devices/* |
SUBSYSTEM | 子系统名字,例如:sda 的子系统为 block。 |
BUS | 总线的名字,比如IDE,USB,iscsi |
DRIVER | 设备驱动的名字,比如ide-cdrom |
ID | 独立于内核名字的设备名字 |
SYSFS{value} | sysfs属性值,可以表示任意 |
ENV{key} | 环境变量,可以表示任意 |
PROGRAM | 可执行的外部程序,如果程序返回0值,该键则认为为真(true) |
RESULT | 上一个PROGRAM调用返回的标准输出。 |
NAME | 根据这个规则创建的设备文件的文件名。注意:仅仅第一行的NAME描述是有效的,后面的均忽略。如果你想使用使用两个以上的名字来访问一个设备的话,可以考虑SYMLINK键。 |
SYMLINK | 为/dev/下的设备文件产生符号链接。由于udev只能为某个设备产生一个设备文件,所以为了不覆盖系统默认的 udev 规则所产生的文件,推荐使用符号链接。 |
OWNER | 设备文件的属组 |
GROUP | 设备文件所在的组。 |
MODE | 设备文件的权限,采用8进制 |
RUN | 为设备而执行的程序列表 |
LABEL | 在配置文件里为内部控制而采用的名字标签(下面的GOTO服务) |
GOTO | 跳到匹配的规则(通过LABEL来标识),有点类似程序语言中的GOTO |
IMPORT{type} | 导入一个文件或者一个程序执行后而生成的规则集到当前文件 |
WAIT_FOR_SYSFS | 等待一个特定的设备文件的创建。主要是用作时序和依赖问题。 |
OPTIONS | 特定的选项:last_rule 对这类设备终端规则执行;ignore_device 忽略当前规则;ignore_remove 忽略接下来的并移走请求。all_partitions 为所有的磁盘分区创建设备文件。 |
/etc/udev/rules.d/
目录下,有一些默认的udev规则文件。可通过创建新的规则文件或编辑已有的规则文件来定义udev规则。规则文件的命名约定是以数字和描述性名称
开头。数字决定了规则优先级,数字越小,规则越早被处理
。
重新加载规则: 在编辑或创建规则文件后,需要重新加载udev规则
sudo udevadm control --reload-rules
测试规则: 插入或移除设备,观察规则是否按照预期执行。可以使用udevadm monitor命令来监视udev事件。
sudo udevadm monitor
查看udev事件信息: 使用udevadm info命令来查看设备的udev信息。
sudo udevadm info --attribute-walk --path=/sys/path/to/device
替换/sys/path/to/device为实际设备的路径。对udev的配置更改可能会影响设备的命名和系统的行为,因此在进行更改之前,请确保了解其影响。
例如,以下规则表示当USB设备插入时,在/tmp/usb_log.txt文件中写入一条日志:
ACTION=="add", SUBSYSTEM=="usb", RUN+="/bin/sh -c 'echo USB device inserted >> /tmp/usb_log.txt'"
可以根据自己的需求添加其他规则。