edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1575回复:12

如何分配一片连续的物理内存?

楼主#
更多 发布于:2002-12-16 09:16
我想在driver里面分配一片连续的物理内存(大约5M左右),用于DMA传输。各位高手给点意见和建议,例子或相关函数均可!多谢!

最新喜欢:

IammeIamme
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-08 09:19
各位的方法我试过了,用MmAllocateContiguousMemory()在Win2k下总是得到NULL返回值!分配的大小已经小到几K,还是不行!难道我还有什么工作没有做?
xiaocun324
驱动牛犊
驱动牛犊
  • 注册日期2002-11-14
  • 最后登录2003-01-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-07 19:12
请问高手如何才能快呢?我的应用程序是用基地址加偏移量访问的,还有mdl的大小有限制吗?
jackyzx
驱动牛犊
驱动牛犊
  • 注册日期2001-06-13
  • 最后登录2018-05-29
  • 粉丝0
  • 关注0
  • 积分53分
  • 威望46点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2003-01-03 13:24
用Mm系列函数分配的物理连续的内存,在DMA传输时是没有问题的。在用其对应的逻辑地址进行内存COPY时在NT架构的OS上速度极慢,要注意。
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2003-01-03 12:21
DMA不一定要在物理内存里面分连续的呀。art baker的那本书。
previous
驱动牛犊
驱动牛犊
  • 注册日期2002-07-02
  • 最后登录2003-01-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-02 22:19
MmAllocateContiguousMemory()
MmGetPhysicalAddress()

IoAllocateMdl()
MmBuildMdlForNonPagedPool()
什么地址都可以有了。


simba
驱动牛犊
驱动牛犊
  • 注册日期2002-01-28
  • 最后登录2009-02-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-02 21:11
哦,用这个MmGetPhysicalAddress
simba
驱动牛犊
驱动牛犊
  • 注册日期2002-01-28
  • 最后登录2009-02-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-01-02 21:08
我只在miniport里用ScsiPortGetPhysicalAddress干过,不过可能对你没帮助,在DDK文档里找找看?...
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-02 19:10
赫赫,dma用的时物理地址
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
mxd
mxd
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-12-16 14:24
你一次都说完好不好?
可以进行地址转换呀,或者利用函数MmGetMdlVirtualAddress。你试试。
因为爱好而做,因为生活而工作。 互相帮助,共同发展
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-12-16 10:25
既然我已经贴出了要给的分数,怎么会吝啬呢?只要你回答得好,绝对给分! :D :D :D
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-12-16 10:23
实际上现在我们只得到了一个虚拟地址,可是在DMA传输的时候我们用到的是逻辑地址,那么又如何才能得到这个虚拟地址对应的逻辑地址呢?
mxd
mxd
驱动牛犊
驱动牛犊
  • 注册日期2002-03-21
  • 最后登录2003-11-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-12-16 09:39
MmAllocateContiguousMemory(
  IN ULONG NumberOfBytes,
  IN PHYSICAL_ADDRESS HighestAcceptableAddress)
这个函数用过?
   MmAllocateContiguousMemory can be called to allocate a contiguous block of physical memory for a long-term internal buffer, usually from the DriverEntry routine.A device driver that must use contiguous memory should allocate only what it needs during driver initialization because nonpaged pool is likely to become fragmented as the system runs. Such a driver must deallocate the memory if it is unloaded. Contiguous allocations are aligned on an integral multiple of the processor\'s data-cache-line size to prevent cache and coherency problems
OK?
如果认为有价值,就不要吝啬了,给点分吧。
因为爱好而做,因为生活而工作。 互相帮助,共同发展
游客

返回顶部