iis服务器助手广告广告
返回顶部
首页 > 资讯 > 操作系统 >详解linux dma驱动编写
  • 636
分享到

详解linux dma驱动编写

linuxdma驱动 2022-06-04 22:06:16 636人浏览 泡泡鱼
摘要

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

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

1、dma驱动在什么地方


drivers/dma 

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


config S3C24XX_DMac 
  bool "Samsung S3C24XX DMA support" 
  depends on ARCH_S3C24XX || COMPILE_TEST 
  select DMA_ENGINE 
  select DMA_VIRTUAL_CHANNELS 
  help 
   Support for the Samsung S3C24XX DMA controller driver. The 
   DMA controller is having multiple DMA channels which can be 
   configured 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函数了


 
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; 
 
 
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_jshZIpdma_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; 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

--结束END--

本文标题: 详解linux dma驱动编写

本文链接: https://www.lsjlt.com/news/19468.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • linux串口驱动详解
    Linux串口驱动是用于控制和管理串口设备的软件模块。它提供了一组函数和数据结构,使得应用程序可以通过操作这些函数和数据结构来与串口...
    99+
    2023-09-13
    linux
  • Linux中PCI设备驱动程序怎么编写
    编写Linux中的PCI设备驱动程序涉及以下几个步骤:1. 确定PCI设备的ID:使用`lspci`命令或者在`/sys/bus/p...
    99+
    2023-09-22
    Linux
  • 怎么用rust编写windows驱动
    要使用Rust编写Windows驱动,你需要使用Rust的开发工具链和一些额外的工具。 以下是编写Windows驱动的一般步骤: ...
    99+
    2023-10-26
    rust windows
  • 测试驱动ChatGPT编程示例详解
    目录有输入就要有输出停下来想一想想好了,继续出发总结一下有输入就要有输出 上一篇文章中,我故意漏掉了一个手法没有讲。具体是什么样的手法呢?其实在实施的过程中,我发现把主干流程的逻辑...
    99+
    2023-03-23
    测试驱动ChatGPT编程 ChatGPT编程
  • Linux如何编译声卡驱动
    Linux如何编译声卡驱动,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。关于Linux编译声卡驱动:惠普笔记本刚买来时,安装Debian 5,通常会遇到两个问题。一个是无线...
    99+
    2023-06-16
  • windows硬件驱动程序怎么编写
    编写Windows硬件驱动程序可以分为以下步骤: 了解硬件设备:首先需要了解要编写驱动程序的硬件设备的技术规范和特性,包括硬件接...
    99+
    2023-10-24
    windows
  • linux怎么编译驱动程序
    编译Linux驱动程序通常需要以下步骤: 下载并安装适当的Linux内核源代码。您可以从Linux官方网站上下载所需的内核源代码...
    99+
    2024-03-06
    linux
  • 如何理解Linux内核驱动的编码风格
    本篇文章给大家分享的是有关如何理解Linux内核驱动的编码风格,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。最近在向Linux内核提交一些驱动程序,在提交的过程中,发现自己的代...
    99+
    2023-06-16
  • Linux网卡驱动怎么编译安装
    这篇文章主要讲解了“Linux网卡驱动怎么编译安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux网卡驱动怎么编译安装”吧!以D-Link530的网卡进行模块的编译.由于Linux的...
    99+
    2023-06-10
  • 详解领域驱动设计之事件驱动与CQRS
    目录一、前言:从物流详情开始二、领域事件2.1、建模领域事件2.2、领域事件代码解读2.3、领域事件的存储2.3.1、单独的EventStore2.3.2、与业务数据一起存储2.4、...
    99+
    2024-04-02
  • Python3 setup.py编写详解
    1. 功能 distutils可以用来在Python环境中构建和安装额外的模块。新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块 ...
    99+
    2023-01-31
    详解 setup py
  • 如何解析Linux 驱动架构
    今天就跟大家聊聊有关如何解析Linux 驱动架构,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先,需要熟悉操作系统的设计与实现,推荐大家看 MINIX作者的那部书,同时把MINIX...
    99+
    2023-06-28
  • linux下怎么安装编译网卡驱动
    这篇文章主要介绍“linux下怎么安装编译网卡驱动”,在日常操作中,相信很多人在linux下怎么安装编译网卡驱动问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”linux下怎么安装编译网卡驱动”的疑惑有所帮助!...
    99+
    2023-06-12
  • linux驱动开发中常用函数copy_from_user open read write详解
    目录linux驱动常用函数(copy_from_user open read write)1.open2.read3.write4.copy_to_user5.copy_from_u...
    99+
    2024-04-02
  • 在Linux中如何编译并安装ixgbe驱动
    本篇内容介绍了“在Linux中如何编译并安装ixgbe驱动”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!i...
    99+
    2024-04-02
  • Linux内核驱动中对文件的读写方式
    这篇文章主要讲解了“Linux内核驱动中对文件的读写方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux内核驱动中对文件的读写方式”吧!1. 打开文件filp_open()在kern...
    99+
    2023-06-16
  • QT出现没有MySQL驱动手动编译详细步骤
    报错代码: "QSqlDatabase: QMYSQL driver not loaded ,QSqlDatabase: available drivers: QSQLIT...
    99+
    2023-05-16
    qt没有mysql驱动 qt手动编译 qt手动编译工程
  • Python中unittest的数据驱动详解
    目录前言一.ddt简单介绍二.ddt处理各种类型数据1.分析ddt工作原理2.ddt测试元祖数据2.1测试单组元素2.2测试多组未分解元素 2.3测试多组分解元素 ...
    99+
    2024-04-02
  • React中过渡动画的编写方式实例详解
    目录React的过渡动画过渡动画库的介绍CSSTransition(掌握)SwitchTransition(了解)TransitionGroup(了解) 总结React的过...
    99+
    2024-04-02
  • 利用Python编写linux自动备份脚
    题目:  周末的时候帮朋友写了一个备份需求的脚本,现在整理一下,分享出来使用Python语言的Fabric模块,这里就不扫盲了,运维必用的Python模块;  大概要求:    公司需求,每天凌晨2点备份数据(数据量不大,每天全备),拷贝至...
    99+
    2023-01-31
    自动备份 Python linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作