对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)
还没有任何评论哟~
