c - 将 kmalloc 内存映射到用户空间

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

我想为我的应用程序创建一个内核模块驱动程序。 它与可编程逻辑中的 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/

相关文章:

c++ - 返回 const char*;静电有多难看?

linux-kernel - 什么是 kthreadd_task

c - 拦截系统调用

c - Linux内核为模块生成compile-commands.json

linux - 如何在 Linux 设备驱动程序中从 usb 端点接收连续数据

c++ - 检查字符设备

c - 如何在C程序中将矩阵的第一列元素复制到第二列

c - 为什么这句话消除了 "unreferenced function argument warning"?

c++ - 使用 C/C++ 访问 RAW 磁盘

linux - CMOS_WRITE 无法工作的可能原因是什么?