我们知道,内核中使用__section设置了很多的段属性,使用段属性可以很方便的对函数调用时间分层。
比如我们之前常见的subsys_initcall,就要比module_init更早的执行,因为subsys_initcall在驱动中通常是bus和class,驱动程序调用执行需要class和bus已经创建才能执行驱动函数。
关于这点我之前的博文已经有过分析。
https://blog.youkuaiyun.com/qq_16777851/article/details/82121456
和subsys_initcall、arch_initcall、core_initcall、device_initcall等类似,内核在别的地方也是用了这样的模式。
这里我们要说的就是__setup
可以搜索一下__setup,可以发现这个宏的调用高达300次,可见这个宏的种重要性。
这个宏里面又是调用了另一个宏
#define __setup(str, f