当前位置:  技术问答>linux和unix

求教:linux2.6 启动时驱动加载顺序是如何的?

    来源: 互联网  发布时间:2017-01-21

    本文导语:  向各位请假一下linux2.6在启动的过程中驱动的加载的顺序是在哪里定义,如果更改这些启动顺序? 最近在调试一个键盘驱动,通过启动时的打印信息发现键盘驱动的加载早于I2C驱动的加载,而键盘驱动里需要调用I2C...

向各位请假一下linux2.6在启动的过程中驱动的加载的顺序是在哪里定义,如果更改这些启动顺序?

最近在调试一个键盘驱动,通过启动时的打印信息发现键盘驱动的加载早于I2C驱动的加载,而键盘驱动里需要调用I2C读取键盘信息,如果调整驱动的加载顺序让I2C先于键盘加载呢?

|
阅读include/linux/init.h 头文件, 参考: http://blogold.chinaunix.net/u2/72751/showart_1074704.html

|
/lib/modules/2.6.35-24-generic/modules.dep

这个文件里面有依赖关系,如果你的驱动是在磁盘里面,用modprobe来加载的话,正常的话这个配置文件depmod命令会自动生成一个正确的。不过你也可以手工自己改一下。

驱动在initrd image里面的话,看看里面有没有modules.dep 文件  ,或者一下脚本里面insmod顺序

|
我猜想keybd_attach_adapter应该只是作了一个注册动作,并没有真正调用I2C的功能,而且驱动本身没有执行(你作了内核线程除外)什么动作,都需要外部事件来驱动它去作,所以初始化的时候并没有什么问题。而到你真正相应操作的时候I2C驱动也已经加载了。

|
如果想把模块的加载提前,可以把module_init改为core_initcall,这样此模块的初始化函数就会在内核初始化时调用,比一般模块的初始化要早。我把自己的i2c模块这么提前是没有问题的。

在/include/linux/init.h中定义了各种初始化的优先级:
/*
 * Early initcalls run before initializing SMP.
 *
 * Only for built-in code, not modules.
 */
#define early_initcall(fn) __define_initcall("early",fn,early)

/*
 * A "pure" initcall has no dependencies on anything else, and purely
 * initializes variables that couldn't be statically initialized.
 *
 * This only exists for built-in code, not for modules.
 */
#define pure_initcall(fn) __define_initcall("0",fn,0)

#define core_initcall(fn) __define_initcall("1",fn,1)
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn) __define_initcall("3",fn,3)
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
#define subsys_initcall(fn) __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn) __define_initcall("5",fn,5)
#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn) __define_initcall("6",fn,6)
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
#define late_initcall(fn) __define_initcall("7",fn,7)
#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 求教求教,shell问题...各位大哥,帮忙下
  • 400分求教: 求教一简单问题,现场给分
  • 高分求教:如何将JAVA文件(.class)制作成可执行文件(.exe),求教方法或工具推荐
  • 急!!求教linux命令的使用:统计出/bin目录中文件的个数,追加到文件filea的结尾
  • 求教:在UNIX中查找包含指定文字的文件名
  • 小白菜求教linux大鸟
  • ubuntu,加载驱动问题,求教在线等待!!! iis7站长之家
  • 初学者有问题求教!
  • 各路高手请进!高分求教,非常着急!
  • 高分求教的问题(关于SendMail设置)
  • 简单问题:从sun网站上当了个jdk1.4b3,bin后缀,求教怎么安装
  • 求教:知道当前时间,如何得到N天前的时间 ?
  • 求教:switch(condition)中的condition 必须为整型吗?
  • Linux远程访问的问题,高分求教:)
  • 求教:在Linux下如何做代理服务器?
  • 紧急求教!究竟Java里面有没有相当于C++的CPOINT的类阿?
  • 求教JAVA中XML解析问题
  • 50分求教,在JSP里如何将String转换成Double
  • 我刚装好,是不是需要配制环境变量?求教。
  • 400分求教JAVA皮肤的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3