/// include/linux/init.h#ifndef MODULE#ifndef __ASSEMBLY__/** initcalls are now grouped by functionality into separate* subsections. Ordering inside the subsections is determined* by link order.* For backwards compatibility, initcall() puts the call in* the device init subsection.** The `id...
module_init ---> __initcall ---> device_initcall ---> __define_initcall(include/linux/init.h) ---> ___define_initcall(/include/linux/init.h) 综上,我们调用顺序:module_init(fn)---> initcall(fn) ---> device_initcall(fn) ---> define_initcall(fn, 6) ...
MODULE 的定义通常通过编译时的参数传递,可通过查看 Makefile 文件,如在编译.ko时使用特定的编译选项,而链接到内核时则不会使用这些选项。未使能 MODULE 情况下,module_init 实际上是作为特殊 initcall,用于声明初始化函数并控制函数调用顺序。initcall 有多个级别,module_init 实际对应于 device_initc...
#define fs_initcall(fn) __define_initcall(fn, 5) #define fs_initcall_sync(fn) __define_initcall(fn, 5s) #define rootfs_initcall(fn) __define_initcall(fn, rootfs) #define device_initcall(fn) __define_initcall(fn, 6) #define device_initcall_sync(fn) __define_initcall(fn, 6s) #def...
2.2 __initcall #define __initcall(fn) device_initcall(fn) #define device_initcall(fn)__define_initcall(fn, 6) #define __define_initcall(fn, id) ___define_initcall(fn, id, .initcall##id) #define ___define_initcall(fn, id, __sec)\ ...
#define device_initcall(fn) __define_initcall("6",fn,6) #define __define_initcall(level,fn,id) \ static initcall_t __initcall_##fn##id __used \ __attribute__((__section__(".initcall" level ".init"))) = fn 最终我们看到的是module_init的真身:__define_initcall(level,fn,id),仔...
(fn) __define_initcall("rootfs",fn,rootfs) #define device_initcall(fn) __define_initcall("6",fn,6) #define device_initcall_sync(fn) __define_initcall("6s",fn,6s) #define late_initcall(fn) __define_initcall("7",fn,7) #define late_initcall_sync(fn) __define_initcall("7s",f...
platform_device_register_simple("vexpress-spc-cpufreq", -1, NULL, 0); return 0; } module_init(ve_spc_clk_init); device_initcall(ve_spc_clk_init);3 changes: 1 addition & 2 deletions 3 arch/cris/arch-v10/drivers/eeprom.c Original file line numberDiff line numberDiff line c...
平台设备的初始化(注册)用arch_initcall()调用,initcall的level为3;驱动的注册用module_init调用,即device_initcall,它的initcall的level为6。 #define pure_initcall(fn) __define_initcall(fn,0) #define core_initcall(fn) __define_initcall(fn,1) ...
#define module_init(x) __initcall(x); 因为 #define __initcall(fn) device_initcall(fn) #define device_initcall(fn) __define_initcall("6",fn,6) #define __define_initcall(level,fn,id) \ static initcall_t __initcall_##fn##id __used \ ...