阅读:2485回复:7
WDM驱动中分配连续物理内存的问题
在WDM驱动中为PCI设备分配连续的物理内存用做DMA操作,结果参考DDK文档,使用了MmAllocateContiguousMemory函数,编译都通不过,加了ntddk.h头文件也没有,自己在源文件里申明后,连接时找不到这个符号,说明库里根本没有这个函数的实现,加入wdm.lib和ntoskrnl.lib都没有用,请问,这个函数是不是已经在WDM中取消了?那如果需要给设备分配连续的物理内存该怎么做呢?我只需要把物理内存地址写入设备的寄存器就可以了,不需要使用系统的DMA Adapter那些东西,还有物理地址与虚拟地址之间相互转换的函数是什么?linux下就有virt_to_phys之类的函数,WDM中对应的是什么呢?
|
|
沙发#
发布于:2010-04-23 13:20
楼主把“物理内存地址写入设备的寄存器”的目的恐怕就是让设备发起DMA操作吧,既然如此,为什么不用“系统的DMA Adapter那些东西”?
|
|
板凳#
发布于:2010-04-23 15:53
谢谢楼上的
怎么说呢,整个DMA操作都不需要驱动做什么处理,只要告诉设备,缓存的物理地址就OK了。就是驱动分配一段缓存,把缓存的物理地址告诉设备,设备通过DMA方式把数据送入缓存,驱动程序从缓存取数据给应用,过程就是这样,不知道如何使用系统的DMA适配器 |
|
地板#
发布于:2010-04-23 18:48
现在的PCI卡基本上都不需要占用主机的DMA通道了,但是MS要求代码还得这么写,可能是为了兼容或者其它什么原因吧:)
|
|
地下室#
发布于:2010-04-23 22:39
楼上的,要怎么写呢,其实我只是要一个物理内存的地址而已,就这么简单
|
|
5楼#
发布于:2010-04-27 10:50
楼主可以参考一下网上使用DMA的WDM例子,也可以看看DriverStudio自动生成的代码框架。
|
|
6楼#
发布于:2010-05-04 16:57
多谢楼上的,我是直接用DDK写的驱动
|
|
7楼#
发布于:2010-05-24 16:34
我想问问楼上的各位大牛,我要写pci下的dma驱动,需不需要在dsp端做中断处理呢,芯片ti的dm642
|
|