linux DMA驱动和dmaengine的关系

363 views
Skip to first unread message

孙波

unread,
Sep 7, 2010, 4:18:56 AM9/7/10
to linux-...@zh-kernel.org
大家好,
现在正在做一个项目,涉及到DMA的驱动部分,用的是2.6.29的kernel,看到在driver/dma/目录下有dmaengine的代码,然后在具体的cpu体系中还有相应的dma
controller驱动(dma.c),这二者是什么关系呢?

如果我想实现自己板子的dma驱动,那需要在哪部分实现代码呢?

还有,我看到kernel的crypto目录下async_tx.c中说是使用dmaengine来实现数据得异步传输,但似乎kernel的其他模块(好像只有raid模块)都没有使用,这部分与dmaengine是个什么关系,主要作用?

个人水平有限,问题也许不很恰当,各位多多指教,小弟拜谢!!

/sun171
_______________________________________________
Linux 内核开发中文邮件列表
Linux-...@zh-kernel.org
http://zh-kernel.org/mailman/listinfo/linux-kernel
Linux 内核开发中文社区: http://zh-kernel.org

Adam Jiang

unread,
Sep 7, 2010, 4:36:36 AM9/7/10
to 孙波, linux-...@zh-kernel.org
On Tue, Sep 07, 2010 at 04:18:56PM +0800, 孙波 wrote:
> 大家好,
> 现在正在做一个项目,涉及到DMA的驱动部分,用的是2.6.29的kernel,看到在
> driver/dma/目录下有dmaengine的代码,然后在具体的cpu体系中还有相应的dma
> controller驱动(dma.c),这二者是什么关系呢?

可以简单的理解为dmaengine是一个抽象层,为Linux的驱动程序提供了一种不需要
考虑具体的DMA控制器而进行DMA操作的能力;DMA控制器的驱动就是某个控制器的
驱动程序,可以看作dmaengine的后端,它真正的来完成DMA操作。

> 如果我想实现自己板子的dma驱动,那需要在哪部分实现代码呢?
>
> 还有,我看到kernel的crypto目录下async_tx.c中说是使用dmaengine来实现数
> 据得异步传输,但似乎kernel的其他模块(好像只有raid模块)都没有使用,这
> 部分与dmaengine是个什么关系,主要作用?

dmaegnine实现了一个子系统,但是内核对于其他设备驱动提供的于DMA相关的API
却肯能不在这里,你可以看看文档 Documentation/DMA-API.txt。

/大头阿当

Li Yang-R58472

unread,
Sep 8, 2010, 5:06:47 AM9/8/10
to 孙波, linux-...@zh-kernel.org
>Subject: linux DMA驱动和dmaengine的关系
>
>大家好,
>现在正在做一个项目,涉及到DMA的驱动部分,用的是2.6.29的kernel,看到在
>driver/dma/目录下有dmaengine的代码,然后在具体的cpu体系中还有相应的dma
>controller驱动(dma.c),这二者是什么关系呢?
>
>如果我想实现自己板子的dma驱动,那需要在哪部分实现代码呢?
>
>还有,我看到kernel的crypto目录下async_tx.c中说是使用dmaengine来实现数据得异
>步传输,但似乎kernel的其他模块(好像只有raid模块)都没有使用,这部分与dmaengine
>是个什么关系,主要作用?

主要是raid配合其他硬件加速模块使用,还可以用来做TCP接收的内存拷贝。

- Leo

Li Yang-R58472

unread,
Sep 8, 2010, 11:37:09 PM9/8/10
to 孙波, linux-...@zh-kernel.org
>Subject: Re: linux DMA驱动和dmaengine的关系
>
>谢谢解答!
>还有个问题,假设我现在有块含DMA控制器的芯片,我想写DMA控制器的驱动,是需要在具体
>的体系目录/arch/arm/mach-xxx下实现dma.c呢还是需要在/drivers/dma/目录下实现驱动
>功能,然后将其注册到DMA Engine Framework上呢?这两者有什么区别?我看内核的
>Documention目录中说DMAEngine的主要功能是实现异步dma,那他和传统的DMA传输有什么
>不同吗?

那主要看你想怎么使用这个控制器了。如果希望它作为一个通用的内存搬移工具,就把它放到drivers/dma下面。DMA engine这个软件构架的好处就是可以与async_tx架构配合,同其他的各种数据处理软硬件模块一起形成异步的数据流处理链条。

>非常感谢!
>在 2010年9月8日 下午5:06,Li Yang-R58472 <r58...@freescale.com>写道:
>>Subject: linux DMA驱动和dmaengine的关系
>>
>>大家好,
>>现在正在做一个项目,涉及到DMA的驱动部分,用的是2.6.29的kernel,看到在
>>driver/dma/目录下有dmaengine的代码,然后在具体的cpu体系中还有相应的dma
>>controller驱动(dma.c),这二者是什么关系呢?
>>
>>如果我想实现自己板子的dma驱动,那需要在哪部分实现代码呢?
>>
>>还有,我看到kernel的crypto目录下async_tx.c中说是使用dmaengine来实现数据得异
>>步传输,但似乎kernel的其他模块(好像只有raid模块)都没有使用,这部分与
>dmaengine
>>是个什么关系,主要作用?
>主要是raid配合其他硬件加速模块使用,还可以用来做TCP接收的内存拷贝。
>
>- Leo
>
>
>
>--
>
>        致
>礼
>-----------------------------------------
>孙波
Reply all
Reply to author
Forward
0 new messages