(版本为2.6.18以上)
内核初始化设备驱动的过程:start_kernel()->rest_init()->do_basic_setup()->do_initcalls()
函数do_initcalls如下:
for (call = __initcall_start; call < __initcall_end; call++) {//循环调用__initcall_start与__initcall_end之间函数
.........
result = (*call)();
.........
}
关于module_init的定义如下:
#define __define_initcall(level,fn) /
90 static initcall_t __initcall_##fn __attribute_used__ /
91 __attribute__((__section__(".initcall" level ".init"))) = fn
#define device_initcall(fn) __define_initcall("6",fn)
#define __initcall(fn) device_initcall(fn)
#define module_init(x) __initcall(x);
文件linux/arch/arm/kernel/vmlinux.lds.S 中
__initcall_start = .;
49 *(.initcall1.init)
50 *(.initcall2.init)
51 *(.initcall3.init)
52 *(.initcall4.init)
53 *(.initcall5.init)
54 *(.initcall6.init)
55 *(.initcall7.init)
56 __initcall_end = .;
linux内核驱动设备初始化执行过程(module_init执行过程)
最新推荐文章于 2022-04-24 23:29:38 发布