openwrt程序之udev
2015-08-04 21:05
393 查看
转自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解析域名一样去给设备指定一个有意义的名称。
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解析域名一样去给设备指定一个有意义的名称。
相关文章推荐
- linux c 简单端口扫描程序
- LoadRunner监控Linux的步骤
- asmack在openfire中发送自定义属性、节点的消息
- Using XILINX IP Core Block RAM (3)
- hdu 5348 MZL's endless loop
- 微博CacheService架构解析
- linux MySQL相关问题
- Tomcat开发Servlet之NoClassFoundException解决方法
- Hadoop之集群设置
- Uber高可用消息系统构建--总结自InfoQ
- [OpenCV]第一篇学习日记——环境配置
- 新浪微博第三代技术体系--总结自InfoQ相关内容
- Vim 中使用cscope
- OpenGL ES 剪裁
- 杀死指定的一个shell脚本
- shell脚本学习笔记之文本处理命令
- OpenWebGlobe源码剖析2:Closure Library
- fast_nginx_module二次开发_结合imageMagick
- C 语言:返回两个数组中第一个相同元素的指针(我用了loop 、goto loop标签)
- WAMPServer2.5中升级PHP/Apache