your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:2245回复:19

virtual address --〉physical address?

楼主#
更多 发布于:2005-01-19 19:09
请问各位大侠,在wince 的驱动里如何将虚拟地址装换成物理地址,如win2k或winxp下的MmGetPhysicalAddrss()。
谢谢。
我需要帮助,我也会帮助别人
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-19 20:13
请问兄弟用的是什么类型的平台?
Come on, let us drive the world.
your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-20 08:36
x86 + wince5.0
我需要帮助,我也会帮助别人
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-20 08:42
为什么要把虚拟转为物理呢,就是你有物理地址在ce下也是不能用的呀,我试过直接用物理地址操作,ce出现了异常
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-20 08:51
不知兄弟做如此转换为何用?是做DMA传输之类的吗?
Come on, let us drive the world.
degyhy123
驱动小牛
驱动小牛
  • 注册日期2002-11-12
  • 最后登录2014-02-09
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望71点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-20 09:47
但是就是dma也不能用物理地址呀,在ce的内存管理方式就不允许你使用物理地址
angeon
禁止发言
禁止发言
  • 注册日期2003-01-09
  • 最后登录2016-04-11
  • 粉丝0
  • 关注0
  • 积分1416分
  • 威望7080点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-20 09:55
用户被禁言,该主题自动屏蔽!
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-20 10:12
但是就是dma也不能用物理地址呀,在ce的内存管理方式就不允许你使用物理地址


兄弟可能误会我的意思了,我是说:在进行DMA传输的时候,可能需要将内存缓冲区的地址转换成总线相关的物理地址,这样DMA控制器才能访问这个缓冲区。
Come on, let us drive the world.
your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-21 08:41
对,还是wwei_wang大侠明白我的用意,我就是需要知道物理地址,给DMA控制器传数据用.
望有知道解决方法的高手们指教.
在WINDOWS平台下有MmGetPhysicalAddrss()可以完成相应功能,可是在WINCE下不知道有什么替代函数.我看到有一个OALVAtoPA(),可不知道怎么用?
我需要帮助,我也会帮助别人
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-21 09:03
其实你也可以分配一个commonbufer来进行dma传输。
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-21 09:04
其实你也可以分配一个commonbuffer来进行dma传输。
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-21 15:04
AllocPhysMem()
根据地的兄弟们,团结就是力量
your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-01-22 11:53
谢谢,我的用法不是这样的,我的虚拟地址只能在用户层得到,不是在下面分配的.
奇怪为什么ce下没有类似的函数 :(
我需要帮助,我也会帮助别人
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-01-24 08:34
谢谢,我的用法不是这样的,我的虚拟地址只能在用户层得到,不是在下面分配的.
奇怪为什么ce下没有类似的函数 :(


我也没找到你说的那个函数。但是用在下驱动里面分配共享缓冲区的方法其实也是一样的,你只要实现用户缓冲区和共享缓冲区之间的拷入拷出就行了。
Come on, let us drive the world.
your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-01-25 17:06
那效率很低啊!
我需要帮助,我也会帮助别人
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-01-25 19:20
效率不低啊,应该能满足要求的!
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-01-26 12:12
那效率很低啊!


你做dma传输平均每秒钟的吞吐量是多少?每次传输的吞吐量又是多少?
Come on, let us drive the world.
joyfly
驱动小牛
驱动小牛
  • 注册日期2002-07-02
  • 最后登录2009-09-17
  • 粉丝0
  • 关注0
  • 积分319分
  • 威望32点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-01-26 13:11
AllocPhysMem()可以得到一段内存的物理地址和进程内的虚拟地址
如果需要对这个虚拟地址进行处理,以便在应用程序或驱动里访问,可以用VirtualAlloc/Copy()和MapPtrToProcess()这些函数去进行处理.
www.cnemb.com
your_ying
驱动牛犊
驱动牛犊
  • 注册日期2002-05-13
  • 最后登录2009-04-03
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望5点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-01-29 10:29
我想知道显卡的显存基地址,不知如何得到???
要显存的物理地址!!!!
我需要帮助,我也会帮助别人
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-01-31 14:30
pc的显存物理地址是固定的,0xa0000开始,中间分成了几个部分,字符模式一段,图像模式一段(好像0xa0000-0xaffff是字符模式,0xb0000到0xbffff是图形模式)单色模式一段,彩色模式一段,具体记不太清了,你可以找x86的汇编的书查,基本都有的
根据地的兄弟们,团结就是力量
游客

返回顶部