"#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>명시적으로 포함되어야 합니다.

그러나 이것은 전혀 필요하지 않은 것 같습니다. 내가 무엇을 놓치고 있나요?

관련 정보