我正在开发一个应用程序(用户空间),它通过网络发送值变化通知.
我想开发一个内核模块(A),以便在其他内核模块(B)中的参数值发生变化时通知我的应用程序(用户空间).
在模块 B 中定义一个标头,就像普通的 C 标头一样,其中包含 A 想要使用的变量/函数,当然#include也包括 A 中的变量/函数。
在B的其中一个源文件中写入:
EXPORT_SYMBOL(your_symbol);
Run Code Online (Sandbox Code Playgroud)
对于每个变量/函数。
在模块 A 的 Makefile 中,确保添加 B 的 Module.symvers 的路径,以KBUILD_EXTRA_SYMBOLS消除依赖警告,并且如果您的内核已配置为能够加载该模块CONFIG_MODVERSIONS
说实话,这个我了解不多。我个人在工作中使用 Linux 实时扩展 (RTAI) 进行编码,并且我拥有我认为普通 Linux 中不存在的设施。这些设施是共享内存(在内核和用户之间)和共享信号量(同样在内核和用户之间)等。如果你能在 Linux 中找到这样的东西,那么你就可以使用它。
如果这些不可用(我相信它们不可用),您始终可以简单地编写一个 /sys 或 /proc 文件,输出一个简单的 0/1,显示用户空间应用程序是否需要发出信号。然后用户空间应用程序可以轮询该文件。