suiyi
驱动牛犊
驱动牛犊
  • 注册日期2003-10-22
  • 最后登录2006-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2212回复:3

如何把虚拟地址转换成物理地址(最方便的方法)

楼主#
更多 发布于:2004-06-22 16:50
9054由local端发起的DMA操作需要物理地址,但在应用软件中得到得地址都是虚拟地址。
有什么方便的方法把虚拟地址转换成物理地址哪?
还有连续的虚拟地址对应的物理地址是连续的么?
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-06-24 08:32
WDM中可以使用MmGetPhysicalAddress得到物理地址。
连续的虚拟地址对应的物理地址不一定是连续的
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
bingjie
驱动小牛
驱动小牛
  • 注册日期2001-08-15
  • 最后登录2007-11-29
  • 粉丝0
  • 关注0
  • 积分36分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-06-24 23:06
最简便的办法就是驱动通过DmaAdapter.AllocateBuffer申请一块物理连续的内存做DMA用,应用层通过拷贝该buffer的内容来传递数据。
    还有一个办法就是使用DirectIO,直接利用应用层的buffer,
利用MmProbeAndLockPages来取得Buffer的MDL,然后从中拿到物理地址来传输数据
suiyi
驱动牛犊
驱动牛犊
  • 注册日期2003-10-22
  • 最后登录2006-08-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-06-25 13:44
谢谢,给分了,一人20
不过我已经找到简便的方法了。用windriver的wd_dmalock函数
不过好像只能分配到1M的内存。。。(:
游客

返回顶部