路径:linux-3.10.x\init\main.c start_kernel()-->rest_init()-->kernel_init()-->kernel_init_freeable()-->do_basic_setup()-->do_initcalls()-->do_initcall_level()-->do_one_initcall() do_initcalls()将按顺序从由__initcall_start开始,到__initcall_end结束的section中以函数指针的形式取出这...
do_initcall_level(level); } 函数中内容比较少,是一个for循环结构,循环的对象是initcall_levels数组,该数组用于描述初始化调用的级别,定义如下: externinitcall_t__initcall_start[]; externinitcall_t__initcall0_start[]; externinitcall_t__initcall1_start[]; externinitcall_t__initcall2_start[]; externin...
其中initcall_t 是一个函数指针类型: 而属性 __attribute__((__section__())) 则表示把对象放在一个这个由括号中的名称所指代的section中。 1) __define_initcall(level,fn)的作用就是指示编译器把一些初始化函数 的指针(即:函数起始地址)按照顺序放置一个名为 .initcall.init 的 section中,这个section又被...
#define __define_initcall(level,fn) \ static initcall_t __initcall_##fn __attribute_used__ \ __attribute__((__section__(".initcall" level ".init"))) = fn #define core_initcall(fn) __define_initcall("1",fn) #define postcore_initcall(fn) __define_initcall("2",fn) #define arch...
[调用路径:start_kernel --> rest_init --> kernel_init --> kernel_init_freeable --> do_basic_setup --> do_initcalls --> do_initcall_level --> do_one_initcall --> populate_rootfs --> unpack_to_rootfs],在内存中构造出根文件系统结构,mkbootfs工具是Android自己实现的,支持的功能也比cpio弱...
/bin/sh" to "/nix/store/ldyxgarwyhqfvsck38g0s8caxqgmxcfk-bash-5.1-p16/bin/sh" dtbs-with-symbols> scripts/generate_initcall_order.pl: interpreter directive changed from "#!/usr/bin/env perl" to "/nix/store/7bw13n6m84ck1r61kzalwnxj23r939ca-perl-5.34.1/bin/perl" dtbs-with-symbols>...
do_initcall_level(level); } 函数中内容比较少,是一个for循环结构,循环的对象是initcall_levels数组,该数组用于描述初始化调用的级别,定义如下: extern initcall_t __initcall_start[]; extern initcall_t __initcall0_start[]; extern initcall_t __initcall1_start[]; ...
__initcall_start是在 arch目录中的相关CPU中的vmlinux.lds文件指定,如i386中位于arch/i386/vmlinux.lds中,至于在__initcall_start和__initcall_end之间的是由函数声明__init指定 2. 察看/arch/i386/vmlinux.lds,发现一段代码 __initcall_start = .; ...
__attribute__((__section__(".initcall"level".init"))) =fn#definearch_initcall(fn) __define_initcall("3",fn,3) 所以,customize_machine 被链接到了 ".initcall3.init" 段, 会被 do_initcalls执行。
#define fs_initcall(fn) __define_initcall("5",fn) #define device_initcall(fn) __define_initcall("6",fn) #define late_initcall(fn) __define_initcall("7",fn) 其中 #define __define_initcall(level,fn) \ static initcall_t __initcall_##fn __attribute_used__ \ ...