Chinaunix首页 | 论坛 | 博客
  • 博客访问: 494249
  • 博文数量: 135
  • 博客积分: 3010
  • 博客等级: 中校
  • 技术积分: 905
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-24 19:31
文章分类

全部博文(135)

文章存档

2010年(135)

我的朋友

分类: LINUX

2010-08-17 14:58:18

Udev 基本工作原理 

  Udev相关的文章很多,本文的主要目的不是提供一个完整的教学文档,对其使用,只是给出网上现有的主要资源。着重分析其基本工作原理连同在使用中碰到的一些README文档没有明确说明的问题。

1         基本概念
udev
文档系统是针对2.6内核,提供一个基于用户空间的动态设备节点管理和命名的解决方案,网上关于为什么要使用udev文档系统,udev文档系统和devfs文档系统的比较,等等的文章已很多了,假如您想了解这方面的内容,请直接搜索相关的关键字。

udev的官方网址:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
src code
的下载地址:

此外,关于udevrules规则的撰写,网上也有很多文章,假如要获得最准确的版本,能够在src code的代码树里找到writing_udev_rules的帮助文档,这个文档其实没有逐条介绍rules的任何关键字,能够结合man udev  udev自带的一些rules文档来理解如何撰写您所需要的规则文档。

2         安装和启动

2.1        安装
Udev
的代码树里的版本很多,我下载的最新的版本是udev-117,配合2.6.21版本的内核能够正常使用。网上很多文章介绍的可能都是稍微早期一些的版本,有些步骤包括udevREADME文档似乎描述的不是很准确。
基本上这个版本的udev需要注意的是,安装时只需要udevdudevadm两个文档,其他必需的包括udevtrigger等只是udevadm的一个符号链接。udevstart不是必需的。当然Udev.conf等配置文档还是相同。

2.2        启动
您能够在启动脚本中用udevd –d 参数启动udev文档系统的守护进程,然后使用udevtriggerbuildin的设备驱动的节点创建出来,以后模块插入移除时节点的管理会自动处理。


能够正常加载udev的前提,基本包括如下操作:
       
配置路径变量
      
加载sysfs文档系统
      
加载一个基于ram的可写的/dev目录(其实,只要提供一个可写的目录即可,目录路径本身也是能够配置的)
    /dev
目录下需要有已创建好的 console节点和null节点
脚本类似:
# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
# mount proc and devpts filesystem
/bin/mount -a
mknod /dev/console c 5 1
mknod /dev/null c 1 3
/sbin/udevd -d
/sbin/udevtrigger
Mount
使用的fstab文档类似:
none                    /tmp                    ramfs   defaults        0 0
udev                    /dev                    ramfs   defaults        0 0
none                    /proc                   proc    defaults        0 0
sysfs                   /sys                    sysfs   defaults        0 0
当然,您的系统上可能还会需要预先创建一些其他的设备节点,比如串口的ttySx 才能正常启动shell,完成以上脚本的执行,那就要看具体情况了。

3         使用中的一些问题的思考

3.1        关于规则的多次匹配
帮助文档中说一个设备能够被多条规则多次匹配,但是,需要明确的一点是:
多次匹配只能添加多个Symlink,不能创建多个Name
例如:
KERNEL=="mtdblock4", NAME+="mtdbb4"
KERNEL=="mtdblock4", NAME+="%k"
就只会创建 /dev/mtdbb4 而不会创建/dev/mtdblock4
而类似:

KERNEL=="mtdblock4", NAME+="mtdbb4"
KERNEL=="mtdblock4", SYMLINK+="mtdbb4link"
是能够正常工作的。

3.2        关于udev.conf的语法
可能大家会发现,似乎没有什么周详文档描述udev.conf的写法,实际上从udevd的代码里能够看出:
udev.conf
文档里面只会解析这三个参数:
udev_root 
定义udev的目录路径
udev_rules 
定义udev的规则文档的目录路径
udev_log 
定义log的级别
也许以后会添加一些别的配置参数?

4         基本工作原理方面的问题
这部分主要是分析了一下udevsource code,对一些自己关心的问题的理解

4

阅读(1792) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-20 10:48:14

很好啊, 收藏了 推荐一个博客,提供很多免费电子书下载: http://free-ebooks.appspot.com