两个不同的内核模块可以通过调用 ioremap_nocache() 来访问同一块内存区域吗?
我有一个无线驱动程序和一个单独的模块,我希望单独的模块能够在驱动程序仍在运行时分析卡上的噪声值。因此我提出了上述问题。
我探索的一个方法是从驱动程序启动一个内核线程,然后实现一个信号量,以防止对同一地址空间的并发读取/写入引起任何竞争条件。我希望子线程能够访问同一内存区域。
不幸的是,这并没有像我预期的那样起作用。我很感激任何建议。
答案1
我猜你打算实现另一个内核模块,因为你认为在内核模块之间共享数据更容易。但也许这不是一个好的选择。如果可以在用户空间中“分析噪音”,我认为更好的解决方案是在用户空间中实现“分析器”。
在这个解决方案中,用户空间分析器读取数据,执行一些计算,然后提交结果。
如果这个方案可以的话,实现方式如下。
在内核模块中,只需在“/proc”中注册一个字符设备并实现“读取”和“写入”原语。在用户空间中,只需实现分析器,读取和写入字符设备。此实现的详细信息和信息如下这里。