快速业务通道

精通init ramfs构建step by step (八)

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-11

二十五、udev的coldplug模式

  内核在启动时已经检测到了系统的硬件设备,并把硬件设备信息通过sysfs内核虚拟文件系统导出.sysfs文件系统由系统初始化脚本挂载到/sys上.udev扫描sysfs文件系统,根据硬件设备信息生成热插拔(hotplug)事件,udev再读取这些事件,生成对应的硬件设备文件.没有实际的硬件插拔动作,这一过程被称为coldplug.我们的init ramfs就是利用这一机制,加载硬件设备的驱动程序模块.

  udev完成coldplug操作,需要下面三个程序:

  udevd——作为deamon,记录hotplug事件,然后排队后再发送给udev,避免事件冲突(race conditions).

  udevtrigger——扫描sysfs文件系统,生成相应的硬件设备hotplug事件.

  udevsettle——查看udev事件队列,等队列内事件全部处理完毕才退出.

  在init ramfs的init脚本中可以执行下面的语句实现coldplug功能:

  mkdir -p /dev/.udev/db

  udevd --daemon

  mkdir -p /dev/.udev/queue

  udevtrigger

  udevsettle

  许多文档提到的在udevd --daemon 命令前要执行

  echo > /proc/sys/kernel/hotplug

  命令,经验证,在我们的init ramfs环境下的coldplug功能中并不需要.

  二十六、试验:用udev自动加载设备驱动模块

  了解了udev的coldplug的机理,我们就试验一下用udev自动加载设备驱动模块,并生成硬件设备文件.

  (1)从 /sbin 目录下拷贝udevd、udevtrigger、udevsettle程序到image目录下的sbin目录下,并用ldd命令找到它们所需要的动态库文件,拷贝到image目录下的lib目录下.

  (2)修改init脚本,增加coldplug功能:


注意:在切换到真正根文件系统前,要把udevd进程杀掉,否则会和真正根文件系统中的udev脚本的执行相冲突.这就是上面killall udevd 语句的作用.

  (3)编写udev规则文件

  规则文件是udev的灵魂,没有规则文件,udev无法自动加载硬件设备的驱动模块.为了简单,我们直接使用CLFS中的40-modprobe.rules,把它拷贝到image目录下的etc/udev/rules.d目录.有关udev的规则文件编写,已超出了本文的范围,后续我有可能专文描述. 拥有帝国一切,皆有可能。欢迎访问phome.net


注意:上面的

  ENV{MODALIAS}=="?*", RUN ="/sbin/modprobe $env{MODALIAS}"

  语句是实现自动加载硬件设备驱动模块功能的关键,它根据sysfs文件系统中记录的模块aliases数据,用modprobe命令加载对应的内核模块.有关模块aliases的进一步说明,可参考CLFS手册(CLFS-1.0.0-x86)中的11.5.2.4. Module Loading一节的描述.

  (4)拷贝modprobe命令

  前一节提到过,busybox的modprobe命令不能正常使用,我们需要拷贝 /sbin 目录下的modprobe命令到image目录下的sbin目录,供udev加载内核模块使用.再用ldd命令检查一下 /sbin/modprobe 命令所需的动态库文件,如果有则拷贝到image/lib目录下.(我的检查结果是,除了libc6外,不需要其他动态库,不需要拷贝)

  好了,重新生成init ramfs,启动CLFS系统,init ramfs能够自动加载硬盘设备的驱动模块,系统顺利地从init ramfs切换到了真正的CLFS的根文件系统.


拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号