前言

DMA 作为 linux 驱动开发中 重要的一环,我会用 xilinx 的 zu2cg 开发板 实列进行讲解
DMA 大致的操作过程

#mermaid-svg-xx16puBZxB9TtwPF .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-xx16puBZxB9TtwPF .label text{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .node rect,#mermaid-svg-xx16puBZxB9TtwPF .node circle,#mermaid-svg-xx16puBZxB9TtwPF .node ellipse,#mermaid-svg-xx16puBZxB9TtwPF .node polygon,#mermaid-svg-xx16puBZxB9TtwPF .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-xx16puBZxB9TtwPF .node .label{text-align:center;fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .node.clickable{cursor:pointer}#mermaid-svg-xx16puBZxB9TtwPF .arrowheadPath{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-xx16puBZxB9TtwPF .flowchart-link{stroke:#333;fill:none}#mermaid-svg-xx16puBZxB9TtwPF .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-xx16puBZxB9TtwPF .edgeLabel rect{opacity:0.9}#mermaid-svg-xx16puBZxB9TtwPF .edgeLabel span{color:#333}#mermaid-svg-xx16puBZxB9TtwPF .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-xx16puBZxB9TtwPF .cluster text{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-xx16puBZxB9TtwPF .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-xx16puBZxB9TtwPF text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-xx16puBZxB9TtwPF .actor-line{stroke:grey}#mermaid-svg-xx16puBZxB9TtwPF .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-xx16puBZxB9TtwPF .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-xx16puBZxB9TtwPF #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-xx16puBZxB9TtwPF .sequenceNumber{fill:#fff}#mermaid-svg-xx16puBZxB9TtwPF #sequencenumber{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF #crosshead path{fill:#333;stroke:#333}#mermaid-svg-xx16puBZxB9TtwPF .messageText{fill:#333;stroke:#333}#mermaid-svg-xx16puBZxB9TtwPF .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-xx16puBZxB9TtwPF .labelText,#mermaid-svg-xx16puBZxB9TtwPF .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-xx16puBZxB9TtwPF .loopText,#mermaid-svg-xx16puBZxB9TtwPF .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-xx16puBZxB9TtwPF .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-xx16puBZxB9TtwPF .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-xx16puBZxB9TtwPF .noteText,#mermaid-svg-xx16puBZxB9TtwPF .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-xx16puBZxB9TtwPF .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-xx16puBZxB9TtwPF .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-xx16puBZxB9TtwPF .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-xx16puBZxB9TtwPF .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .section{stroke:none;opacity:0.2}#mermaid-svg-xx16puBZxB9TtwPF .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-xx16puBZxB9TtwPF .section2{fill:#fff400}#mermaid-svg-xx16puBZxB9TtwPF .section1,#mermaid-svg-xx16puBZxB9TtwPF .section3{fill:#fff;opacity:0.2}#mermaid-svg-xx16puBZxB9TtwPF .sectionTitle0{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .sectionTitle1{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .sectionTitle2{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .sectionTitle3{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-xx16puBZxB9TtwPF .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .grid path{stroke-width:0}#mermaid-svg-xx16puBZxB9TtwPF .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-xx16puBZxB9TtwPF .task{stroke-width:2}#mermaid-svg-xx16puBZxB9TtwPF .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .taskText:not([font-size]){font-size:11px}#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-xx16puBZxB9TtwPF .task.clickable{cursor:pointer}#mermaid-svg-xx16puBZxB9TtwPF .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-xx16puBZxB9TtwPF .taskText0,#mermaid-svg-xx16puBZxB9TtwPF .taskText1,#mermaid-svg-xx16puBZxB9TtwPF .taskText2,#mermaid-svg-xx16puBZxB9TtwPF .taskText3{fill:#fff}#mermaid-svg-xx16puBZxB9TtwPF .task0,#mermaid-svg-xx16puBZxB9TtwPF .task1,#mermaid-svg-xx16puBZxB9TtwPF .task2,#mermaid-svg-xx16puBZxB9TtwPF .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutside0,#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutside2{fill:#000}#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutside1,#mermaid-svg-xx16puBZxB9TtwPF .taskTextOutside3{fill:#000}#mermaid-svg-xx16puBZxB9TtwPF .active0,#mermaid-svg-xx16puBZxB9TtwPF .active1,#mermaid-svg-xx16puBZxB9TtwPF .active2,#mermaid-svg-xx16puBZxB9TtwPF .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-xx16puBZxB9TtwPF .activeText0,#mermaid-svg-xx16puBZxB9TtwPF .activeText1,#mermaid-svg-xx16puBZxB9TtwPF .activeText2,#mermaid-svg-xx16puBZxB9TtwPF .activeText3{fill:#000 !important}#mermaid-svg-xx16puBZxB9TtwPF .done0,#mermaid-svg-xx16puBZxB9TtwPF .done1,#mermaid-svg-xx16puBZxB9TtwPF .done2,#mermaid-svg-xx16puBZxB9TtwPF .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-xx16puBZxB9TtwPF .doneText0,#mermaid-svg-xx16puBZxB9TtwPF .doneText1,#mermaid-svg-xx16puBZxB9TtwPF .doneText2,#mermaid-svg-xx16puBZxB9TtwPF .doneText3{fill:#000 !important}#mermaid-svg-xx16puBZxB9TtwPF .crit0,#mermaid-svg-xx16puBZxB9TtwPF .crit1,#mermaid-svg-xx16puBZxB9TtwPF .crit2,#mermaid-svg-xx16puBZxB9TtwPF .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-xx16puBZxB9TtwPF .activeCrit0,#mermaid-svg-xx16puBZxB9TtwPF .activeCrit1,#mermaid-svg-xx16puBZxB9TtwPF .activeCrit2,#mermaid-svg-xx16puBZxB9TtwPF .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-xx16puBZxB9TtwPF .doneCrit0,#mermaid-svg-xx16puBZxB9TtwPF .doneCrit1,#mermaid-svg-xx16puBZxB9TtwPF .doneCrit2,#mermaid-svg-xx16puBZxB9TtwPF .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-xx16puBZxB9TtwPF .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-xx16puBZxB9TtwPF .milestoneText{font-style:italic}#mermaid-svg-xx16puBZxB9TtwPF .doneCritText0,#mermaid-svg-xx16puBZxB9TtwPF .doneCritText1,#mermaid-svg-xx16puBZxB9TtwPF .doneCritText2,#mermaid-svg-xx16puBZxB9TtwPF .doneCritText3{fill:#000 !important}#mermaid-svg-xx16puBZxB9TtwPF .activeCritText0,#mermaid-svg-xx16puBZxB9TtwPF .activeCritText1,#mermaid-svg-xx16puBZxB9TtwPF .activeCritText2,#mermaid-svg-xx16puBZxB9TtwPF .activeCritText3{fill:#000 !important}#mermaid-svg-xx16puBZxB9TtwPF .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-xx16puBZxB9TtwPF g.classGroup text .title{font-weight:bolder}#mermaid-svg-xx16puBZxB9TtwPF g.clickable{cursor:pointer}#mermaid-svg-xx16puBZxB9TtwPF g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-xx16puBZxB9TtwPF g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-xx16puBZxB9TtwPF .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-xx16puBZxB9TtwPF .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-xx16puBZxB9TtwPF .dashed-line{stroke-dasharray:3}#mermaid-svg-xx16puBZxB9TtwPF #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF .commit-id,#mermaid-svg-xx16puBZxB9TtwPF .commit-msg,#mermaid-svg-xx16puBZxB9TtwPF .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-xx16puBZxB9TtwPF g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-xx16puBZxB9TtwPF g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-xx16puBZxB9TtwPF g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-xx16puBZxB9TtwPF .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-xx16puBZxB9TtwPF .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-xx16puBZxB9TtwPF .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-xx16puBZxB9TtwPF .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-xx16puBZxB9TtwPF .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-xx16puBZxB9TtwPF .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-xx16puBZxB9TtwPF .edgeLabel text{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-xx16puBZxB9TtwPF .node circle.state-start{fill:black;stroke:black}#mermaid-svg-xx16puBZxB9TtwPF .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-xx16puBZxB9TtwPF #statediagram-barbEnd{fill:#9370db}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-state .divider{stroke:#9370db}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-xx16puBZxB9TtwPF .note-edge{stroke-dasharray:5}#mermaid-svg-xx16puBZxB9TtwPF .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-xx16puBZxB9TtwPF .error-icon{fill:#522}#mermaid-svg-xx16puBZxB9TtwPF .error-text{fill:#522;stroke:#522}#mermaid-svg-xx16puBZxB9TtwPF .edge-thickness-normal{stroke-width:2px}#mermaid-svg-xx16puBZxB9TtwPF .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-xx16puBZxB9TtwPF .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-xx16puBZxB9TtwPF .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-xx16puBZxB9TtwPF .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-xx16puBZxB9TtwPF .marker{fill:#333}#mermaid-svg-xx16puBZxB9TtwPF .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-xx16puBZxB9TtwPF {color: rgba(0, 0, 0, 0.75);font: ;}

