zoukankan      html  css  js  c++  java
  • deferred initcalls与模块化

    deferred initcalls与模块化

    有两个技术可以加快kernel的启动速度:
    1、deferred initcalls
    2、模块化
    它们的思想类似,都是将非必要的模块初始化推迟到内核启动之后。
    但实现方法有所差别。

    deferred initcalls需要修改内核模块代码,将:
    module_init(foo_init)
    修改为:
    deferred_module_init(foo_init)
    主要初始化执行完成之后,执行:
    cat /proc/deferred_initcalls
    会将所有的deferred init模块全部初始化。

    模块化是将内核模块从built-in修改为模块。
    方法是menuconfig中,对应的模块选择为m。
    对应的模块会生成一个.ko文件,将会被包含在os中。
    内核启动之后,可以通过命令:
    insmod
    挂载对应模块。

    deferred initcall:
    优点:
    1、使用方便,模块仍然是built-in。
    2、内核模块修改不需要重新生成os。
    3、有些模块不能,或不易被模块化,可以用deferred init实现初始化延迟。
    缺点:
    1、需要修改内核代码。
    2、deferred init模块的加载顺序不容易控制。

    模块化:
    优点:
    1、不用修改内核代码。
    2、因为是单个模块主动加载,模块加载顺序容易控制,可以根据需要加载相应的模块。例如,某个程序启动之前去加载其所需要的模块。
    缺点:
    1、内核模块的修改,需要导致os的变动。需要重新生成os,或者手动替换对应目录下的ko文件。
    2、涉及到的修改较多,还要考虑模块依赖。
    3、如果使用了版本控制工具,会产生多次提及,内核、os等。

    参考:
    1. http://elinux.org/Deferred_Initcalls

  • 相关阅读:
    select()函数用法二
    fcntl函数的用法总结
    O_NONBLOCK与O_NDELAY有何不同?
    struct termios结构体详解
    select()函数用法一
    linux下的struct sigaction
    sigaction 用法实例
    nand flash 的oob 及坏块管理
    wifi两种工作模式
    UBIFS文件系统简介 与 利用mkfs.ubifs和ubinize两个工具制作UBI镜像 (完整理解版本)
  • 原文地址:https://www.cnblogs.com/suncoolcat/p/3331251.html
Copyright © 2011-2022 走看看