社区
嵌入开发(WinCE)
帖子详情
请问WinCE6下面怎么样将虚拟地址转换为物理地址?
superxiaofanqie
2009-04-04 09:32:04
在WinCE6里,怎么样得到一个user space的虚拟地址所对应的物理地址?
以前的LockPage好像只能用于kernel space的虚拟地址,因为这个函数并没有进程ID的参数。
有没有可以得到一个user地址空间的虚拟地址所对应的物理地址的函数?谢谢啦
...全文
158
3
打赏
收藏
请问WinCE6下面怎么样将虚拟地址转换为物理地址?
在WinCE6里,怎么样得到一个user space的虚拟地址所对应的物理地址? 以前的LockPage好像只能用于kernel space的虚拟地址,因为这个函数并没有进程ID的参数。 有没有可以得到一个user地址空间的虚拟地址所对应的物理地址的函数?谢谢啦
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
morris88
2009-04-06
打赏
举报
回复
OEMAddressTable里定义的映射关系是给ARM MMU用的,是在KernelStart(source code参考wince420\private\目录)时建立的,只要WINCE还在跑,就不会解除.
OEMAddressTable 里的Virtual Addr和Physical Addr是对ARM来说的. 其实对于WINCE,就只能访问到它的Virtual address. 也就是说,OEMAddressTable里的Virtual address对WINCE 系统来说才是Physical Address.
经过OEMAddressTable映射后的系统的物理地址,在0x80000000~0x9fffffff之间.是 caching and buffering的地址,这个地址加上0x20000000,就是它的cache & buffering disabled地址.所有的硬件寄存器的地址都在这个地址段上,受MMU保护的.
上面讲的系统的物理地址,从0x80000000~0xbfffffff,在Kernel Mode下都可以直接访问. ISR是在KERNEL里,也就可以直接访问这些系统的物理地址.无所谓"因为ISR只能访问静态映射的虚拟地址".
上面说过,对于ARM来说,有虚拟地址和物理地址之分,对于WINCE来说,也有虚拟地址和物理地址之分. 可以这么说,ARM的虚拟地址就是WINCE系统的物理地址.
32 位的OS总共有4G的虚拟地址空间,WINCE也不例外. 其中,0x00000000~0x80000000是Application Space; 0x80000000~0xffffffff是System Reserved. 系统的物理地址就在System Reserved的这段,只能在KERNEL MODE访问. 那么,当APPLICATION和DRIVER(都是运行在USER MODE)要访问这些在System Reserved地址段的硬件寄存器或MEMORY怎么办呢? 只好再建立一层映射关系,在Application Space里分配一段空间,把它映射到System Reserved里的地址上,这就是VirtualAlloc/Copy和MmMapIoSpace干的事情.
paul_chao
2009-04-06
打赏
举报
回复
1. 沒有聽說過有.
2. LZ 為何需要如此做, 或許將應用說出來, 大家可以參詳一個更好的方法來達到你要的功能.
Paul, Chao @ Techware
shuiyan
2009-04-06
打赏
举报
回复
为什么需要物理地址呢?
WINCE6下禁止在应用层对Kernel层的地址空间进行直接操作。
WinCE
OAL中的Memory函数介绍
在BSP开发中经常会用到
物理地址
与
虚拟
地址的转换,一般都是基于
物理地址
获得相应的
虚拟
地址来访问硬件。在
WinCE
6.0中,可以在
WINCE
600/Platform/Common/Src/Inc/Oal_memory.h文件中找到相关的操作函数,这些函数用来
虚拟
地址与
物理地址
之间的转换,它们都是基于OEMAddressTable表的。也就是说,首先要在OEMAddressTable中定义
虚拟
地址到物
WinCE
6.0的内存
物理地址
访问
在
WinCE
中,由于系统使用
虚拟
内存,所以驱动、程序等在进行操作时,都是对
虚拟
内存进行操作。对于指定的
物理地址
,需要进行转换后才能访问。 使用MmMapIoSpace 与OALPAtoVA 进行
虚拟
地址的转换。
下面
进行一些介绍。 (1)MmMapIoSpace 用法 在程序中使用的都是
虚拟
地址,如果要对
物理地址
进行操作,需要用到MmMapIoSpace把
物理地址
映射到
虚拟
地址,
WINCE
物理和
虚拟
地址的问题
WINCE
物理和
虚拟
地址的问题 在MAP.A中地址映射表转换
物理地址
到
虚拟
地址 EXPORT OEMAddressTable[DATA] ;LTORG AREA OEMAddressTable, DATA, READONLY ;OEMAddressTable ;;;------------------------------------------------
WinCE
下的地址映射以及寄存器访问
wince
下的地址映射知识点滴 1.如果是在bootloader中访问设备寄存器,可以直接操作
物理地址
。2.
wince
启动后,硬件上ARM和X86体系的处理器启动了MMU,操作系统只能访问到
虚拟
地址,不能直接操作物理内存了。但是如果是X86的CPU,由于它的外设I/O端口和存储器空间分开编址,可以直接嵌入汇编或者使用宏read_port_xxx,write_port_xxx来读写设备寄存器的
WinCE
6.0的目录组织及PQOAL
在搭建
Wince
6.0完开发平台以后,我们先熟悉一下
WINCE
600的目录组织和PQOAL的相关概念。不然会像无头苍蝇一样,找不到北。我曾经在这里晕了好久。 安装完成后, C盘的根目录下产生一个
WINCE
600的目录,这里包括
WinCE
6.0的源代码、BSP和一些编译
WinCE
时需要用到的工具和库文件。另外还产生一个C:/Program Files
嵌入开发(WinCE)
19,523
社区成员
41,565
社区内容
发帖
与我相关
我的任务
嵌入开发(WinCE)
硬件/嵌入开发 嵌入开发(WinCE)
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章