Advertisement

对Linux用户空间DMA的研究(与单片机类似)

阅读量:

通常情况下,在处理外设时会采用轮训与中断两种方式进行。而当处理的数据量较大时,则会采用DMA方式进行。本文将介绍一种基于用户空间实现DMA操作的技术方案用于从AXI总线获取数据。其中关于FPGA部分的具体细节将在后续文章中进行深入讲解。

首先要明白几个Linux的机制:

UIO机制,在这种机制下可以负责在用户空间管理内核空间相关的IO资源,并在此处承担中断信号上报的任务。

2、/dev/mem ,该设备能够直接实现Linux物理内存与用户空间虚拟内存之间的对应关系,在用户空间完成对设备寄存器区域的操作。

3、mmap函数,实现2中的内存映射。

下面通过实际代码来说明这种机制:

typedef struct {

int axidma; /* Axi dma descriptor */

void *access_address;

unsigned int mapSzie;

int mem; /* memory descriptor */

void *ddr_address;

unsigned int ddr_mapSize;

}Axidma_t, *AxidmaHandle_t;

在接口文件中定义了Axidma_t, 其中

axidma 打开的设备描述符

access_address 外设地址

mapSzie 映射内存的大小 (外设被映射到内存空间)

全部评论 (0)

还没有任何评论哟~