为什么我无需“#include”相关头文件就能编译内核模块?

为什么我无需“#include”相关头文件就能编译内核模块?

根据常见做法,我是否应该将<linux/stat.h>和包含<linux/module_param.h>在以下程序中?

#include<linux/module.h>

char str[7] = "hello";
int arr_size = 7;

module_param_string(str_param, str, 7, S_IRWXU);

int f1(void){

        return 0;
}

void f2(void){

}

module_init(f1);
module_exit(f2);


MODULE_LICENSE("GPL v2");

但这编译时没有任何警告,并且模块工作没有任何问题。自2.6版本以来,头文件结构等是否有变化(大多数有关驱动程序的书籍似乎从那时起就没有更新过。)?

例如Jonathan Corbet 的文章明确指出,我们应该包含 module_param.h 文件作为模块参数:

带参数的模块现在应该<linux/moduleparam.h>显式包含。

但这似乎根本没有必要。我缺少什么?

相关内容