先看这些宏的定义(定义在文件include/linux/init.h中)
__define_initcall
这些宏都用到了__define_initcall(),再看看它的定义(同样定义在文件include/linux/init.h中)
这其中initcall_t是函数指针,原型如下,
而属性 __attribute__((__section__())) 则表示把对象放在一个这个由括号中的名称所指代的section中。
所以__define_initcall的含义是:
1) 声明一个名称为__initcall_##fn的函数指针;
2) 将这个函数指针初始化为fn;
3) 编译的时候需要把这个函数指针变量放置到名称为 ".initcall" level ".init"的section中。