快速链接:
.
👉👉👉 Linux内核驱动面试-百问百答-[目录] 👈👈👈
- 付费专栏-付费课程 【购买须知】
- 个人博客笔记导读目录(全部)
udev
是Linux系统中的一个设备管理框架,用于管理和动态创建设备节点。它是systemd
系统管理守护进程的一部分,负责在设备连接或断开时自动处理设备节点的创建和删除,以及运行特定的用户空间程序。udev
的全称是“用户空间设备管理器”(user space device manager)。
udev
的功能和作用
-
动态设备节点管理:
udev
会自动检测到设备的连接或断开,并在/dev
目录下创建或删除相应的设备节点。这样,用户和应用程序可以通过标准的路径访问设备,而不需要手动创建设备节点。 -
设备命名规则:
udev
允许管理员定义设备命名规则,使设备节点名称具有一致性和可预测性。这在有多个同类设备(如多块硬盘)时尤其有用,可以避免由于设备名称变化而导致的访问问题。 -
设备属性管理:
udev
可以读取和设置设备属性,如权限、所有者、设备类型等。这些属性可以通过配置文件来定义。 -
事件处理:
udev
可以触发用户定义的脚本或程序来处理设备事件。例如,可以在插入USB设备时自动挂载文件系统,或在网络设备连接时自动配置网络。
udev
的工作原理
-
设备事件: 内核检测到设备的连接或断开时,会生成一个
uevent
事件。这个事件包含设备的详细信息,如设备类型、设备号、属性等。 -
事件传递: 内核通过
netlink
套接字将uevent
事件发送到用户空间,udev
守护进程接收这些事件并进行处理。 -
规则匹配:
udev
守护进程根据配置文件中的规则来匹配收到的事件。规则定义了如何处理特定类型的设备,包括创建设备节点、设置属性、运行脚本等。 -
执行操作: 根据匹配到的规则,
udev
执行相应的操作,如在/dev
目录下创建或删除设备节点,设置设备属性,或者运行用户定义的脚本。
udev
规则配置
udev
规则通常存放在/etc/udev/rules.d/
目录下,文件名以.rules
结尾。每条规则由一系列匹配条件和操作组成。以下是一个简单的udev
规则示例:
# 10-usb.rules
SUBSYSTEM=="usb", ATTR{idVendor}=="1234", ATTR{idProduct}=="5678", SYMLINK+="my_usb_device"
这个规则表示,当插入一个USB设备,其供应商ID为1234
且产品ID为5678
时,udev
将在/dev
目录下创建一个名为my_usb_device
的符号链接指向该设备。
udev
的配置和调试
-
配置文件:
udev
的默认配置文件位于/etc/udev/udev.conf
。主要配置选项包括日志级别、规则目录等。 -
调试
udev
规则: 可以通过以下命令查看当前设备的属性,以便编写和调试udev
规则:udevadm info --query=all --name=/dev/sda
这条命令将显示
/dev/sda
设备的所有属性。 -
测试规则: 可以使用以下命令测试和应用新的
udev
规则:sudo udevadm control --reload-rules sudo udevadm trigger
udevadm control --reload-rules
命令重新加载所有udev
规则,udevadm trigger
命令触发所有设备的udev
事件,使新的规则立即生效。
总结
udev
是Linux系统中重要的设备管理框架,提供了动态设备节点管理、设备命名规则、设备属性管理和事件处理功能。它通过配置文件定义规则,自动处理设备的创建、删除和属性设置,简化了设备管理和自动化操作的实现。