udev¶
待完善¶
udev系统让用户空间进程能够自动配置和使用新设备
/dev目录为用户进程与使用内核支持的设备进行引用与交互提供了便利,但是它过于简单
/dev目录中的文件名包含有关设备的一些信息,但不详尽。另一个问题是内核根据其找到设备的顺序为设备文件命名,所以系统每次重新启动后,设备文件名有可能不同。
Linux内核通过一个文件和目录系统提供sysfs界面,旨在基于硬件属性统一显示设备的相关信息。设备 以/sys/devices为root路径。例如,/dev/sda代表的SATA硬盘在sysfs中的路径可能是:
/sys/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda
你可以看到,这个路径比文件名/dev/sda长很多,后者也是一个目录。但你实际上不能对比这两个路径, 因为它们的作用不一样。 /dev目录中的文件是供用户进程使用设备的,而/sys/devices中的文件是用来查看 设备信息和管理设备用的。
这些文件和子目录一般都是供程序而不是用户访问的,但你可以通过诸如/dev文件这样的例子来了解它 们包含和代表的内容。运行命令cat dev会显示数字8:0,这刚好是/dev/sda设备的主要和次要编号。
/sys目录下有几个快捷方式。例如,/sys/block目录中包含系统中的所有块设备文件,不过它们都是符号链 接。运行命令ls -l /sys/block可以显示指向sysfs的实际路径。
在/dev目录中查看设备文件的sysfs路径不太方便,可以使用udevadm命令来查看路径和其他属性: $ udevadm info --query=all --name=/dev/sda
注 解 :udevadm命令在/sbin目录下,如果你的路径中没有,可以将该目录加到你的路径中。
udevd守护进程是这样工作的。
1. 内核通过一个内部网络链接向udevd发送一个通知事件,称作uevent
2. udevd加载uevent中的所有属性信息
3. udevd通过规则解析来决定执行哪些操作和增加哪些属性信息
用户空间设备管理器 netlink socket 通信 uevent 事件