阅读:1524回复:8
Physical address ---> Virtual address ??
请问:
1。每个硬件的物理地址如 FlashRom,SDRAM等,它们的物理地址不会有重叠的部分吗? 2。另外MMU把它们映射成虚拟地址时(在那个文件里有详细的映射表啊?),对于WinCE来说用的只是虚拟地址,那WinCE的启始地址应该是在虚拟的4G空间的哪个位置(这个位置的确定是由哪个配置文件完成的)? |
|
论坛版主
|
沙发#
发布于:2004-12-27 14:59
1。每个硬件的物理地址如 FlashRom,SDRAM等,它们的物理地址不会有重叠的部分吗?
在同一个编址空间中,每个设备的物理地址空间是分离的。在不同的编址空间中,可以重复,比如x86的memory和i/o是分离编址的,就可以有相同的部分,而pci总线空间和cpu的寻址空间也是分离的,也可以重复... 2。另外MMU把它们映射成虚拟地址时(在那个文件里有详细的映射表啊?),对于WinCE来说用的只是虚拟地址,那WinCE的启始地址应该是在虚拟的4G空间的哪个位置(这个位置的确定是由哪个配置文件完成的)? 映射表名字是OEMAddressTable,在bsp的目录里面,你找找。 os image的起始位置用source里面的exebase=0x12345678来指定,你可以调整,但这个地址和刚才的映射表必须配合从而使os image被放到适当的物理存储器里面 |
|
板凳#
发布于:2004-12-27 17:14
1.直接挂到系统总线上的设备从整个系统范围上看,是不会有重叠的.
2.映射表在OEMAddressTable里,一般在BSP\KERNEL\HAL\ARM下面,可以去BSP里搜索一下; WINCE的启动地址应该是在0x80000000~0x9fffffff之间.因为这段空间512MBytes的空间就是留给OEM使用的系统空间,硬件资源的地址都在这段虚拟空间上,0xa0000000~0xbfffffff是这段空间的一个映射(cache & buffering disabled) 无论你的WINCE IMAGE是放在NOR FLASH上直接启动,还是拷贝到SDRAM上运行,都是在0x80000000~0x9fffffff这段空间里(可以从OEMAddressTable的VirtAddr得到证实). 但是KERNEL(也就是NK.EXE)的地址是在0xc2000000, 也就是说,在NK.BIN被解析的时候,NK.EXE会被拷贝到0xC2000000的地址上,然后PC会跳到0xC2001000上运行. 0xc2000000以上的空间都是kernel Space, KERNEL的堆\栈都在这上面. |
|
|
地板#
发布于:2004-12-27 19:10
我现在还有个迷惑,就是如果把WinCE拷到SDRAM上是把image全都拷过去的吗?
|
|
地下室#
发布于:2004-12-27 19:41
nk.exe所在的BIN文件.
|
|
|
5楼#
发布于:2004-12-27 19:47
Nk.exe程序是什么时候拷到0xC2000000-0xC3FFFFFF中的?
我们是从Flash上跳到SDRAM中的WinCE image所在启始位置开始运行WinCE系统的,NK是这以后拷过去的,还是在Flash上时就拷过去了啊? |
|
6楼#
发布于:2004-12-27 20:11
运行之后
可以理解为NK.EXE所在的SLOT,在0xC2000000. |
|
|
7楼#
发布于:2004-12-28 09:25
谢谢joyfly和wxl_50685330兄弟!
|
|
8楼#
发布于:2005-01-19 19:08
请问各位大侠,在wince下如何将虚拟地址装换成物理地址,如win2k或winxp下的MmGetPhysicalAddrss()。
谢谢。 |
|
|