我想为我的应用程序创建一个内核模块驱动程序。 它与可编程逻辑中的 AXIS FIFO 接口(interface),我需要将分配内存的物理地址发送到该设备以用于可编程逻辑。
我的平台驱动程序识别 AXIS FIFO 设备,并且使用 mmap 使其寄存器可供我的用户空间应用程序使用。 ( previous post of mine )
我还想分配内存供可编程逻辑使用,并通过使用 IOCTL 命令执行此操作,该命令以给定大小作为参数调用 kmalloc。因为我想使用物理地址 - 我使用 __pa(x) 获取物理地址。
如果我想访问这个分配的内存以验证正确的信息存储在 RAM 中,我该怎么做?通过
fd = open("/dev/mem", ...)
va = mmap (phys_address, ....)
我遇到的问题是我仍然可以错误地访问我不应该访问的内存部分。有更好的方法吗?
谢谢。
最佳答案
我认为最好的方法是创建一个映射到已分配内存的/proc
设备文件。您的内核模块 kmalloc 是内存,创建 proc
设备,并为对该设备的所有 I/O 调用提供服务。您的用户空间程序读取和写入此设备,或者可能 mmap
到它(如果这行得通,我不确定...)。
关于c - 将 kmalloc 内存映射到用户空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39330189/