学了这么多驱动,不难推出DMA的编写套路:
1)注册DMA中断,分配缓冲区
2)注册字符设备,并提供文件操作集合fops
-> 2.1)file_operations里设置DMA硬件相关操作,...来启动DMA
由于我们是用字符设备的测试方法测试的,而本例子只是用两个地址之间的拷贝来演示DMA的作用,所以采用字符设备方式编写
1.驱动编写之前,先来讲如何分配释放缓冲区、DMA相关寄存器介绍、使用...,
//handle:物理地址
(PS: dma_free_writecombine()其实就是dma_free_conherent(),只不过是用了#define重命名而已。)...而我们之前用的内存分配kmalloc()函数,是不能用在DMA上,因为分配出来的内存可能在物理地址上是不连续的.
1.2 那么2440开发板如何来启动DMA,先来看2440的DMA寄存器
(PS:实际这些...,还是直接两个地址之间的拷贝
-> 2.2)若是DMA启动,则设置DMA的相关硬件,并启动DMA传输
2.1 所以,驱动代码如下所示:
#include
#include