将kmalloc内存映射到用户空间

时间:2016-09-05 12:03:08

标签: c linux-kernel linux-device-driver embedded-linux xilinx

我想为我的应用程序创建一个内核模块驱动程序。 它与可编程逻辑中的AXIS FIFO接口,我需要将分配的存储器的物理地址发送到该器件,以用于可编程逻辑。

我的平台驱动程序识别AXIS FIFO设备,并使用mmap使其寄存器可用于我的用户空间应用程序。 (previous post of mine

我还想分配可编程逻辑使用的内存,并通过使用和IOCTL命令来执行此操作,该命令调用具有给定大小的kmalloc作为参数。由于我想使用物理地址 - 我使用__pa(x)获得物理地址。

如果我想访问此分配的内存以验证正确的信息是否存储在RAM中,我该怎么做?通过

fd = open("/dev/mem", ...)
va = mmap (phys_address, ....)

我遇到的问题是我仍然可以错误地访问我不应该访问的部分内存。有更好的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为最好的方法是创建一个映射到已分配内存的/proc设备文件。您的内核模块kmalloc是内存,创建proc设备,并为设备的所有I / O调用提供服务。您的用户空间程序读取和写入此设备,或者可能mmap到它(如果这将起作用,我不确定......)。