【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

linux下面的驱动虽然什么样的情形都有,但是dma驱动却并不少见。dma可以有很多的好处,其中最重要的功能就是能够帮助我们将数据搬来搬去,这个时候cpu就由时间去做别的事情了,提高了设备效率。

1、dma驱动在什么地方

drivers/dma

2、如何看s3c的dma驱动,先看Kconfig

config S3C24XX_DMACbool "Samsung S3C24XX DMA support"depends on ARCH_S3C24XX || COMPILE_TESTselect DMA_ENGINEselect DMA_VIRTUAL_CHANNELShelpSupport for the Samsung S3C24XX DMA controller driver. TheDMA controller is having multiple DMA channels which can beconfigured for different peripherals like audio, UART, SPI.The DMA controller can transfer data from memory to peripheral,periphal to memory, periphal to periphal and memory to memory.

3、发现s3c只依赖于S3C24XX_DMAC,这样可以接着看Makefile

obj-$(CONFIG_S3C24XX_DMAC) += s3c24xx-dma.o

4、确认驱动文件为s3c24xx-dma.c,了解基本结构

static struct platform_driver s3c24xx_dma_driver = {.driver     = {.name   = "s3c24xx-dma",},.id_table  = s3c24xx_dma_driver_ids,.probe        = s3c24xx_dma_probe,.remove        = s3c24xx_dma_remove,
};module_platform_driver(s3c24xx_dma_driver);

5、驱动为基本的platform driver,接着就可以了解probe函数了

 /* Initialize memcpy engine */dma_cap_set(DMA_MEMCPY, s3cdma->memcpy.cap_mask);dma_cap_set(DMA_PRIVATE, s3cdma->memcpy.cap_mask);s3cdma->memcpy.dev = &pdev->dev;s3cdma->memcpy.device_free_chan_resources =s3c24xx_dma_free_chan_resources;s3cdma->memcpy.device_prep_dma_memcpy = s3c24xx_dma_prep_memcpy;s3cdma->memcpy.device_tx_status = s3c24xx_dma_tx_status;s3cdma->memcpy.device_issue_pending = s3c24xx_dma_issue_pending;s3cdma->memcpy.device_config = s3c24xx_dma_set_runtime_config;s3cdma->memcpy.device_terminate_all = s3c24xx_dma_terminate_all;s3cdma->memcpy.device_synchronize = s3c24xx_dma_synchronize;/* Initialize slave engine for SoC internal dedicated peripherals */dma_cap_set(DMA_SLAVE, s3cdma->slave.cap_mask);dma_cap_set(DMA_CYCLIC, s3cdma->slave.cap_mask);dma_cap_set(DMA_PRIVATE, s3cdma->slave.cap_mask);s3cdma->slave.dev = &pdev->dev;s3cdma->slave.device_free_chan_resources =s3c24xx_dma_free_chan_resources;s3cdma->slave.device_tx_status = s3c24xx_dma_tx_status;s3cdma->slave.device_issue_pending = s3c24xx_dma_issue_pending;s3cdma->slave.device_prep_slave_sg = s3c24xx_dma_prep_slave_sg;s3cdma->slave.device_prep_dma_cyclic = s3c24xx_dma_prep_dma_cyclic;s3cdma->slave.device_config = s3c24xx_dma_set_runtime_config;s3cdma->slave.device_terminate_all = s3c24xx_dma_terminate_all;s3cdma->slave.device_synchronize = s3c24xx_dma_synchronize;s3cdma->slave.filter.map = pdata->slave_map;s3cdma->slave.filter.mapcnt = pdata->slavecnt;s3cdma->slave.filter.fn = s3c24xx_dma_filter;

6、通过code获悉,s3cdma有master和slave两个engine,且部分接口共享。

只要完成dma接口的适配,dma就可以正常使用了。当然,前提是,两个engine要进行注册使用。

 ret = dma_async_device_register(&s3cdma->memcpy);if (ret) {dev_warn(&pdev->dev,"%s failed to register memcpy as an async device - %d\n",__func__, ret);goto err_memcpy_reg;}ret = dma_async_device_register(&s3cdma->slave);if (ret) {dev_warn(&pdev->dev,"%s failed to register slave as an async device - %d\n",__func__, ret);goto err_slave_reg;}

