Init.h中有相关initcall的启动次序,在system.map中可看出具体的__initcall指针的前后次序

#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)

module_init在的启动序号为6,它的展开后就是__define_initcall("6",fn,6)

#definedevice_initcall(fn) __define_initcall("6",fn,6)

#define__initcall(fn) device_initcall(fn)

#definemodule_init(x) __initcall(x);

Kernel通过调用do_initcalls(void)加载模块,具体流程如下图:

static void__init do_initcalls(void)

{

initcall_t*fn;

for (fn =__early_initcall_end; fn < __initcall_end; fn++)

do_one_initcall(*fn);

/* Makesure there is no pending stuff from the initcall sequence */

flush_scheduled_work();

}

因此驱动模块在Kernel启动过程中的启动次序是非常靠后的

具体的每个驱动的启动次序可以从system.map看出,特别对于同一个优先级的各类驱动:

c003288ct __initcall_i2c_init2

c00328b0 t__initcall_video_early_init3

c00328b4 t__initcall_video2_early_init3

c00328b8t __initcall_aml_i2c_init3

c0032c18t __initcall_i2c_dev_init6

c0032c28 t__initcall_videodev_init6

c0032c30t __initcall_v4l2_i2c_drv_init6

c0032c34t __initcall_v4l2_i2c_drv_init6

c0032d24 t__initcall_video_init6

c0032d28 t__initcall_video2_init6

对于同一级别的 __initcall的次序 主要由MakeFile中.o文件的链接次序决定,具体看Kernel下的主Makefile ---- Build vmlinux

以及kernel/driver 下的obj-y

/* end */

转载于:https://www.cnblogs.com/Ph-one/p/6097953.html

Kernel启动时 驱动是如何加载的module_init,加载的次序如何;略见本文相关推荐

  1. springboot项目启动时提示错误: 找不到或无法加载主类

    问题: springboot项目启动时提示错误: 找不到或无法加载主类 解决方法:

  2. Tomcat启动时,webapps目录下的项目没有加载

    Tomcat启动时,webapps目录下的项目没有加载 1)部署方式 直接将编译后的CLASS文件拷贝到Tomcat的webapps目录. 2)Web项目不加载原因 将CLASS文件拷贝到webapp ...

  3. 服务器启动时Webapp的web.xml中配置的加载顺序

    一 1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Ser ...

  4. kernel启动优化

     由于老衲最近在做车载linux kernel优化,特别是对启动时间的优化,从一开始的漫无目的,到现在的算是了解的过程,下了很大功夫. 特别是优化到最后2s以内,每10ms的优化太让人吐血了.杂话 ...

  5. spring在项目启动时就执行特定方法

    如何在项目启动时就执行特定方法 1. 方法上加注解@PostConstruct @Compant public class InitDemo{@PostConstructpublic void ini ...

  6. selenium中启动firefox浏览器时设置代理、加载配置文件、加载某个插件以及firefox没有安装在默认路径下的代码写法

    selenium 中启动firefox浏览器的六种方式,所用的是java 1.如果浏览器没有安装在默认路径下,则用 System.setProperty("Webdriver.firefox ...

  7. struts启动时加载_iOS优化篇之App启动时间优化

    原文:橘子不酸丶http://www.zyiner.com/article/5 前言 最近由于体验感觉我们的app启动时间过长,因此做了APP的启动优化.本次优化主要从三个方面来做了启动时间的优化,m ...

  8. 启动java服务时刷新缓存_Spring java项目对外提供服务和java进程启动时bean,内部缓存加载的先后关系?...

    Spring java项目对外提供服务有这么几种,一种是web服务,譬如tomcat,一种是RPC服务,譬如dubbo,thrift.总的来说就是对外开放某个/些端口,接收请求. Spring工程项目 ...

  9. Tomcat启动时自动加载Servlet

    转自:http://zhaoyongpan.blog.51cto.com/2714930/676239 想实现这样的功能: 1.   Tomcat启动时随即启动Servlet; 2.   Servle ...

  10. java中项目启动时加载_如何在项目启动时,加载或解析某配置文件

    在web项目中有很多时候需要在项目启动时就执行一些方法,而且只需要执行一次,比如:加载解析自定义的配置文件.初始化数据库信息等等,在项目启动时就直接执行一些方法,可以减少很多繁琐的操作. 在工作中遇到 ...

最新文章

  1. OpenCV 高级API:TextDetectionModel和TextRecognitionModel
  2. 关于性能测试的通俗解释
  3. php5.4 windows2003,PHP实战:Windows2003下php5.4安装配置教程(IIS)
  4. 文档安全管理系统服务器地址是什么,一种文档安全管理系统登录方法及装置
  5. layui 行变灰_layui table设置某一行的字体颜色方法
  6. 程序员如何在 HTTPS 中高效配置通配符证书?| 技术头条
  7. easyui下拉多选框的创建、获取值、赋值
  8. 前端每日实战:47# 视频演示如何用纯 CSS 创作一个蝴蝶标本展示框
  9. Windows Phone 7开发人员向导已经发布
  10. Avro, Protocol Buffers 、Thrift的联系与区别
  11. SSM开发环境的搭建(方式二)
  12. 「2021年」国内主流短信验证码平台综合评测
  13. html下拉菜单hover,css用hover制作下拉菜单
  14. 丢失的遗传力--Missing heritability
  15. 小程序全局悬浮窗_微信小程序中悬浮窗功能的实现代码
  16. 非洲Affrike单词
  17. 音频文件编辑 android,音频剪辑编辑APP
  18. 信息技术基础2(课程笔记)
  19. Python 屏幕亮度的调节与息屏
  20. 中小企业如何危中求机?接住这套私域流量低成本解决方案!

热门文章

  1. markdown编辑器------------编辑方法
  2. 如何实现BootStrapTable的动态表格
  3. 为什么设置 height 100% 不起作用
  4. windows上java调用gdal.jar报错
  5. VSCode 插件离线安装方法(转载)
  6. 44. 容器的成员函数优先于同名的算法
  7. mysql 存储过程使用参数_mysql 存储过程 使用参数
  8. ubuntu终端运行python找不到模块_在ubuntu里直接通过终端编写运行python程序
  9. svn 同步 linux,linux SVN 中 配置钩子 实现 线上项目同步
  10. c语言自动化课题设计,自动化专业C语言程序设计课堂教学方案设计和实践.doc