如何从内核模块(B)中的内核模块(A)调用函数和变量,然后将通知发送到用户空间?

时间:2012-04-06 09:13:07

标签: c linux-kernel

我正在开发一个应用程序(用户空间),它通过网络发送值更改通知。

我想开发一个内核模块(A),以便在其他内核模块(B)中的参数值发生变化时通知我的应用程序(用户空间)。

  1. 如何从内核模块(A)向我的用户空间应用程序发送信号?
  2. 如何将数据从内核模块(A)发送到我的用户空间应用程序?
  3. 如何从内核模块(B)中的内核模块(A)调用函数和变量?

1 个答案:

答案 0 :(得分:2)

从模块A

访问模块B.

在模块B中定义一个标头,就像普通的C标头一样,包括A想要使用的变量/函数,当然还有#include在A中。

在B的一个源文件中,写:

EXPORT_SYMBOL(your_symbol);

表示每个变量/函数。

在模块A的Makefile中,确保在KBUILD_EXTRA_SYMBOLS中添加B的Module.symvers路径以消除依赖性警告,并且如果已使用{配置了内核,则能够加载模块{1}}

发信号通知用户土地流程

老实说,这个我不太了解。我亲自为我的工作编写了Linux(RTAI)的实时扩展代码,并且我认为我在普通Linux中不存在这些设施。这些工具是共享内存(在内核和用户之间)和共享信号量(在内核和用户之间)等。如果您可以在Linux中找到这样的东西,那么您可以使用它。

如果那些不可用(我相信它们不可用),你总是可以简单地写一个/ sys或/ proc文件,输出一个简单的0/1,显示用户空间应用程序是否需要发信号。然后,用户空间应用程序可以轮询该文件。