6652|25

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

CE6中虚拟地址与物理地址之间的转换(高分!) [复制链接]

在CE6中,因为用户态的程序不能直接访问物理地址和内核态的空间,在CE5.0能用的FILTER移植到6。0就不能用了
因为在FILTER中用到了MmMapIoSpace 这个函数,造成数据访问中止。

所以我写了个流驱动,通过调用DeviceIoControl来获取MmMapIoSpace 所得到的虚拟地址,然后传给在用户态的FILTER中

问题来了:
    DeviceIoControl 所获得的虚拟地址竟然也是内核态的高地址,NND应用访问不了.

大虾们有没有碰到这种情况,有没有什么办法在驱动里把物理地址指定映射到用户态的虚拟地址上

希各位大侠指点指点。大家共同进步.

最新回复

不知lz有没有解决?我最近也需要在Wince6.0下,AP访问GPIO寄存器,我在应用层加了一个驱动,驱动中用virtualAlooc 跟VirtualCopy,但是应用跟驱动的通信还没做好,传回的数据不对,刚接触这个,已经debug 好几天了,下星期要搞定呀!  详情 回复 发表于 2010-2-6 22:15
点赞 关注

回复
举报

64

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
帮顶下。

MARK,学习下。
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
MmMapIoSpace 在ce6.0 的应用程序中是不能使用的,
在驱动中用就可以。呵呵,你可以去看看www.armce.com关于这个的讨论。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 gooogleman 的回复:
MmMapIoSpace 在ce6.0 的应用程序中是不能使用的,
在驱动中用就可以。呵呵,你可以去看看www.armce.com关于这个的讨论。

你呀,越来越假了,根本没看清楚我的问题/
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

5
 
应用和驱动和驱动通过DeviceIoControl使用BUFFER及一些命令进行通信,然后只在驱动层访问应用层访问不了的地址不可以吗?
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
DeviceIoControl所获取的虚拟地址要在应用层用,这是比较麻烦的.
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

7
 
看来只能改架构了,想到头就大,还是等等看吧,,,,555
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 3 楼 wlc311 的回复:
引用 2 楼 gooogleman 的回复:
MmMapIoSpace 在ce6.0 的应用程序中是不能使用的,
在驱动中用就可以。呵呵,你可以去看看www.armce.com关于这个的讨论。

你呀,越来越假了,根本没看清楚我的问题/

O(∩_∩)O哈哈哈~ Sorry。
不过你要注意排版啊。
你在驱动也不能读出高地址吗?
这个真没有度过呢,检查一下看看是否读错地方了。
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
贴代码....
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 

O(∩_∩)O哈哈哈~ Sorry。
不过你要注意排版啊。
你在驱动也不能读出高地址吗?
这个真没有度过呢,检查一下看看是否读错地方了。

[/quote]
嘻嘻
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(中级)

11
 
内核态的地址,应用层是不能访问的,所以,
我想问问能不能让驱动把物理地址和用户态的虚拟地址映射起来.
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 10 楼 wlc311 的回复:
内核态的地址,应用层是不能访问的,所以,
我想问问能不能让驱动把物理地址和用户态的虚拟地址映射起来.


哦,原来你直接从应用传下来?
我觉得也要做个映射,比如switch 简单的语句等。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
哦,我的blog里好像有个这个方面的涂鸦,随便看看了,呵呵
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

14
 
楼主我是这样理解的 MmMapIoSpace 这个函数是临时创建一个可以读写物理地址的虚拟地址,在流接口里你创建以后,要用UnIOSpace(名字忘了)。然后这个地址就不能使用了,而且为什么一定要取出来这个地址呢。
CE6里面做这样的限制就是为了操作的标准化,限制到你不可以在应用里面操作物理地址。要在CE6里面你只要把寄存器的操作写在流接口里就行了,也不麻烦吧。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

15
 
引用 13 楼 jjyyhema 的回复:
楼主我是这样理解的 MmMapIoSpace 这个函数是临时创建一个可以读写物理地址的虚拟地址,在流接口里你创建以后,要用UnIOSpace(名字忘了)。然后这个地址就不能使用了,而且为什么一定要取出来这个地址呢。
CE6里面做这样的限制就是为了操作的标准化,限制到你不可以在应用里面操作物理地址。要在CE6里面你只要把寄存器的操作写在流接口里就行了,也不麻烦吧。

说得很明白,但小弟对DDSHOW的FILTER不了解,要去改的话也要花一定的时间,呵呵
看来物理地址和用户态的虚拟地址是映射不起来的了,等有时间,我还是试试按楼上的方法做
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

16
 
引用 14 楼 wlc311 的回复:
引用 13 楼 jjyyhema 的回复:
楼主我是这样理解的 MmMapIoSpace 这个函数是临时创建一个可以读写物理地址的虚拟地址,在流接口里你创建以后,要用UnIOSpace(名字忘了)。然后这个地址就不能使用了,而且为什么一定要取出来这个地址呢。
CE6里面做这样的限制就是为了操作的标准化,限制到你不可以在应用里面操作物理地址。要在CE6里面你只要把寄存器的操作写在流接口里就行了,也不麻烦吧。

说得很明白,但小弟对DDSHOW的FILTER不了解,要去改的话也要花一定的时间,呵呵
看来物理地址和用户态的虚拟地址是映射不起来的了,等有时间,我还是试试按楼上的方法做

呵呵我只是说说我自己的看法,楼主也不要被我误导,能不能映射楼主多查查资料吧。
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

17
 
lz的做法好奔放
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

18
 
可否用VirtualAlloc?

LPVOID VirtualAlloc(
  LPVOID lpAddress, // region to reserve or commit
  SIZE_T dwSize, // size of region
  DWORD flAllocationType, // type of allocation
  DWORD flProtect // type of access protection
  );
lpAddress 指定了一个虚拟基地址,不知是否会出错,还没试,明天试试
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

19
 
引用 17 楼 wlc311 的回复:
可否用VirtualAlloc?

LPVOID VirtualAlloc(
  LPVOID lpAddress, // region to reserve or commit
  SIZE_T dwSize, // size of region
  DWORD flAllocationType, // type of allocation
  DWORD flProtect // type of access protection
  );
lpAddress 指定了一个虚拟基地址,不知是否会出错,还没试,明天试试


不用试的,肯定不可以。你看下MmMapIoSpace就源码就知道,这个函数就是用VirtualAlloc和VirtualCopy实现的,只不过MmMapIoSpace实现了地址自动对齐
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

20
 
引用 18 楼 jjyyhema 的回复:
引用 17 楼 wlc311 的回复:
可否用VirtualAlloc?

LPVOID VirtualAlloc(
  LPVOID lpAddress, // region to reserve or commit
  SIZE_T dwSize, // size of region
  DWORD flAllocationType, // type of allocation
  DWORD flProtect // type of access protection
  );
lpAddress 指定了一个虚拟基地址,不知是否会出错,还没试,明天试试


不用试的,肯定不可以。你看下MmMapIoSpace就源码就知道,这个函数就是用VirtualAlloc和VirtualCopy实现的,只不过MmMapIoSpace实现了地址自动对齐


对。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表