linux 网络dma驱动,linux dma驱动 详解linux dma驱动编写

想了解详解linux dma驱动编写的相关内容吗,feixiaoxing在本文为您仔细讲解linux dma驱动的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:linux,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函数了

/* 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;

}

相关文章

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 设备驱动开发详解 4.0》是由马上飞鱼科技有限公司的紫金福老师所著的一本经典的书籍,该书是目前国内关于 Linux 设备驱动开发方面的最好的教材之一。该书主要介绍了 Linux 设备驱动的基本知识和开发方法,对于想学习 Linux 设备驱动开发或者对于嵌入式系统开发有兴趣的工程师是非常有价值的一本入门书籍。 该书从 Linux 内核的基本架构入手,介绍了 Linux 设备驱动编写和调试方法。该书结合了实战案例,分步骤地开展了驱动开发的实践,详细分析了 Linux 的 I/O 模型、中断和 DMA、并发性问题等。同时,还详细介绍了外部总线的驱动,如 SPI、I2C、PCI、USB 等,并给出了完整的 demo 程序和相应的测试方法。 另外,该书还介绍了常见的设备驱动,如字符设备驱动、块设备驱动网络设备驱动编写方法,并且还介绍了常见设备驱动的硬件架构和硬件接口,使得读者能够更加深入地理解设备驱动的本质。 除此之外,《Linux 设备驱动开发详解 4.0》还介绍了如何通过编写 Linux 独立模块来实现设备驱动,如何使用内核 API 接口和系统调用等技术,并且还引导读者了解一些不常见的驱动开发技术,如用户空间驱动程序和内核模块参数。 总之,《Linux 设备驱动开发详解 4.0》是一本非常实用的 Linux 设备驱动开发指南,它涵盖了 Linux 设备驱动开发的方方面面,包括理论知识和实际操作,对于想深入了解 Linux 设备驱动开发的工程师来说是不可多得的一本书。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值