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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值