5

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

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

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

1 回答 1

2

从模块 A 访问模块 B

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

在 B 的源文件之一中,写入:

EXPORT_SYMBOL(your_symbol);

对于每个变量/函数。

在模块 A 的 Makefile 中,确保添加 B 的 Module.symvers 的路径,KBUILD_EXTRA_SYMBOLS以消除依赖警告,并且如果您的内核已配置为能够加载模块CONFIG_MODVERSIONS

向用户级进程发出信号

老实说,这个我知道的不多。我个人为我的工作使用 Linux 的实时扩展 (RTAI) 进行编码,并且我拥有我认为普通 Linux 中不存在的设施。这些设施是共享内存(在内核和用户之间)和共享信号量(同样在内核和用户之间)等等。如果你能在 Linux 中找到这样的东西,那么你可以使用它。

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

于 2012-04-06T09:34:06.560 回答