udev 实现
来源:互联网 发布:兵器推演软件 编辑:程序博客网 时间:2024/05/22 12:50
2011-5-1
Udev
udev是Linux2.6以来提供的设备管理机制,负责对/dev目录下的所有设备文件进行管理,包括初始化阶段和事件触发阶段。
1、初始化阶段:建立“/sys”目录下指定子目录中规定的设备文件并可能执行处理脚本
2、事件触发阶段:响应设备管理的UEVENT事件,包括设备插入和拔出事件。响应如下:
(a)在设备插入时建立设备文件,并可能执行处理脚本
(b)在设备删除时删除设备文件,并可能执行处理脚本
1. dev
系统初始化时,udev会搜索“/sys”目录来建立一系列设备文件。
“/sys”目录中,udev会搜索block和class两个子目录下面的各级子目录,直到找到一个名称为“dev”文件为止。
此时,udev会在“/dev”下建立一个设备文件,文件名称为“dev”文件所在目录名称,主设备号和从设备号存放在“dev”文件中。搜索“/sys/block”目录时,建立的都是块设备文件;搜索“/sys/class”建立的都是字符设备文件。
建立设备文件时,udev会搜索“mdev.config”中的设备文件列表,确定建立的设备文件的一些属性,并可能执行处理脚本。
2. uevent
在系统运行过程中,可能会发生设备插入、拔出这样的事件,这通常发生在:
(a) 一些热插拔设备的插入拔出
(b) 内核模块载入和卸载引起的设备插入和拔出
在这些情况下,Linux内核会向用户空间发生UEVENT事件,调用的函数是
int kobject_uevent(struct kobject *kobj, enum kobject_action action),uevent事件包括下面这些参数(格式为“参数名称=参数值”):
1、“ACTION”:表明当前动作,“add”,“remove”,”change”,”move”,”online”,”offline”等
2、“DEVPATH”:设备路径,路径位于“/sys”下。
3、“MAJOR”:主设备号
4、“MINOR”:从设备号
而在应用程序中,通过监听NETLINK_KOBJECT_UEVENT这个专用于内核空间与用户空间uevent事件通信的socket通道,能够接受设备管理的uevent事件。
收到后,udev会建立或删除“/dev”目录下对应设备文件,其中主设备号和从设备号来源于UEVENT事件的参数“MAJOR”和“MINOR”;字符设备或块设备则根据参数“DEVPATH”位于“block”还是“class”子目录下;设备文件名称则来自参数“DEVPATH”对应路径的最后一个节点名称。设备文件属性则来源于“mdev.conf”
如果配置文件中规定了该设备插入、拔出时的处理脚本,则在产生插入、拔出事件后,udev除了建立、删除设备文件外,还会执行对应的处理脚本
代码流程的细节可以看下图
3. mdev.conf
文件“/etc/mdev.conf”是udev的配置文件,它存放着一个设备文件列表,列出了建立该设备文件时需要设置的属性和处理的脚本。在该列表中,每行对应一个设备文件。
一个行用空格分成了多个域,包括:
设备名称 用户ID:组ID 文件权限 =路径 >路径 @|$|*处理脚本
各域说明如下:
1、设备名称:POSIX风格正则表达式格式,由udev搜索匹配的设备文件名。
2、用户ID:组ID:表明该设备文件对应的用户和组
3、文件权限:Linux的3个8进制数权限,即所有者权限、同组用户权限和其他用户权限
4、=路径:可选域,相当于执行命令“mv 设备文件名称 路径”
5、>路径:可选域,相当于执行命令“cp 设备文件名称 路径”
6、@|$|*处理脚本:可选域。包含处理脚本解析UEVENT事件类型,并进行相关处理。这三个字符不同在于
(1)@处理脚本:建立设备文件后执行处理脚本
(2)$处理脚本:删除设备文件前执行处理脚本
(3)*处理脚本:建立设备文件后或删除设备文件前都执行该脚本。这种脚本很可能要解析UEVENT事件来区分是建立还是删除
这样,初始化时,或产生设备管理的UEVENT事件时,udev会搜索该配置文件的设备文件列表的每一行,将产生事件的设备名称与该行中设备名称域进行匹配,如果匹配,则按照该行中的描述进行处理。处理包括:
(1)建立或删除设备文件:如果是建立设备文件,则按该行中的用户和权限设置设备文件。
(2)执行该行中包含的处理脚本
比如:event[0-9] 0:0 666 >input/
则在event0~event9任何一个设备插入时,建立设备文件/dev/eventX(X=0~9)和/dev/input/eventX
- udev 实现
- udev的实现原理
- udev实现原理
- udev的实现原理
- udev实现原理
- udev的实现原理
- udev实现原理
- udev实现原理
- udev实现原理
- Udev具体实现
- udev的实现原理
- udev实现原理
- udev的实现原理
- udev的实现原理
- udev的实现原理
- udev实现原理
- udev的实现原理
- udev实现原理
- ERP系统2011.5.26更新记录
- 在SHELL中执行MYSQL语句
- [想法征集]我心中理想的博客系统
- 一个多文件上传的 简单JS
- CATIA中的DMU功能
- udev 实现
- Linux套接字编程中的五个隐患
- hive中的bucket table
- 使用库函数getchar和puts实现字符串的输入和输出
- hive中的外表EXTERNAL TABLE
- 解决Tomcat不能在64位Windows上作为服务运行的问题
- 给自己一个窝
- linux中comm命令用法
- 状态栏显示滚动字幕