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 */

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

  1. uboot启动完成,kernel启动时lcd屏…

    先说说开发环境吧: 1 内核:linux2.6.xx 2 uboot:买开发板带的 注释:在最后我又添加了问题得到完美解决的办法. 问题:uboot启动完成,kernel启动时lcd屏幕出现杂色(比如 ...

  2. uboot启动完成,kernel启动时lcd屏幕出现杂色解决办法

    先说说开发环境吧: 1 内核:linux2.6.xx 2 uboot:买开发板带的 注释:在最后我又添加了问题得到完美解决的办法. 问题:uboot启动完成,kernel启动时lcd屏幕出现杂色(比如 ...

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

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

  4. 服务器启动时Webapp的web.xml中配置的加载顺序(转载)

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

  5. tomcat启动时自动加载一个类 MyServletContextListener

    目的: 我们知道在tomcat启动后,需要页面请求进行驱动来执行操作接而响应.我们希望在tomcat启动的时候能够自动运行一个后台线程,以处理我们需要的一些操作.因此需要tomcat启动时就自动加载一 ...

  6. Servlet在启动时加载的tomcat源码(原创)

    tomcat 8.0.36 知识点: 通过配置loadOnStartup可以设置Servlet是否在Tomcat启动时加载,以及按值大小进行有序加载,其最小有效值为0,最大有效值为Integer.MA ...

  7. Tomcat启动时自动加载Servlet

    1.想做一个服务启动时自动启动一不停止的获取订阅功能 2.之前是做一个Jsp页面请求servlet来触发方法 3.现在实现Tomcat启动时自动加载Servlet 1.Tomcat中启动Servlet ...

  8. 如何让openvpn在windows启动时自动加载

    在非常需要vpn的人群中,他们几乎一整天都连接着vpn,但是每次开机都要连接vpn的过程有时候比较繁琐对于新手而言.这篇文章主要是说明如何在windows启动时自动加载openvpn自动连接,该教程适 ...

  9. Tomcat启动时自动加载一个类

    有时候在开发Web应用的时候,需要tomcat启动后自动加载一个用户的类,执行一些初始化方法,如从数据库中加载业务字典到内存中,因此需要在tomcat启动时就自动加载一个类,或运行一个类的方法. 可以 ...

随机推荐

  1. PostgreSQL中字符串相关问题

    PostgreSQL的字符串类型有character.character varying和text的值.在使用character类型的时候, 它有自动填充空白的潜在影响,特别是在其它数据库(MySQL ...

  2. 反射认识_03_改变成员变量Fields

    包01:package ReflectionChange; public class ReflectionPoint_AB { String str1="access"; Stri ...

  3. 取客户的银行帐号SQL

    SELECT ibybanks.bank_name, --银行 ibybanks.bank_branch_name, --分行 ibybanks.bank_account_num_electronic ...

  4. struts2校验の实现

    1.JSP <%@ page contentType="text/html; charset=utf-8" language="java" errorPa ...

  5. linux中关于php和nginx用户权限的一些东西

    当我们启动nginx之后, 会有两个nginx进程(一个是master, 一个是worker). master的用户身份是root, worker用户的身份是nobody. 在nginx中可以修改 w ...

  6. Native OR WebApp ?

    前两天刚好和一帮产品同学聊过,特指一个APP里面的各页面应该怎么做,大家的总结如下,原理一样,关键是了解Native和Web各自的优劣势:1. 偏交互的Native,偏浏览的Web:交互指复杂操作,输 ...

  7. PHP人民币金额数字转中文大写的函数

    <?php header("Content-Type:text/html;charset=utf-8"); error_reporting(2); function cny( ...

  8. ubuntu修改文件权限记录

    查看文件权限的命令: 在终端输入: ls -l xxx.xxx (xxx.xxx是文件名) 那么就会出现相类似的信息,主要都是这些: -rw-rw-r-- 一共有10位数 其中: 最前面那个 - 代表 ...

  9. JSP01

    <%@page pageEncoding="UTF-8"    //page:设置此文件的编码 contentType="text/html;charset=utf ...

  10. XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化

    XP+devOps开发模式与scrum敏捷开发对比,docker虚拟化 我们现在用的就是典型的XP+devOps模式,已经放弃scrum了 现在还很多公司弄docker虚拟化docker非常复杂,当然 ...