我正在尝试编写一个内核模块,但我坚持访问另一个模块头中定义的结构成员。我将尝试解释:
假设另一个模块是:
<kernel-src>/drivers/xxx/xxx.c|.h
在 xxx.c 中有一些我在驱动程序中使用的导出函数。但是我想从 xxx.h 中定义的struct s_xxx访问成员m1:
struct s_xxx {
...
int m1;
};
接下来我在 /usr/include/linux/yyy.h 中有这个:
struct s_xxx;
struct s_yyy {
...
struct s_xxx *p_xxx;
};
我是我的司机:
#include <linux/yyy.h>
我成功地使用了xxx驱动程序中的导出符号。但是当然,如果我尝试从s_xxx访问成员,编译器会抱怨:
struct s_yyy *p_yyy;
...
m = p_yyy->p_xxx->m1; /* error */
在 /usr/include/linux/ 中找不到 xxx.h。到目前为止,我找到了 2 个解决方法:
1) 下载内核源代码并在我的模块中包含 xxx.h 的完整路径
2) 将 s_xxx 定义从 xxx.h 复制/粘贴到我的模块
这样做的正确方法是什么?
(对不起,冗长而蹩脚的解释:@)