如何在内核模块中注册用户空间内存区域?

我正在开发一个Linux模块来与第三方设备连接。 当这个设备准备好给我的模块信息时,它直接写入RAM存储器地址0x900000。

当我检查/ proc / iomem时,我得到:

00000000-3fffffff: System Ram
   00008000-00700fff: Kernel code
   00742000-007a27b3: Kernel datat

从我的理解来看,这意味着它正在写入一个在用户空间中浮出的地址。

我知道这不是最佳情况,能够使用内存映射地址/寄存器会更好,但我现在没有选择改变它的工作方式。

我如何让我的内核模块安全地声明从0x900000到0x901000的用户空间内存空间?

我尝试了mmap和ioremap,但这些实际上是用于内存映射寄存器,而不是访问用户空间中已经存在的内存。 我相信我可以通过使用指针来从地址读取/写入,但是如果该区域被分配给另一个进程,那么这不会阻止腐败。


您可以通过在bootargs中设置mem参数来告诉内核限制内核空间的地址:

mem=1M@0x900000 --> instructs to use 1M starting from 0x900000

例如:mem = 1M @ 0x900000 mem = 1M @ 0xA00000

以下命令应该告诉你分配给内核的内存区域:

cat /proc/iomem | grep System
链接地址: http://www.djcxy.com/p/70327.html

上一篇: How do you register a region of user space memory in a kernel module?

下一篇: How can kernel reach the mmaped memory by the virtual address