linux驱动编写(dma驱动)相关推荐

  1. 米尔科技ZYNQ -Linux下的DMA驱动

    一.目标 在米尔科技的z-turn板上实现linux下的DMA驱动,同时对DMA中断进行测试. 二.分析 ZYNQ的AXIDMA有Direct Register Mode和Scatter/Gather ...

  2. Linux下IIC驱动编写(驱动adxl345传感器)

    基于IMX6ULL Mini开发板,硬件连接:SCL->43, SDA->42,CS->3.3V INT1->7 一.搭建基础框架 1.设置私有数据client,linux/i ...

  3. Linux下的FrameBuffer驱动框架

    一.RGB LCD经典显示器件介绍: 1.LCD屏幕的重要属性参数: ① 分辨率:也就是屏幕上的像素点的个数: ② 像素格式:即单个像素点RGB三种颜色的表达方式,包括RGB888.ARGB8888和 ...

  4. Linux驱动之LCD驱动编写

    在Linux驱动之内核自带的S3C2440的LCD驱动分析这篇博客中已经分析了编写LCD驱动的步骤,接下来就按照这个步骤来字尝试字节编写LCD驱动.用的LCD屏幕为tft屏,每个像素点为16bit.对 ...

  5. Linux DMA 驱动学习总结

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

  6. Linux DMA驱动构架分析

    转载于: http://www.voidcn.com/blog/bcbobo21cn/article/p-5777739.html 以linux2.6.32中的S3C2440驱动为例进行分析,DMA驱 ...

  7. 6.S081 lab: networking e1000 网卡驱动 附 Linux 网卡驱动编写分析

    本文是 6.S081 操作系统课程学习最后一个 lab,编写一个 intel 的 e1000 网卡的驱动在 xv6 下.需要复习知识有:操作系统知识,计算机组成原理 DMA 相关,循环缓冲区的概念,e ...

  8. linux的LCD的驱动编写

    Framebuffer设备 ​ Framebuffer 翻译过来就是帧缓冲,简称 fb,因 此大家在以后的 Linux 学习中见到"Framebuffer"或者"fb&q ...

  9. linux io使用dma传输,linux驱动之DMA

    一.前言 在 嵌入式Linux 的内核及驱动中,DMA 常常被人提起.我们也许清楚它的原理且很明白它非常重要,但在某种程度上,对于 DMA 的使用者来说,我们一般使用其接口,而很少去了解整个 DMA ...

最新文章

  1. Android Studio查找或设置函数注释的快捷键
  2. 大工计算机基础在线作业答案,大工11春《计算机文化基础》在线作业及答案(国外英文资料).doc...
  3. HDOJ1874最短路【spfa】
  4. canvas动画3:交互
  5. Bootstrap学习笔记01【快速入门、栅格布局】
  6. git 合并冲突_GIT提交记录和Revert commit过程分析
  7. Spring 社区的唯一一个国产开源项目 - Spring Cloud Alibaba 毕业了
  8. 复杂 SQL 查询跑不动?DRDS 只读实例来解决!
  9. Ⅴ0还有别的方法设置图案吗_定制汽车硅胶按键你知道厂家是怎么给汽车按键镭雕的吗...
  10. JSONField解决序列化与反序列化字段匹配问题
  11. Android常见界面布局(详细介绍)
  12. 实战演习(九)——用python分析科比生涯数据
  13. unity相机自由移动
  14. 如何快速搭建一个直播平台?
  15. Linux/Unix如何将日志发送到日志服务器
  16. 计算机网络故障提出问题,列控系统及其计算机网络的故障诊断与故障容错研究...
  17. css中关于旋转属性trtransform: rotate影响文字轻微变形的解决办法。
  18. 【Python】迭代法求解非线性方程及方程组
  19. OpenJ_Bailian - 3468
  20. php录音功能,微信开发之录音功能

热门文章

  1. U盘安装CentOS Linux图文详解
  2. javaWeb校园宿舍管理解析(二)
  3. iOS - OC RunLoop 运行循环/消息循环
  4. 实现简单的字符串队列
  5. 使用BULK COLLECT+FORALL加速批量提交
  6. Sharepoint2013:在页面上显示错误信息
  7. 框架会使程序员变笨吗?
  8. Ubuntu下一个好用的MySQL客户端tora
  9. AngularJS学习之旅—AngularJS 模块(十五)
  10. springboot 修改页面不重启