udev是Linux系统用户空间的设备管理守护进程,在linux 6.5版本中,它依然是实现动态设备管理的核心组件,主要用于处理内核上报的设备事件,管理/dev目录下的设备节点,替代了早期Linux系统中静态/dev目录和hotplug机制的功能。

udev的核心功能
udev在linux 6.5系统中的核心作用可以分为以下几个部分:
- 动态设备节点管理:当系统中有硬件设备添加或移除时,内核会发送uevent事件,udev接收到事件后会自动在/dev目录下创建或删除对应的设备节点,不需要手动操作。
- 自定义设备命名:默认的设备节点名称可能不符合使用习惯,udev支持通过规则文件自定义设备名称,比如将USB串口设备固定命名为ttyUSB_custom。
- 设备权限配置:可以为不同设备设置对应的所有者和访问权限,避免普通用户无法访问特定硬件设备的问题。
- 事件触发执行:当特定设备事件发生时,可以触发自定义脚本执行,比如插入U盘后自动挂载到指定目录。
udev的工作流程
在linux 6.5中,udev的工作流程遵循以下逻辑:
- 内核检测到硬件状态变化,生成uevent事件并通过netlink套接字发送到用户空间。
- udev守护进程监听netlink事件,接收到事件后解析事件中的设备属性信息。
- udev根据/etc/udev/rules.d/和/lib/udev/rules.d/目录下的规则文件,匹配设备属性,执行对应的操作,比如创建设备节点、设置权限、触发脚本等。
udev规则文件基础
udev的规则文件以.rules为后缀,存放于/lib/udev/rules.d/(系统默认规则)和/etc/udev/rules.d/(用户自定义规则)目录中,规则文件的命名通常以数字开头,数字越小优先级越高。
一个基础的udev规则结构如下:
# 规则结构:匹配键 赋值键 # 匹配键用于识别目标设备,赋值键用于定义要执行的操作 KERNEL=="sda", SUBSYSTEM=="block", SYMLINK+="my_root_disk", MODE="0660"
上述规则的含义是:当内核设备名为sda、子系统为block时,为/dev/sda创建一个名为my_root_disk的符号链接,同时设置设备节点权限为0660。
linux 6.5中udev的常用操作
查看udev状态
可以通过以下命令查看udev服务在linux 6.5中的运行状态:
# 查看udev服务状态 systemctl status systemd-udevd # 查看udev版本信息 udevadm --version
手动触发udev事件
当修改了udev规则后,不需要重启系统,可以通过以下命令让规则生效:
# 重新加载udev规则 udevadm control --reload-rules # 触发所有设备的udev事件重新处理 udevadm trigger
查看设备属性
如果需要编写udev规则,首先需要获取目标设备的属性信息,可以使用以下命令:
# 查看指定设备的udev属性,这里以sda为例 udevadm info --query=all --name=/dev/sda # 监控实时udev事件 udevadm monitor
udev与内核的关系
需要注意的是,udev运行在用户空间,本身不直接检测硬件变化,硬件检测和驱动加载是内核的工作。内核检测到硬件后,才会通过uevent机制通知udev,udev再根据规则处理设备节点相关操作。在linux 6.5中,内核依然保留了uevent事件的发送机制,udev的兼容性没有发生变化,用户可以按照以往的使用习惯配置和管理udev。