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

DMA概述: DMA就是与高速总线直接通信。一般外设,都是通过低速总线与CPU通信。 DMA映射,就是通过一些设置后,外设部设备可以通过高速总线与CPU通信。具体来说,RAM是通过高速总线与CPU...
  • eZiMu
  • eZiMu
  • 2017-02-09 22:51
  • 151

Linux DMA 驱动学习总结

Linux DMA驱动构架分析       以linux2.6.32中的S3C2440驱动为例进行分析,DMA驱动所对应的源码为linux-2.6.32.2\arch \arm\mach-...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

linux的dma驱动

硬件平台:TI的3530 内核:linux-2.6.36 功能:将fpga的数据从内存的一个地方复制到内存另一个地方 初学dma感到很是吃力,编写的内核驱动代码仔细看了一个星期,才将dma的工作...
  • hpu11
  • hpu11
  • 2016-08-29 21:19
  • 186

linux驱动之DMA驱动

DMA是一种无需CPU的参加就可以让外设与系统内存之间进行双向数据传输的硬件机制。它可以使系统CPU从实际的I/O数据传输过程中摆脱出来,大大提高系统的吞吐率,并且在传输期间,CPU还可以并发执行其他...

Linux驱动之DMA

声明:如果此文档中任何内容,侵犯了您的版权,涉及任何法律问题,请立即通知笔者,如果属实,笔者会立即删除。水平有限,难免理解有误,欢迎指正和交流。 Watson.Zhou@foxmail.com ...

linux驱动---DMA操作---驱动编写

下面写一个字符设备驱动,来实际操作一下DMA 三个方面 1,申请一段内存 2,申请中断以及唤醒队列 3,创建字符设备驱动 /*********************************...

ARM-Linux驱动--DMA驱动分析(一)

1、DMA的功能和工作原理这里就不多说了,可以查看s3c2440的手册 2、在正式分析DMA驱动之前,我们先来看一下DMA的注册和初始化过程 系统设备:(翻译自源码注释) 系统设备和系统模型有点...

ARM-Linux驱动--DMA驱动分析(一)

硬件平台:FL2440 (s3c2440) 内核版本:2.6.35 主机平台:Ubuntu 11.04 内核版本:2.6.39 原创作品,转载请标明出处 1、DMA的功能和工作原理这里就不多说了,可以...

Linux s3c2410 DMA驱动开发

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

SPI的驱动 dma

关于SPI驱动  [ARM] 发布时间:2007-11-27 17:34:50   关于IIC驱动,本论坛已经有深入的讨论研究了,例如: http://www.hhcn.com/cgi-b...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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