「#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>明示的に含める必要があります。

しかし、これはまったく必要ないようです。私は何を見逃していますか?

関連情報