发送请求
应答无反应或应答失败
应答成功 发送存储器地址
没有传输完成 修改地址指针
是的传输完成
DMA请求
CPU应答请求
数据传送
传送完成?
DMA结束
  • 以上这个图只是最简单的dma 操作流程
  • 我在Xilinx 的资料库中找到一个概念图 linux dma framework
  • 大概的框架就如下面所示:

Xilinx DMA kernel 驱动详解 (一)相关推荐

  1. imx6ul 驱动详解

    链表的知识: struct list_head {struct list_head *next, *prev; }; API函数 函数 功能 LIST_HEAD 声明并初始化双向链表. INIT_LI ...

  2. LCD液晶屏驱动详解

    开发环境: 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT043TN24 参考文 ...

  3. LCD 液晶屏驱动详解

    LCD液晶屏驱动详解 开发环境 开发板:JZ2440V3 CPU:samsunS3C2440 内核:Linux3.4.2 编译工具:arm-linux-gcc 4.3.2 LCD:4.3存液晶屏AT0 ...

  4. 16.Linux-LCD驱动(详解)

    在上一节LCD层次分析中,得出写个LCD驱动入口函数,需要以下4步: 1) 分配一个fb_info结构体: framebuffer_alloc(); 2) 设置fb_info 3) 设置硬件相关的操作 ...

  5. MTK 驱动(64)---Mtk touch panel驱动/TP驱动详解

    Mtk touch panel驱动/TP驱动详解 TP还算是比LCM好理解的多. 在启动过程中,先注册/mediatek/custom/command/kernel/touchpanel目录下的具体驱 ...

  6. 博通wifi驱动详解

    1        WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...

  7. nvme 驱动详解[转]

    nvme 驱动详解 之1 http://blog.csdn.net/qqqqqq999999/article/details/47732319 首先打开driver/block下的kconfig文件, ...

  8. kernel 选项详解(stlinux2.3) 2-2

    kernel 选项详解(stlinux2.3) 2-2 []IP:TCP syncookie support(disabled per default)    //TCP cookie同步支持(默认关 ...

  9. Linux的tty架构及UART驱动详解

    Linux的tty架构及UART驱动详解 一.模块硬件学习 1.1. Uart介绍 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称 ...

