在内核模块中获取物理地址时出现问题-无法MMAP到该地址

时间:2019-03-20 23:07:52

标签: memory-management linux-kernel linux-device-driver

我正在通过内存映射寄存器实现DMA,并且需要用于传递给DMA设备的缓冲区的物理地址。

我使用内核模块分配内存,然后将物理地址传递给驱动DMA的用户空间应用程序。我尝试了是否使用Page Shift。

float* buffer = (float*) kcalloc(512, sizeof(float), GFP_DMA); //allocate physical memory for DMA
unsigned long physAddr = virt_to_phys(buffer) >> PAGE_SHIFT;

当我将这些地址添加到DMA设备时,没有数据移动-当我尝试从/ dev / mem映射到这些地址时,它们将导致无效的指针(读取段错误)。

我应该如何获取分配的内存的这些地址?

0 个答案:

没有答案