C 访问两个同名的结构(模块)

C 访问两个同名的结构(模块),c,struct,linux-kernel,C,Struct,Linux Kernel,我注意到Linux内核有两个同名的结构(module)。一个在中找到,另一个在中找到。现在,我知道这个_模块被分配给MODULE.h中的结构,但是内核如何知道应该使用哪个结构呢 此模块定义为内部宏 #ifdef模块 外部结构模块\uuu此\u模块; #定义此_模块(&___此_模块) #否则 #定义此_模块((结构模块*)0) #恩迪夫 我想有人解释一下上面的代码 我的另一个问题是如何访问modpost.h中的模块结构?它的字面意思是,如果定义了宏模块,那么您将获得该模块的第一个定义,否则将

我注意到Linux内核有两个同名的结构(
module
)。一个在中找到,另一个在中找到。现在,我知道
这个_模块
被分配给
MODULE.h
中的结构,但是内核如何知道应该使用哪个结构呢

此模块定义为内部宏

#ifdef模块
外部结构模块\uuu此\u模块;
#定义此_模块(&___此_模块)
#否则
#定义此_模块((结构模块*)0)
#恩迪夫
我想有人解释一下上面的代码



我的另一个问题是如何访问modpost.h中的模块结构?

它的字面意思是,如果定义了宏模块,那么您将获得该模块的第一个定义,否则将获得另一个(空指针)。这在编译时发生。对于要使用的结构是相同的,最有可能的是包含头文件的结构


在声明中包含modpost.h,要访问变量,需要代码在该变量处于活动状态的进程中运行。从上下文来看,我猜是在您使用modprobe加载模块时。

字面意思是,如果定义了宏模块,那么您将获得该模块的第一个定义,否则将获得另一个(空指针)。这在编译时发生。对于要使用的结构是相同的,最有可能的是包含头文件的结构


在声明中包含modpost.h,要访问变量,需要代码在该变量处于活动状态的进程中运行。从上下文来看,我猜是在您使用modprobe加载模块时。

脚本下的所有内容都是用于构建内核及其模块的用户空间实用程序。此目录中的头从未包含在内核模块代码中,因此模块永远无法访问这些定义


当您搜索Linux内核代码中使用的某些类型/变量/函数时,您可以安全地忽略
脚本/
目录下的所有内容。

脚本/
下的所有内容都是用于构建内核及其模块的用户空间实用程序。此目录中的头从未包含在内核模块代码中,因此模块永远无法访问这些定义


当您搜索Linux内核代码中使用的某些类型/变量/函数时,您可以安全地忽略
scripts/
目录下的所有内容。

当我尝试包含
modpost.h
时,编译器说该文件不存在,即使它在
/usr/src/$(uname-r)中存在/scripts/mod/modpost.h
编译程序时,是否使用
-I/usr/src/$(uname-r)/scripts/mod
包含该搜索路径?哪个命令接受该参数(
-I
)?编译器(gcc)。我不使用gcc编译内核模块。。。我使用Linux内核make系统。当我试图包含
modpost.h
时,编译器说该文件不存在,即使它在
/usr/src/$(uname-r)/scripts/mod/modpost.h
中存在,您是否将该搜索路径包含在
-I/usr/src/$(uname-r)中/编译程序时使用scripts/mod
?什么命令接受该参数(
-I
)?编译器(gcc)。我不使用gcc编译内核模块。。。我使用Linux内核制作系统。