热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux驱动编写(dma驱动)

【声明:版权所有,欢迎转载,请勿用于商业用途。联系信箱:feixiaoxing163.com】linux下面的驱动虽然什么样

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱: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;}



推荐阅读
  • 深入解析零拷贝技术(Zerocopy)及其应用优势
    零拷贝技术(Zero-copy)是Netty框架中的一个关键特性,其核心在于减少数据在操作系统内核与用户空间之间的传输次数。通过避免不必要的内存复制操作,零拷贝显著提高了数据传输的效率和性能。本文将深入探讨零拷贝的工作原理及其在实际应用中的优势,包括降低CPU负载、减少内存带宽消耗以及提高系统吞吐量等方面。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 大数据应用实例:电视收视率分析企业项目实操第二篇
    本文继续探讨大数据在电视收视率分析中的应用,详细介绍了如何在CentOS系统中进行防火墙管理。针对CentOS 6.5及更早版本,提供了具体的命令操作步骤,包括停止防火墙服务和禁用防火墙启动。此外,还深入讨论了这些操作对数据传输和系统安全的影响,为实际项目实施提供了宝贵的技术参考。 ... [详细]
  • Spring Boot 实战(一):基础的CRUD操作详解
    在《Spring Boot 实战(一)》中,详细介绍了基础的CRUD操作,涵盖创建、读取、更新和删除等核心功能,适合初学者快速掌握Spring Boot框架的应用开发技巧。 ... [详细]
  • 本文探讨了如何在社交媒体平台上高效地获取和管理好友列表。通过分析当前流行的社交应用,如微信、Facebook等,提出了一系列实用的方法和技巧,帮助用户优化好友管理流程,提升社交体验。文章还介绍了相关工具和插件,以进一步简化操作步骤,确保用户能够快速、准确地管理和维护好友关系。 ... [详细]
  • Java 零基础入门:SQL Server 学习笔记(第21篇)
    Java 零基础入门:SQL Server 学习笔记(第21篇) ... [详细]
  • 在处理分享功能时,以往通常会首先考虑使用第三方SDK,如友盟等。然而,通过实际项目经验发现,利用iOS原生的UIActivityViewController不仅可以实现高效、稳定的分享功能,还能更好地控制用户体验。本文将详细介绍如何利用iOS原生技术缓存HTML内容,并结合URL分享的最佳实践,帮助开发者在实际开发中提升应用性能和用户满意度。 ... [详细]
  • 如何构建基于Spring MVC框架的Java Web应用项目
    在构建基于Spring MVC框架的Java Web应用项目时,首先应创建一个新的动态Web项目。接着,需将必要的JAR包导入至WebContent/WEB-INF/lib目录下,确保包括Spring核心库及相关依赖。如遇缺失的JAR包,可向社区求助或通过Maven等工具自动下载。正确配置后,即可开始搭建应用结构与功能模块。 ... [详细]
  • 深入解析Spring Boot自动配置机制及其核心原理
    Spring Boot 的自动配置机制是其核心特性之一,旨在简化开发过程并提高效率。本文将深入探讨这一机制的工作原理,解释其如何通过智能化的类路径扫描和条件注解实现自动装配。通过对 Spring Boot 自动配置的详细解析,读者将能够更好地理解和应用这一强大功能,从而在实际项目中更加高效地利用 Spring Boot。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • 系统管理员可以通过多种方法实时监控Linux系统中的用户活动,包括当前已登录的用户及其正在进行的操作。利用特定的命令和工具,管理员可以轻松获取这些信息,确保系统的安全性和稳定性。例如,使用`who`、`w`或`last`等命令可以快速查看当前登录的用户及其活动详情。 ... [详细]
  • 深入解析 Spring MVC 的核心原理与应用实践
    本文将详细探讨Spring MVC的核心原理及其实际应用,首先从配置web.xml文件入手,解析其在初始化过程中的关键作用,接着深入分析请求处理流程,包括控制器、视图解析器等组件的工作机制,并结合具体案例,展示如何高效利用Spring MVC进行开发,为读者提供全面的技术指导。 ... [详细]
  • SpringBoot启动脚本详解:BAT文件应用与基础入门指南(SpringBoot系列第1篇)
    如果你还在为SSM框架的复杂搭建过程和繁琐的配置文件而烦恼,那么SpringBoot将是你的一大福音。作为SpringBoot系列的第一篇文章,本文详细介绍了如何使用BAT文件来启动SpringBoot应用,并提供了基础入门指南,帮助开发者快速上手,简化开发流程。 ... [详细]
author-avatar
蜗牛的家
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有