基于数据包的DMA比较常见,比如大容量存储设备。
基于common buffer的 设备和驱动会共享一些控制设备的数据结构(如一套数据缓冲区,一对循环链表等,一收一发)。比如智能网络适配卡。
common buffer dma的驱动程序比较难写。因为需要深入理解 驱动和设备共享的数据结构。你需要知道
1 驱动程序 与 common buffer的基地址的交互;
2 存储在common buffer中的指针是什么类型的,比较对于linked lists;
3 当更新common buffer中的数据结构时,在设备和驱动间应该采用什么同步机制;
在笔记本中 频繁DMA transfer对电池的寿命有影响,所以在笔记本中 应该采用积极的电源策略。例如,在设备idle时 让设备power down一下。