2011-7-30 13:56:27
)udev
1)udev与硬件平台无关,属于用户空间的进程,它脱离驱动层的关联,而建立在操作系统之上,只要修改配置文件使之生效,无需重启操作系统.
2)udev需要内核sysfs和tmpfs的支持
3)udev已经取代devfs和hotplus,udev通过netlink直接监听这些事件.
注:
这里的hotplus主要负责在线和脱机情况下为硬件定位和安装驱动程序模块.
在早期的发行中常使用一个外部二进制文件/sbin/hotplug来将设备状态的改变通知Udev.
二)sysfs
1)sysfs是一个建立在内存基础上的文件系统.它建立在内核对象kobjects的基础上,而kobjects是内核2.6新添加的功能.
2)sysfs是包含一系列不同层次的小文件,每一个小文件包含的信息极少.
三)设备节点插入移出的工作流程:
1)当设备插入或移出系统的时候,kernel会向udev守护进程发送事件中的参数和sysfs中的信息.
2)udev守护进程加载适当的驱动程序,并创建/dev/目录下的结点.
3)udev通过根据/etc/udev/rules.d下的规则,把事件发送给HAL.
注:HAL位于操作系统和驱动程序之上,是一个运行于用户空间的服务程序.
4)HAL创建关于这个设备的XML描述.
5)通过Dbus通知相应的应用程序.比如:Natuilus.
注:Dbus类似于系统总线,主要用于进程间通信.
四)创建自定义的udev规则
1)测试nvram,这个nvram模块在rules.d中有定义,nvram被划分为其它杂项
加载nvram模块
modprobe nvram
查看/dev/nvram设备节点
ls -l /dev/nvram
crw-rw---- 1 root root 10, 144 2010-01-31 04:56 /dev/nvram
卸载nvram模块
rmmod nvram
查看/dev/nvram设备节点
ls -l /dev/nvram
ls: cannot access /dev/nvram: No such file or directory
2)新增加一个自定义的规则,规则文件名格式:
数字-自定义模块名.rules
注:
数字代表优先级,数字越小,优先级就越高.优先级高的规则先执行,忽略同名的其它名字,但不忽略链接.
数字-文件名.rules
cat << EOF > /etc/udev/rules.d/25-cmos.rules
> KERNEL=="nvram", MODE="0660", NAME="cmos"
> EOF
加载nvram模块
modprobe nvram
查看/dev/cmos设备节点
ls -l /dev/cmos
crw-rw---- 1 root root 10, 144 2010-01-31 05:13 /dev/cmos
注:
KERNEL域会让udev端口监听程序去匹配内核模式名nvram.
MODE域代表产生设备节点的权限.
NAME域代表产生设备节点的名字.