结构体struct module内核的其中之一的模块,多个模块形成的链表是模块的集合。通过insmod(实际执行module_init系统调用)把本模块插入集合,相当于插入链表当中。
如上所述会逐步替换,最终会替换成如下:(所以说以上的宏使用都是等价的,都可以使用)
至于如下的这个是什么意思? 我还没弄明白。
static initcall_t __initcall_##fn##id __used /
__attribute__((__section__(".initcall" level ".init"))) = fn
其中level参数即0~7(实际是0~7s)共14个级别,
#define core_initcall(fn) __define_initcall("1",fn,1)
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn) __define_initcall("3",fn,3)
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
#define subsys_initcall(fn) __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn) __define_initcall("5",fn,5)