Udev设备管理器

news/2023/6/7 22:52:10

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-4562308.html

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-LinkedList源码解析

可以关注我的微信公众号:xiaobei109208,每周一篇技术分享哦。 “各位周末好呀~” “啊呸,程序员哪里来的周末” ​ 前两天怀着激动的心,颤抖的手写了数据结构-ArrayList源码解析,之后我也仔细的看了。确实…

单例模式-史上最全的解释

单例模式是面向对象的编程语言23种设计模式之一,属于创建型设计模式。主要用于解决对象的频繁创建与销毁问题,因为单例模式保证一个类仅会有一个实例。大部分对单例模式应该都知道一些,但面试的时候可能回答不会很完整,不能给自己…

入职大厂,齐姐精选的9道Java集合面试题!

快到秋招季/跳槽季,很多读者都有了好消息,在这里也分享给大家:还有很多读者正在刷题、学习准备的,所以最近开启了「齐姐自习室」的云自习活动,里面有很多准备面试、刷题、做自己的项目、学英语的小伙伴,大家…

精选9道java面试题!

今天这篇文章是单纯的从面试的角度出发,以回答面试题为线索,再把整个 Java 集合框架复习一遍,希望能帮助大家拿下面试。 先上图: 当面试官问问题时,我会先把问题归类,锁定这个知识点在我的知识体系中的位…

入职大厂,精选的9道Java集合面试题!

今天这篇文章是单纯的从面试的角度出发,以回答面试题为线索,再把整个 Java 集合框架复习一遍,希望能帮助大家拿下面试。先上图:当面试官问问题时,我会先把问题归类,锁定这个知识点在我的知识体系中的位置&a…

聊聊我在职场的至暗时刻(中篇)!

见字如面,我是军哥!接上篇《聊聊我在职场的至暗时刻!》,我从B端部门转岗到C端部门任架构师,可是面向用户系统的架构/技术和我之前差异太大,我要从头学起,还要指导他们做技术/业务架构&#xff0…

入职大厂,齐姐精选的 9 道 Java 集合面试题

Java 集合框架其实都讲过了,有一篇讲 Collection 的,有一篇讲 HashMap 的,那没有看过的小伙伴快去补下啦,文末也都有链接;看过的小伙伴,那本文就是检测学习成果的时候啦 今天这篇文章是单纯的从面试的角度出…

2020年总结,适应与蜕变的开始!!

j3_liuliang最近断断续续,思绪万千的写了有一段时间的总结,一直拿捏不好第二节的小标题(水平有限[哭]);既然拿捏不定那就这样,说不定还会表达出不一样的效果呢,对吧! 一、前奏 这不…