最新文章

  1. MySQL性能优化、故障排查及最佳实践秘籍,阿里云数据库专家玄惭的“武功”全记录...
  2. 苏宁数据中台架构实践(附ppt)
  3. 海峡两岸消防专家论坛台湾举行
  4. 没有双11的美团,被饿了么突袭“下沉粮仓”
  5. mysql log位置_MySql: log 位置
  6. XenDesktop7.12配置StoreFront使用HTTPS
  7. Apache Flink 零基础入门(六)Flink核心概念
  8. 美团java研发岗二面:java静态方法存储在哪个区
  9. 2019年4月27日 修改功能
  10. PyTorch入门(一)--PyTorch基础
  11. 计算机一级高级技师,高级工程师与高级技师职称有什么区别?快来了解一下吧...
  12. 270 扩展固态硬盘_新款macbook扩展坞,内置固态硬盘盒,支持NVME M2协议,一秒传输1GB...
  13. jQuery UI 应用不同Theme的办法
  14. 图形绘制——pygame之旅
  15. php kingeditor 相对路径,kindeditor上传图片生成绝对地址
  16. Mac/MacBookPro解决系统升级后运行卡顿问题(非配置问题)
  17. 错误:80040154 没有注册类 的问题
  18. 存放在电脑中的文件丢失了怎么恢复
  19. Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享
  20. URLDownloadToFile缓存问题

热门文章

  1. 【spring基础】spring 官方下载地址
  2. AtCoder Regular Contest 071 D - 井井井 / ###
  3. JavaScript兼容HTML代码的注释
  4. Codeforces Round #353 (Div. 2)
  5. wireshark: no interface can be used for capturing in this system
  6. 键盘KeyCode值列表
  7. 顶级Java多线程面试题及回答
  8. 计算机背小学英语吗,小学英语课本点读电脑版
  9. 怎么用python打印照片_[宜配屋]听图阁
  10. 用java线程绘制图案_关于多线程:使用线程在java中绘制面板