Ahai
驱动牛犊
驱动牛犊
  • 注册日期2001-04-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3739回复:5

请教:逻辑地址和物理地址有什么关系?

楼主#
更多 发布于:2001-08-14 09:11
    现在我正在将一个总线主DMA设备的NT Driver改写为WDM Driver, 但原来的MmGetPhysicalAddress函数在WDM DDK中不提供。代替它的是AllocateCommonBuffer函数。但只能得到所谓的逻辑地址(LogicalAddress)。现在不知两者的关系如何。
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-08-15 12:58
具体的对应关心我也不清楚.
但是文档理说应该用它, 那就用它. 由于该函数有个PDMA_ADAPTER参数, 应该OS会从对应的设备转换物理地址, 确保DMA使用成功.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
Ahai
驱动牛犊
驱动牛犊
  • 注册日期2001-04-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-15 14:40
可是系统并不知道如何对总线主设备进行编程(这一点不同于普通的SLAVE DMA),我必须自己将物理地址传递给设备寄存器,系统不可能在中间作什么转换呀。
Levis75
驱动小牛
驱动小牛
  • 注册日期2001-08-06
  • 最后登录2006-06-28
  • 粉丝0
  • 关注0
  • 积分68分
  • 威望7点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-08-16 14:46
斑竹说得对,你可以试试.
Ahai
驱动牛犊
驱动牛犊
  • 注册日期2001-04-29
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-08-20 11:16
    我的问题已经解决了。
    2000下分配缓冲区应该使用HalAllocateCommonBuffer,相应的释放应该使用HalFreeCommonBuffer,这两个函数并不是真正的Hal调用,而是WDM.h中定义的两个inline函数。它们保证分配的内存是物理连续的。
    另外,它们同时返回缓冲区的虚拟地址和逻辑地址。逻辑地址的概念我已经在一本写VxD的书里找到了,逻辑地址是总线上的地址,对软件是可见的,真正的物理地址则是经过CPU处理后发给设备的地址。在某些情况下,物理地址和逻辑地址是一样的,如大部分的内存物理地址和逻辑地址是一个值。
hong
驱动小牛
驱动小牛
  • 注册日期2001-09-19
  • 最后登录2005-12-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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?
游客

返回顶部