阅读:1963回复:1
应用层分配的缓冲可以给驱动里面做DMA的时候使用吗?
步骤:
1、在应用层分配一个相应大小的缓冲区 2、通过deviceio传递给驱动缓冲的指针和大小 3、驱动里面进行 mdl = ioallocatemdl(buf, size, false, true, null); try { MmProbeAndLockPages(mdl, KernelMode, IoModifyAccess); phyaddr = ( MmGetMdlPfnArray(mdl) [0] ) << PAGE_SHIFT; // 获取物理地址,用于DMA}; 4、DMA完成,通知应用层 5、应用层将缓冲入队列 6、通知驱动反映射 MmUnlockPages(mdl); iofreemdl(mdl); 重复以上过程。 请问这样可行吗?如果有错误的话,请指正。 |
|
沙发#
发布于:2009-11-04 11:43
DMA支持2种方式,一种是公共缓冲区,另一种是基于包的缓冲区。基于包的缓冲区,就是使用应用层的缓冲区
|
|