我是靠谱客的博主 专注中心,最近开发中收集的这篇文章主要介绍dma总线全称_总线主控DMA,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

DMA都是主控总线的,这里的总线主控DMA是指设备本身具备DMA功能,而无需使用系统DMA控制器。

总线主控DMA的设备,有两种基本的DMA方式 基于包的DMA传输

使用公共缓冲区的传输

基于包的DMA传输一般是这样的过程: IRP到达Dispacher

Dispacher分配一个通道AllocateAdapterChannel,这个例程会在一个合适的时候调用它的一个回调函数

回调函数内部会根据IRP的MDL得到内核虚拟地址,接着MapTransfer,调用会得到物理地址,这个物理地址是指总线相关的物理地址

得到物理地址后,一般是写入硬件寄存器,并且通知启动DMA传输

真正的DMA传输就开始了

这种方式的DMA是可以直接把硬件的数据DMA到应用层的,效率相当高。另外DDK文档说明了一些Cache的控制,以及映射寄存器(x86是软件模拟的)的一些关系。需要仔细推敲和理解

使用公共缓冲区的传输是比较简单的: 在StartDevice时,AllocateCommonBuffer得到一个公共缓冲区,这个缓冲区是物理连续的,有时候是会失败的。如果失败,那么StartDevice应该返回STATUS_INSUFFICIENT_RESOURCES.

和基于包的一样,IRP到达Dispacher,Dispacher直接使用缓冲区域地址编程硬件就可以启动DMA了

这个公共缓冲区需要在RemoveDevice时应该释放,FreeCommonBuffer是用来释放它的。

这种方式的DMA的代码是对少的,但他有一个缺点,数据只能到驱动,不能直接到达应用层,但可以通过拷贝到达应用层。无疑这是有效率问题的。</

最后

以上就是专注中心为你收集整理的dma总线全称_总线主控DMA的全部内容,希望文章能够帮你解决dma总线全称_总线主控DMA所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部