linux的dma驱动

原创 2016年08月29日 21:19:24

硬件平台:TI的3530

内核:linux-2.6.36

功能:将fpga的数据从内存的一个地方复制到内存另一个地方

初学dma感到很是吃力,编写的内核驱动代码仔细看了一个星期,才将dma的工作原理和程序流程给看明白

工作原理:通过软件配置dma控制器的寄存器,让dma自己讲数据从外部读入到内存中,使得linux系统可以直接访问,而在这数据传送的期间,cpu不参与数据的传输,这也大大提高了cpu的利用率,使得系统的运行性能大大提高(这种方式通常适用于大数据量的传输,dma也正是为他而存在)。在每次dma将数据传送完成之后,就会向cpu发送一个中断信号,cpu响应中断,并执行我们传入的回调函数(中断函数),实际上dma每次进行传输时都要经过2次的传输:source -> dma->dest,每次传完,都会发送一个中断给cpu,同样的cpu也会进入中断处理中断函数(也就是我们传入的回调函数)。

                                                                                                                                               -----------------> 配置dma到dest(目的)dma控制器  -> dma到dest的中断处理函数

                                                                                                                                               |

程序流程:开始 -> 初始化dma控制器 -> 配置读取fpga到dma的控制器 -> fpga到dma开始传输数据 -> fpga到dma的中断处理函数 ---

                                                                                                    ^                                                                                                                                  |

                                                                                                    |                                                                                                                                   |

                                                                                                    ----------------------------------------------------------------------------------------------------

如此便可循环的读取fpga的数据到内存中,供系统去处理这些数据。


注意:配置的寄存器,主要是源地址寄存器,目的地址寄存器 ,这两个寄存器由于是物理地址,所以不能直接被内核空间和用户空间去访问,我们一般都是通过ioremap和mmap映射物理地址分别到内核虚拟地址和用户空间的虚拟地址。而内核空间提供给用户空间的接口也是通过这个函数实现的。

另外还有需要配置控制器的控制寄存器,会涉及到dma的传输模式和传输通道

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux驱动中的DMA和Cache一致性问题

  • 2014年03月03日 22:53
  • 346KB
  • 下载

Linux环境下DMA驱动的研究

  • 2015年08月24日 06:18
  • 1.7MB
  • 下载

S3C2410的linux 下DMA驱动程序开发

网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的...

linux S3C2440 DMA驱动开发

  • 2017年09月11日 16:06
  • 6KB
  • 下载

Linux 驱动之DMA 子系统

DMA子是CPU中实现数据传输的一种方式,CPU配置好DMA控制器之后发起数据传输,CPU本身不参与数据传输的动作中去。DMA种类: 分为外设DMA和DMA控制器。其中外设DMA实现的为特定的外设与...

Linux驱动修炼之道-DMA框架源码分析

首先介绍一下DMA,S3C2440A支持位于系统总线和外围总线之间的4通道DMA控制器,每个通道都可以在系统总线或外围总线上的设备之间传输数据。每个通道可以对下面4种情况进行传输: 1.源和目的都在...

Linux下PCIe驱动以及DMA机制

1. 驱动程序作用: ·        设备驱动程序向应用程序屏蔽了硬件在实现上的细节,使得应用程序可以像操作普通文件一样操作外部设备。Linux操作系统抽象了对硬件的处理,可以使用和操作文件相同的...

linux下S3C2410的DMA驱动程序开发

网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的...

Linux s3c2410 DMA驱动开发

网上介绍LINUX下的一般驱动程序开发示例浩如烟海,或是因为简单,关于DMA驱动的介绍却寥寥无几;近期zhaoyang因工作需要,花了几日时间开发了某设备在S3C2410处理器Linux下DMA通信的...

SEP4020 Linux DMA驱动编写心得及使用流程

SEP4020 DMA驱动编写心得及使用流程 照例,一个驱动写完后要记录点东西,日后有问题绝对是珍贵的参考资料。 前两天看了s3c2410的linux dma驱动,写的很巧妙,我们的SEP40...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux的dma驱动
举报原因:
原因补充:

(最多只允许输入30个字)