解读udev的几个作用

来源:互联网 发布:js embed 播放 停止 编辑:程序博客网 时间:2024/06/03 16:46

解读udev的几个作用

zz:http://blog.csdn.net/fengying765/article/details/6995313

     udev是一种工具,它能够根据系统中的硬件设备的状况动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下,使用udev后,在/dev下面只包含系统中真实存在的设备。它于硬件平台无关的,位于用户空间,需要内核sysfs和tmpfs的支持,sysfs为udev提供设备入口和uevent通道,tmpfs为udev设备文件提供存放空间。

    在 sysfs 下的很多 kobject 下都有 uevent 属性,它主要用于内核与 udev 之间的一个通信接口;从 udev 本身与内核的通信接口 netlink 协议套接字来说,它并不需要知道设备的 uevent 属性文件,但多了 uevent 这样一个接口,可用于 udevmonitor 通过内核向 udevd发送消息,也可用于检查设备本身所支持的 netlink 消息上的环境变量,这个特性一般用于开发人员调试 udev 规则文件, udevtrigger 这个调试工具本身就是以写各设备的 uevent 属性文件实现的。

udev具有如下几个作用:

1. 内核设备事件管理

     * 启动初始化时, /dev目录使用tmpfs挂载,然后, Udev拷贝/lib/udev/devices 的静态设备节点到 /dev 目录.
     * Udev守护进程开始运行,为所有连接到系统的设备收集来自内核的uevents.
     * Udev守护进程解析uevent数据,并且对/etc/udev/rules.d中指定的规则进行匹配.
     * 根据指定的规则为设备创建设备节点和符号链接.
     * Udev守护进程读取/etc/udev/rules.d/*.rules 中的规则并且保存到内存里面.
     * Udev接收接收inotify事件,如果某个规则发生了改变,读取这些改变并更新内存副本. 

2. 管理设备节点的权限

     在规则文件(*.rules)中利用关键子OWNER, GROUP, MODE为设备设定权限。例如“

     KERNEL=="sda", NAME="my_root_disk", MODE="0660"

     KERNEL 是匹配键,NAME 和 MODE 是赋值键。

     这条规则的意思是:如果有一个设备的内核设备名称为 sda,则该条件生效,执行后面的赋值:

     在 /dev下产生一个名为 my_root_disk的设备文件,并把设备文件的权限设为 0660。

     例如:/etc/udev/rules.d/10-local.rules

     KERNEL=="event*", NAME="input/%k", MODE:="0660", GROUP:="input"
     KERNEL=="mouse*", NAME="input/%k", MODE:="0660", GROUP:="input"
     KERNEL=="mice*", NAME="input/%k", MODE:="0660", GROUP:="input"

     这时插拔一下usb鼠标就会发现/dev/input/mousex以及和它相关的/dev/input/eventx的所属组变成了“input”,而不是默认的“root”。

3. 在/dev中创建额外的符号链接

     插拔移动设备将在/dev目录下创建/删除设备的符号链接,例如:

     # ls /dev/sda1

4. 重命名的网络接口的系统软件

     创建一个rules文件/etc/udev/rules/10-local.rules,如下所示:

     DRIVER=“rt3070sta”,NAME=“wlan0”

     其中“DRIVER”为无线网络驱动的名称,“NAME”为重命名后的无线网络名称


     还可以利用nameif重命名网络接口

     nameif ra0 74:F0:6D:4E:89:3A

     其中,“ra0” 为重命名后的无线网络名称,“74:F0:6D:4E:89:3A” 无线网络的mac地址

5. 动态分配主/次设备号

     传统的devfs不能动态分配major和minor的值,而major和minor非常有限,很快就会用完了。udev能够像DHCP动态分配IP地址一样去动态分配major和minor。

6.提供设备命名持久化的机制

    传统设备命名方式不具直观性,像/dev/hda1这样的名字肯定没有boot_disk这样的名字直观。udev能够像DNS解析域名一样去给设备指定一个有意义的名称。


0 0
原创粉丝点击