/* Each module must use one module_init(). */
#define module_init(initfn)                 \
    static inline initcall_t __inittest(void)       \
    { return initfn; }                  \
    int init_module(void) __attribute__((alias(#initfn)));

最佳答案

生成的__inittest()函数的唯一目的是在编译时检查传递给module_init()宏的函数是否与initcall_t类型兼容。

所有模块初始化函数都必须符合类型,因为(从init_module()定义中可以看出)它们不是直接调用的,而是通过特殊别名init_module()调用的。

08-16 13:19