udev(六):udev
来源:互联网 发布:手机qq数据迁移到sd卡 编辑:程序博客网 时间:2024/05/08 06:32
原创文章,转载请注明出处,谢谢!
作者:清林,博客名:飞空静渡
<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->
基于上面提到的问题,便开始了udev的项目。Udev的目标有下面几点:
1、运行于用户空间。
2、创建动态的/dev。
3、如果需要就提供一个固定的设备名字。
4、提供用户API以供访问当前系统设备的信息。
首先可以看下第一点的“运行于用户空间”,这点很容易做到,这可以通过利用任何的设备增加或从系统中移除时/sbin/hotplug都会产生一个事件的这样的机制并联合sysfs的功能来显示所有有关设备的信息。
而其它的几个剩下的目标就使udev分成三个子系统了:
1、namedev--处理所有的设备命名。
2、libsysfs--访问系统里的设备信息的一个标准库。
3、udev--为/dev进行动态更换。
下面来看看这三个子系统。
6.1namedev
由于需要为不同的设备进行命名,设备命名这部分就从udev中分离出来成为一个子系统。设备命名从udev从分离出来,这就允许了可插拔设备的命名可以有不同的组织来开发。设备命名子系统namedev--提供了一个标准的接口可供调用来命名一个指定的设备。
在udev的最初发行版里,namedev逻辑上是由一些链接文件,链接到udev上。在当前中只有一个命名方案,就是LANANA定义的命名表(前面说的那个)。通常由sysfs来代表设备使用这些相同的名字,这也符合当前大多数的Linux用户。
udev项目的部分目标是为用户基于一组机制来命名设备提供一种方法。在当前的namedev版本中,提供了用户5个步骤来确定设备的名字。这些步骤是有循序的,并且在这5个步骤的过程中,任何一个步骤中检测出设备的名字的话,就用这个名字了。这5个步骤如下:
1、标签或序列号
2、总线设备号
3、总线拓扑结构
4、替换名字
5、内核名字
在第一步中,当一个设备增加进系统时就会基于这个设备的类型来检测,看它是否有唯一的标识符。例如,如果是usb设备,则usb序列号就会被检测;如果是scsi设备,那么uuid就会被检测;而块设备的话,就会检测文件系统的标签。如果这个由用户提供的标识符匹配的话(在配置文件中),那么这个就是最终的名字而被使用。
第二步是检测设备的总线号。对于大多数总线来说,这个号通常随着时间的推移是不会改变的,并且所有的总线号在系统里的任何时间点上都可以保证唯一性。一个好的例子就是PCI的总线号,在大多系统中基本上是不改变的(然而,升级BIOS,或者热插拔PCI控制器,那么在机子重启之后就有可能改变这个PCI总线号)。同样,如果总线号匹配用户提供的标识符,那么这个名字就会被赋给设备了。
第三步是检测设备在总线上的位置。例如,usb设备可以通过插在哪个插口上来确定。
第四步是简单的字符串替换。如果设备在内核中的名字与指定的名字相匹配,就于用这个指定的名字。
第五步,如果前面的都没有确定设备名,那么设备名就用默认的内核名字。
下图摘自《udev– A Userspace Implementation of devfs》。
其中,第一、二项显示怎样为设备指定序列号来控制设备的命名。第三、四项是根据总线id来命名设备,第五、六项是根据usb设备的接口位置来命名设备,第七项显示的是简单的名字替换。
6.2libsysfs
为了可以让许多的不同的程序访问到sysfs里设备的信息,需要提供通用的API接口,而不仅仅限于udev里。设备命名子系统和udev系统都需要从sysfs所描述的设备中查询许多各种不同的设备信息。因此就从sysfs中分出这个作为一个库来供使用。
6.3udev
udev程序使用namedev和libsysfs库来完成设备的命名机制。当/sbin/hotplug被内核调用时,udev就会运行。它是通过在/etc/hotplug.d/default目录里为自己增加一个符号连接来实现的,而这个目录由/sbin/hotplug复用器脚本(multiplexerscript)来搜索。
/sbin/hotplug有内核调用,并输出许多设备的特定信息,这些信息是产生了什么样的动作,产生什么样的设备类型动作以及是sysfs目录树中的哪个设备。udev就根据这些信息调用namedev来确定这个设备应该怎么命名。如果这是个新增加进来的设备,udev就会使用libsysfs来确定这个设备的设备文件应该用什么主次设备号,并在/dev目录下创建为设备创建一个合适的设备文件名和分配主次设备号。如果这个设备是从系统里移除的,那就相应的从/dev目录下移除它的设备文件。
参考文章:《udev – A Userspace Implementation of devfs》
来源:http://blog.csdn.net/fjb2080/archive/2009/11/25/4871033.aspx
- udev(六):udev
- udev(六):udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev
- udev(一)-- 什么是udev
- udev(九)-- 写个程序检测我们的设备插拔
- php 生成验证码
- 由crontab执行expect脚本问题引发的--crontab环境变量问题
- udev(八):实战:使用udevadm修改usb优盘在/dev下的名字
- udev(七):/dev、devfs、 udev和sysfs之间的关系
- udev(六):udev
- 检索 COM 类工厂中 CLSID 为{00024500-0000-0000-C000-000000000046} 的组件时失败 解决方法
- udev(五):devfs
- 电源芯片厂家
- 在ppt中插入flash帮助文档
- udev(四):设备的命名问题
- 终于开始了
- udev(三):主次设备号
- Action接收参数的3种方式(属性,域模型,模型驱动,struts2.1.8)