gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 12:02:10 30 4
gpt4 key购买 nike

我正在尝试在 USB 连接和断开连接时收到通知。所以我正在尝试实现信号。我在 debugfs 中创建了一个文件“file1”。然后我提供了一个简单的写文件操作。

在用户空间有一个用户空间的应用程序,它会把它的PID写在debugfs的“file1”中。

在内核空间中,我可以使用上面提到的写入方法获取传递的 PID。但是我想在不同的内核模块中使用这个 PID。因此,我尝试使用 EXPORT_SYMBOL();,但如果我不包含公共(public)头文件,则会出现编译错误。如果我包含头文件,当我刷新图像时,我看到 PID 是“0”。

谁能告诉我,这是否正确?或者告诉我哪里出错了。或者,当 PID 写入文件时,我可以在不同的内核模块中得到通知吗?如果是怎么办?

最佳答案

EXPORT_SYMBOL() 是正确的方法。我不太明白“如果我不包含公共(public)头文件”是什么意思。听起来你在共享头文件中包含了 EXPORT_SYMBOL(),这不是你想要做的。您想执行以下操作:

module1.c(编译成module1.ko)

int my_exported_variable;

EXPORT_SYMBOL(my_exported_variable);

// The rest of module1.c

然后在 module2.c 中(编译成 module2.ko,必须在 module1.ko 之后进行 insmod)

extern int my_exported_variable; // Note the extern, it is declaring but not defining it, the definition is in module1

// The rest of module2.c

在你 insmod 第一个模块后,你可以通过执行 grep my_exported_variable/proc/kallsyms 检查符号是否被导出,假设你有 /proc/kallsyms系统。如果您在那里没有看到您的变量,那么 module2.ko 的 insmod 将无法处理未解析的符号。

关于c - 如何在两个 Linux 内核模块之间共享一个全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31197345/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com