udev是Linux2.6 内核里的一个功能,它替代了原来的devfs,成为当前Linux默认的设备管理工具。udev以守护进程udevd的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。但不像之前的设备管理工具(devfs),udev是在用户空间(user space)运行,而不在内核空间(kernel space)运行。
在linux系统中,/dev目录用来保存设备文件的,每个文件指向一个系统设备,如: hda指向第1个IDE硬盘,sda指向第1个SCSI硬盘。用户空间的应用程序可以通过这些设备节点与系统硬件设备进行交互,例如:X服务器会监听/dev/input/mice设备,移动虚拟的鼠标指针以反映用户鼠标的移动。在2.4内核时代,在/dev下保存了所有kernel可以支持的硬件设备的设备文件,将近有1万个。而这些设备中,大多数是没有连接的设备,这样就大大的浪费了系统资源,而且/dev目录也显得非常混乱。udev就是用来解决这些问题的。在2.6内核中,采用udev方式来管理/dev目录,它可以动态的建立/删除设备文件(设备连接到系统时,它会自动建立相应的设备文件,设备断开连接后,它会自动删除相应的设备文件),这样使/dev目录简化了许多。
udev的另一个重要功能就是可以允许用户编写命名规则,为不同设备指定设备文件名。这样,对设备的管理也方便了许多。例如:你有2个外形一样的U盘,1个容量是1G的,1个容量是2G的。一般情况下,你先接上的U盘会是sdb,后接上的U盘会是sdc。这样每次插入U盘的设备名可能不一样,对使用很不方便。但由于udev在用户空间运行,通过自定义的命名规则文件,你可以有自己指定的设备命名,如将1G的U盘命名为1g,将2G的U盘命名为2g。每次插入设备,设备名都不会再变化,使用和管理会很方便。除此之外,udev还可以按照一定的条件来设置设备文件的权限和和设备文件的所有者或所有组,当然这也是在规则文件中定义。
下图为udev工作流程图:
![udev实现动态设备命名 - swee - 我的博客](http://img693.ph.126.net/Yu1VpdyyqmGHTVils7JUBg==/1104789283590567877.jpg)
相关术语:
sysfs:sysfs是Linux2.6内核里的一个虚拟文件系统,挂载在/sys目录下。它把设备和驱动的信息从内核的设备模块导出到用户空间(user space)。从该文件系统中,Linux用户可以获取很多设备的属性。
devpath:devpath是指一个设备在sysfs文件系统(/sys)下的相对路径,该路径包含了指定设备的属性文件。udev里的多数命令都是针对de