base之modules

来源:互联网 发布:用户画像需要哪些数据 编辑:程序博客网 时间:2024/05/17 23:07

因为想知道poky的base版本在启动阶段加载了哪些驱动模块,所以花时间研究了一下。

1.通过ipkg管理系统查阅信息(以rfcomm.ko为例):

"/usr/lib/ipkg/info/kernel-module-rfcomm.control"

"/usr/lib/ipkg/info/kernel-module-rfcomm.list"

"/usr/lib/ipkg/info/kernel-module-rfcomm.postinst"

"/usr/lib/ipkg/info/kernel-module-rfcomm.postrm"

 

从"status"文件中查阅到:

status为"install ok installed"说明postinst执行成功,通过"build/tmp/cross/bin/arm-poky-linux-gnueabi-depmod-2.6"在/lib/modules/`uname -r`下建立了相关的dep及map信息。

 

2.关于update-modules

它是"/usr/sbin"下一可执行脚本程序

主要完成的工作就是把"/etc/modutils"目录下的"*.conf"文件的内容集中到"/etc/modules.conf",把其他文件的内容集中到"/etc/modules"。

 

系统在启动阶段会调用"/etc/rcS.d/S20modutils.sh"

即根据"/etc/modules"中的内容自动加载驱动模块。可见通过update-modules工具可以实现模块在启动阶段的自动加载,当然了事前还必须在"/etc/modutils"目录下放置相应文件,譬如"/etc/modutils/rfcomm"。

 

3.关于rootfs在板上第一次启动的初始化问题

poky环境下构建出来的rootfs在板上第一次启动,调用到"/etc/rcS.d/S20modutils.sh"时,"/etc/modules"还不存在,因此那些在构建时被指定为自动加载模式的驱动模块在这个时候失去了正常的加载机会,怎么办???(惊恐ing)。

呵呵,update-modules中有一段代码需要在这时补充说明一下:

这里的"first_time"用来定义构建出来的rootfs第一次在板子上启动的时刻,因为"/etc/modules"必定会在第一次启动时创建出来,而之后的每次启动,"/etc/modules"都是已经存在的了,"first_time"必不为"1"。这段代码就是专为第一次启动的初始化问题设计的。但是系统如何保证在第一次启动的时候必定会调用到update-modules呢? 这个是由update-modules这个软件包本身来提供支持的。

"/usr/lib/ipkg/info/update-modules.postinst"

再看"status"文件中的信息

显然系统在执行到"/etc/rcS.d/S98configure"时就会调用update-modules。一切尽在不言中。。。

 

4.关于"/etc/modutils"和"/etc/modprobe.d"

"/meta/packages/linux/linux-openmoko_2.6.22.5.bb"中定义了一些变量

"/meta/classes/kernel.bbclass"中也定义了一些变量

"module_autoload_*"表示为这些模块提供自动加载功能。

"module_conf_*"表示为这些模块提供配置文件。

对于autoload:在"/etc/modutils"目录下创建相应文件并构造"postinst"。

对于modconf:如果内核主版本为2.6,则在"/etc/modprobe.d"下创建".conf"文件;否则在"/etc/modutils"下创建".conf"文件。原因在分析"module-init-tools-3.2.2"软件包的"modprobe.c"源码后可知:

modprobe参考了"/lib/modules"目录下的"modules.alias"、"modules.symbols"。

modprobe参考了"/lib/modules"目录下的"modules.dep"。

modprobe参考了"/etc/modprobe.conf"文件及"/etc/modprobe.d"目录。

原创粉丝点击