内核模块内存访问


9

可以通过调用ioremap_nocache()来使两个不同的内核模块访问相同的内存区域吗?

我有一个无线驱动程序和一个单独的模块,我希望单独的模块在驱动程序仍在运行的同时分析卡上的噪声值。因此,我上面的问题。

我探索的一种途径是从驱动程序启动内核线程,然后实现信号量以防止由于对同一地址空间的并发读/写而引起的任何竞争情况。我希望子线程能够访问相同的内存区域。

不幸的是,这没有达到我的预期。我将不胜感激任何建议。


为什么需要内核模块来分析噪声值?
gertvdijk

感谢您提出这个问题,无线驱动程序非常复杂,要更改其校准周期,可能会导致一些意想不到的结果。我将不得不执行此操作,因为它仅对我的需求过长的间隔进行校准。由于我确切地知道如何在单独的模块中对设备进行概要分析,因此我很想知道是否可以访问驱动程序正在使用的相同内存区域。
Radagasp

2
修改您的问题,以包括您以前的尝试/方法的所有详细信息。这就是这个网站的运作方式。您看到的不是讨论论坛,而是问答网站。
gertvdijk 2013年

讨论可能包括问题和答案,对与错,似乎对整个管理员来说,规则的解释属于语义范围。我当然已经更新了我的问题。
Radagasp 2013年

Answers:


7

我认为您打算实现另一个内核模块,因为您认为在内核模块之间共享数据更容易。但这也许不是一个好选择。如果可以在用户空间中“分析噪声”,我认为更好的解决方案是在用户空间中实现“分析器”。

在这种解决方案中,用户空间分析器读取数据,执行一些计算,然后提交结果。

如果该解决方案可行,则实现如下。

在内核模块中,仅是在'/ proc'中注册一个char设备并实现'read'和'write'原语。在用户空间中,仅是实现探查器,读取和写入char设备。有关此实现的详细信息,请参见此处


我认为我并没有得到您的答案...据我所知,我仍然需要编写一个模块,并且此模块将尝试通过调用ioremap_nocache()来访问与另一个内存相同的内存区域模块正在使用。或者您是说我在无线模块中注册了char设备
Radagasp 2013年

1
正确,您必须实现软件,而不是模块。您将不得不编写一个比模块更简单的普通用户空间程序,该程序从'/ dev / nameofdevice'读取并写入该程序。无需使用“ ioremap_nocache()”,只需将系统调用称为“打开”,“读取”,“写入”,“关闭”即可。是的,无线模块将必须在内部注册字符设备“ / dev / nameofdevice”,以将数据公开给用户。
vitorafsr 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.