c语言 - 访问两个具有相同名称的结构(模块)



我注意到Linux内核有两个同名的结构(module)。一个在include/linux/module.h中找到,另一个在scripts/mod/modpost.h中找到。现在,我知道THIS_MODULE被分配给了module.h中的结构,但是内核如何知道它应该使用哪个结构呢?

THIS_MODULE被定义为export.h内部的宏

#ifdef MODULE
extern struct module __this_module;
#define THIS_MODULE (&__this_module)
#else
#define THIS_MODULE ((struct module *)0)
#endif

我希望有人解释上面的代码


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

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

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

字面意思是如果定义了宏模块,那么你就会得到THIS_MODULE的第一个定义,否则你会得到另一个定义(空指针)。 这发生在编译时。 使用哪个结构是相同的,很可能包含哪个头文件。

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

最新更新