阅读:3739回复:5
请教:逻辑地址和物理地址有什么关系?
现在我正在将一个总线主DMA设备的NT Driver改写为WDM Driver, 但原来的MmGetPhysicalAddress函数在WDM DDK中不提供。代替它的是AllocateCommonBuffer函数。但只能得到所谓的逻辑地址(LogicalAddress)。现在不知两者的关系如何。
|
|
沙发#
发布于:2001-08-15 12:58
具体的对应关心我也不清楚.
但是文档理说应该用它, 那就用它. 由于该函数有个PDMA_ADAPTER参数, 应该OS会从对应的设备转换物理地址, 确保DMA使用成功. |
|
|
板凳#
发布于:2001-08-15 14:40
可是系统并不知道如何对总线主设备进行编程(这一点不同于普通的SLAVE DMA),我必须自己将物理地址传递给设备寄存器,系统不可能在中间作什么转换呀。
|
|
地板#
发布于:2001-08-16 14:46
斑竹说得对,你可以试试.
|
|
地下室#
发布于:2001-08-20 11:16
我的问题已经解决了。
2000下分配缓冲区应该使用HalAllocateCommonBuffer,相应的释放应该使用HalFreeCommonBuffer,这两个函数并不是真正的Hal调用,而是WDM.h中定义的两个inline函数。它们保证分配的内存是物理连续的。 另外,它们同时返回缓冲区的虚拟地址和逻辑地址。逻辑地址的概念我已经在一本写VxD的书里找到了,逻辑地址是总线上的地址,对软件是可见的,真正的物理地址则是经过CPU处理后发给设备的地址。在某些情况下,物理地址和逻辑地址是一样的,如大部分的内存物理地址和逻辑地址是一个值。 |
|
5楼#
发布于:2001-12-13 23:54
i have allocated a common buffer for dma and running fine.
under win98 i can just pass the virtuall address of the common buffer back to application to use the data inside common buffer; under win2k, the virtuall address is not accessible in application, how can i use the data inside the common buffer with win2k? |
|