请问WinCE6下面怎么样将虚拟地址转换为物理地址?

superxiaofanqie 2009-04-04 09:32:04
在WinCE6里,怎么样得到一个user space的虚拟地址所对应的物理地址?
以前的LockPage好像只能用于kernel space的虚拟地址,因为这个函数并没有进程ID的参数。
有没有可以得到一个user地址空间的虚拟地址所对应的物理地址的函数?谢谢啦
...全文
125 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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层的地址空间进行直接操作。

19,520

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