如何使用EXPORT_SYMBOL或同等功能在两个内核模块之间导出结构?

静态

我有一个内核模块,其结构如下:

struct test {
    int a;
    int b;
    .....
}

我创建了该结构的实例数组:

struct test foo[8];

我想使用此结构或数组“ foo”导出EXPORT_SYMBOLfoo[0].a在其他内核模块中访问

EXPORT_SYMBOL(foo);从提供程序模块和extern struct test * foo;接收器模块中尝试过但是无法访问该变量。请指出我在哪里犯错。

这是更多代码:

内核模块1:

#include <....>
#include "test_config.h"
....
MODULE_LICENSE("GPL");

struct test {
int a;
int b;
.....
}

test_t foo[8];
//EXPORT_SYMBOL(foo);

/*Code to create sysctl variables out of these members of the struct test*/

int init_module(void)
{
    printk(KERN_INFO "Hello World\n");
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye Cruel World\n");
}

核心模块2:

#include <linux/module.h>
#include <linux/kernel.h>
#include "test_config.h"

int init_module(void)
{
    test_t foo[8];
    printk ("Value of foo is :: %d\n", foo[0].a);
    foo[0].a++;
    printk(KERN_INFO "Hello Again World\n");
    return 0;
}

void cleanup_module(void)
{
    printk(KERN_INFO "Goodbye Again Cruel World\n");
}

这是带有结构定义的头文件:

#ifndef __TEST_CONFIG
#define __TEST_CONFIG

typedef struct test
{
    int a;
    int b
    int c;
    int d;
    float e;
}test_t;

#endif
静态

32先生给出答案不能解决我的问题。因此,我在不使用结构的情况下实现了这一点,并为每个成员a,b,c创建了单独的数组,以便继续执行我的任务...

经过更多的实验,我能够达到导出结构的原始要求。

我修改了头文件,如下所示:

#ifndef __TEST_CONFIG
#define __TEST_CONFIG

struct test
{
    int a;
    int b
    int c;
    int d;
    float e;
};

extern struct test foo[8];

#endif

完成此操作后,我在提供程序模块中将此结构定义为:

struct test foo[8];
EXPORT_SYMBOL(foo);

并在接收器模块中包括标头并对其进行引用,如下所示:

extern struct test foo[8];

通过进行这些更改,我可以通过执行从第二个模块中的第一个模块访问值foo[0].a;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用内核模块直接访问保留的内存?

如何使用ioctl()操作内核模块?

如何使用Linux内核模块中的Linux系统调用

如何定义内核模块之间的依赖关系?

如何使用Linux内核模块获取盒盖状态?

如何在两个Linux内核模块之间共享全局变量?

如何在IE中使用relatedTarget(或同等功能)?

如何将mysql_num_rows等功能更改为mysqli?

为什么在安装了Linux内核调试软件包的系统中需要两个内核模块副本?

如何不等功能结束呢?

Flask博客文章广泛的控件-如何控制文本格式,添加链接,图片等功能

滚动平方根等功能

如何指定使用Makefile编译的两个内核模块中的哪个?

内核模块使用导出的符号取决于加载的其他模块

使用go-cmp正确比较和发现具有导出成员的两个结构之间的差异

如何在内核模块中使用system()作为stdlib.h不能在内核程序中使用?

如何(配方)仅构建一个内核模块?

如何使用QEMU调试Linux内核模块?

如何使用内核模块获取当前的电池统计信息?

如果内核模块仍在使用中,该如何删除?

为什么Udev为单个USB设备加载两个内核模块?

使用两个源文件编译内核模块时出错

将相等功能句柄转换为其他相等功能句柄

如何卸载正在使用的内核模块?

编译内核模块时如何使用标志

框架如何实现自定义 HTML 属性和双卷曲等功能?

dcast 与 dummy 等功能

如何让 Google Script 在两个函数之间等待 3 秒?2 个功能在 1 个按钮中

使用socket api,如何将额外的数据结构传递给内核模块中的fd?