udev使用
Udev 是指 “userspace /dev” ,目前它已是systemd系统的一部分(2012年后),Udev的设计取代了老式的devfs和hotplug机制。
Udev是linux系统的设备管理器,主要来管理 /dev
下的设备节点文件,还会处理硬件设备热拔插时引发的用户空间事件,以及某些设备的固件加载。 内核通常根据发现设备的顺序分配设备名,有不可预知性,udev可以基于设备属性或当前配置来可靠地识别设备。
systemd具体服务:systemd-udevd.service
,它作为damon运行,持续监听内核的uevent事件。对于每个内核发来的event,systemd-udevd会 执行匹配的指令,指令的匹配细节配置在 /etc/udev
中。为了配合udev完成设备的管理,(设备信息,驱动等都在内核中,用户态无法直接获得),内核 通过sysfs文件系统将必要的设备信息导出到用户空间。内核会为每一个探测到的设备创建一个同设备名的文件夹(在/sysfs/
中),里面包含了各种 设备的属性相关文件。udev通过查看这些文件确定硬件设备。另外,每次设备新加入或移出或产生变化时,内核会发送uevent信号提醒udev设备的变化。 udev根据信号执行匹配的规则来标识设备。规则的配置参考man 5 udev.conf
,另外还有 udevadm
工具可以动态改变规则。
udevd本身分为三部分:
允许访问设备信息的libudev库。
用户空间守护进程(sytemd) udevd,用于管理/dev。
用于诊断的管理命令行实用工具udevadm。
LINUX通过设备文件的主次设备号与内核建立映射关系。设备文件的维护经历了静态维护、 devfs内核态维护、sysfs+hotplug用户态维护、udev几个阶段。相对比之前,udev使用更少空间,提供更高的弹性、更便捷的设备文件维护。
udev守护进程systemd-udevd.service 直接从内核接收设备的插入、拔出、改变状态等事件, 并根据这些事件的各种属性, 到规则库中进行匹配,以确定触发事件的设备。 被匹配成功的规则有可能提供额外的设备信息,这些信息可能会被记录到udev数据库中, 也可能会被用于创建符号链接。
udev处理的所有设备信息都存储在udev数据库中, 并且会发送给可能的设备事件的订阅者。 可以通过 libudev 库访问udev数据库以及设备事件源。
systemd-udevd.service的配置文件为:/etc/udev/udev.conf
规则文件分别位于: 系统规则目录(/usr/lib/udev/rules.d
)、 运行时规则目录(/run/udev/rules.d
)、 本机规则目录(/etc/udev/rules.d
)。
/etc/
的优先级最高、 /run/
的优先级居中、 /usr/lib/
的优先级最低。
查看udev日志
journalctl -u systemd-udevd
重载规则
udevadm control --reload
触发特定规则
udevadm trigger --subsystem-match=block --action=add
udevadm trigger /dev/mmcblk1 --action=add
调试时将/etc/udev/udev.conf
文件中的udev_log="err"
改为udev_log="info"
,这样看以看到更多的日志信息。
最后编辑:SteveChen 更新时间:2025-06-21 22:23