linux dma 程序例子,linux下的dma程序开发

  • Post author:
  • Post category:linux


网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的驱动程序,有感于刚接手时无资料借鉴的茫然,故写点介绍,期待能给有DMA开发任务的网友们一点帮助。

本文将包括如下内容:

DMA驱动主要函数功能

驱动中关键技术分析

具体的DMA实例分析

申明:本DMA驱动开发介绍仅适合S3C2410处理器类型,分析源码为韩国MIZI研究中心维护的dma驱动代码:linux/arch/arm/mach-s3c2410/dma.h,linux/arch/arm/mach-s3c2410/dma.c,其它处理器平台DMA开发可比对此文,自行分析。

DMA驱动主要数据结构(linux/arch/arm/mach-s3c2410/dma.h)

S3C2410有四通道DMA,每通道有9个控制寄存器:6个控制寄存器控制DMA传输,其它3个监视DMA控制器状态。

(1)DMA单个内核缓冲区数据结构:

typedef struct dma_buf_s {

int size;/* buffer size:缓冲大小*/

dma_addr_t dma_start;/* starting DMA address:缓冲区起始物理地址*/

int ref;/* number of DMA references缓冲区起始虚拟地址*/

void *id;/* to identify buffer from outside标记*/

int write;/* 1: b