Pages

Saturday, 20 October 2018

Linux udev

什么是 udev?

udev 是 Linux 2.6 内核里的一个功能,它替代了原来的 devfs,成为当前 Linux 默认的设备管理工具。
udev 以守护进程的形式运行,通过侦听内核发出来的 uevent 来管理 /dev 目录下的设备文件。
不像之前的设备管理工具,udev 在用户空间 (user space) 运行,而不在内核空间 (kernel space) 运行。

使用 udev 的好处

我们都知道,所有的设备在 Linux 里都是以设备文件的形式存在。
在早期的 Linux 版本中,/dev 目录包含了所有可能出现的设备的设备文件。
很难想象 Linux 用户如何在这些大量的设备文件中找到匹配条件的设备文件。
现在 udev 只为那些连接到 Linux 操作系统的设备产生设备文件。
并且 udev 能通过定义一个 udev 规则 (rule) 来产生匹配设备属性的设备文件,
这些设备属性可以是内核设备名称、总线路径、厂商名称、型号、序列号或者磁盘大小等等。

动态管理:
当设备添加/删除时,udev 的守护进程侦听来自内核的 uevent,以此添加或者删除 /dev 下的设备文件,
所以 udev 只为已经连接的设备产生设备文件,而不会在 /dev 下产生大量虚无的设备文件。

自定义命名规则:
通过 Linux 默认的规则文件,udev 在 /dev/ 里为所有的设备定义了内核设备名称,
比如 /dev/sda、/dev/hda、/dev/fd 等等。
由于 udev 是在用户空间 (user space) 运行,Linux 用户可以通过自定义的规则文件,灵活地产生标识性强的设备文件名,
比如 /dev/boot_disk、/dev/root_disk、/dev/color_printer 等等。

设定设备的权限和所有者/组:
udev 可以按一定的条件来设置设备文件的权限和设备文件所有者/组。
在不同的 udev 版本中,实现的方法不同。
下面的流程图显示 udev 添加/删除设备文件的过程。
udev Workflow Chart

Ref


No comments:

Post a Comment