由于在下水平相当有限,不当之处,还望大家批评指正^_^
基于Linux 2.6.32
include\asm-generic\Vmlinux.lds.h中有如下定义:
这等于是安排了名称如.initcall<level>[s].init的一系列section的顺序,level越小,越靠前。
符号__initcall_start记录了这片区域的开始,__initcall_end符号记录了这片区域的结束。
__early_initcall_end则将这片区域更进一步分成了两段。
#define INITCALLS \
*(.initcallearly.init) \
VMLINUX_SYMBOL(__early_initcall_end) = .; \
*(.initcall0.init) \
*(.initcall0s.init) \
*(.initcall1.init) \
*(.initcall1s.init) \
*(.in

本文探讨Linux 2.6.32内核的初始化过程,重点关注initcall机制。通过分析Vmlinux.lds.h文件中的section定义,了解不同级别initcall的执行顺序。以pci_driver_init函数为例,解释postcore_initcall等宏如何将函数插入相应section,并在kernel_init函数中按level顺序调用,完成内核初始化。
最低0.47元/天 解锁文章
282

被折叠的 条评论
为什么被折叠?



