Udev设备管理器
创始人
2024-05-13 23:05:58

udev 引入

在2.4内核中 引入了 devfs,他支持设备节点的动态创建。devfs提供了在内存中的文件系统中创建设备节点的能力。设备驱动程序能够自主的管理自己的设备文件。而命名节点的任务还是落到了设备驱动程序头上。但是,设备命名策略是可管理的,不应该与内核混在一起,设备命名策略可以位于头文件,模块参数,或者用户空间中。而udev则将设备管理的任务推向了用户空间。

一 udev 是什么

简单讲,udev负责在用户空间,根据用户设置的规则,在监测到设备被插入后,在/dev/下自动创建并命名设备文件节点(实际上只能做一个已存在节点的链接文件),也可以自动设置设备属性。

udev 的工作取决于以下几项:
1 内核中的 sysfs文件系统 支持
2 一套用户空间守护程序 udevd 和 实用工具 udevinfo
3 用户自定的规则,位于 /etc/udev/rules.d/目录中。可以根据对应设备的特点设置规则。

devfs和udev的区别主要有以下几点

1、devfs运行在内核空间(使用devfs_register等API在内核空间注册设备节点)。而udev完全运行在用户空间。

2、当用户访问/dev下的某个节点时,devfs会自动加载对应的驱动;而udev则并不负责自动加载驱动的工作(2.6版本内核,驱动是在设备被插入/移除时被加载/卸载的,而不是设备被访问时就加载驱动)。

3、devfs 是在内核空间命名设备,而 udev是在用户空间命名设备

4、udev 也会处理 热拔插、冷拔插, 事实上 udev承担了管理热拔插的全部责任。

二 udev的功能是什么

对热拔插 与 冷拔插的处理:

udev 完全在用户态工作,利用设备加入或移除时内核所发送的热拔插事件来工作,在运行过程中往系统中插入设备称为“热拔插”,而在系统系统前就已经连接的设备则称为冷拔插。侦测到热拔插事件之后,他们会通过netlink套接字向用户空间派生 uevent。 netlink套接字是一种在内核空间和用户空间透过套接字API进行通信的有效机制,用户空间的 udevd(管理设备节点创建和移除的守护进程)会接收uevent并管理热拔插。

udev也处理冷拔插,由于udev是用户空间的一部分,仅仅在内核启动后才开始运行,所以需要一种特殊的机制针对冷拔插设备模拟热拔插事件。启动时,内核为所有设备在sysfs下创建了一个名为 uevnet的文件,并将冷拔插事件记录于这些文件中。当udev开始运行后,他读取sysfs下所有的uevent文件,并为每个冷拔插设备产生热拔插uevent。

三 udev 怎么用

使用:

假设目前有一个 USB DVD驱动器 或 一个 USB CD-RW。根据热拔插设备顺序的不同,一个被命名为 /dev/sr0,另一个被命名为 /dev/sr1。在没有udev的情况下,必须区分这些名字对应的设备是哪个。但是有了udev之后,不管以什么顺序拔插它们,都能分辨出二者,如 DVD命名为 /dev/usbdvd, CD-RW命名为 /dev/usbdrw。

首先,从sysfs响应的文件中提取产品信息。假定 DVD驱动器被分配的设备节点是 /dev/sr0,CR-RW被分配的设备节点是 /dev/sr1。 使用 udevinfo可以收集设备信息

在这里插入图片描述
然后使用搜集到的产品信息标识设备并且添加udev命名规则,创建 /etc/udev/rules.d/40-cdvd.rules 文件 并添加如下信息:

BUS="usb", SYSFS{idProduct}="0701", SYSFS{idVendor}="05e3",
KERNEL="sr[0-9]*", NAME="%k", SYMLINK="usbdvd"BUS="usb", SYSFS{idProduct}="0302", SYSFS{idVendor}="0dbf",
KERNEL="sr[0-9]*", NAME="%k", SYMLINK="usbdcdrw"

首先 第1条规则告诉 udev,一旦发现一个USB设备的产品ID为0x0701,厂商ID为0x05e3,就增加一个以sr开始的名称,udev将在 /dev 目录下创建一个同名的节点并为之创建一个名为 usbdvd的符号链接。类似的,第2条规则是为 CD-RW驱动器创建一个名为usbcdrw的符号链接。

为了测试新创建的语法错误,可以对 /sys/block/sr*运行udevtest。

为了打开 /var/log/messages中的相关提示信息,可以将 /etc/udev/udev.conf文件中的 udev_log设置为 “yes”

为了在运行过程中的对 /dev 目录应用增加规则,可以运行 udevstart重启udev,此后,你的DVD驱动器在系统中将始终为 /dev/usbdvd,而CD-RW驱动器将总是为/dev/usbcdrw。

相关内容

热门资讯

中国人民政治协商会议第七届朔州... 中国人民政治协商会议第七届朔州市委员会第五次会议议程(2026年1月17日政协第七届朔州市委员会第五...
搬进新房启新程 ——甘肃榆中灾... 元旦前两天,甘肃省榆中县马坡乡马莲滩新村广场上,社火表演热闹非凡,书法家挥毫泼墨写春联,325户受灾...
成都警方通报“一起金店被盗案” 澎湃新闻2026-01-16 22:10:02“成都公安”微信公号 2026年1月16日,成都市公安...
厉害!复旦大学管理学院荣获【2... (来源:五道口江湖)2026年1月15日,全球杰出雇主调研机构正式发布“2026中国杰出雇主”认证榜...
最新或2023(历届)亲情六年... 两年过去了,可两年的时候更加深了我的怀念,每每下雨的时候,我就在痴痴地想:想你给我的零花钱,想你的容...