wince bsp中的g_oalAddressTable表
g_oalAddressTable数组相当于一张从物理地址到虚拟地址的映射表。该数组在\WINCE600\PLATFORM\SMDK6410\SRC\INC\oemaddrtab_cfg.inc文件中。g_oalAddressTable数组的元素类型是一个结构体:
typedef struct{
UINT32 CA;
// cached virtual address
UINT32 PA;
// physical address
UINT32 size;
// size, in MB bytes
}
OAL_ADDRESS_TABLE, *POAL_ADDRESS_TABLE;
CA和PA分别是映射的虚拟地址和物理地址的起始地址,size是以MB为单位的容量大小。下面是飞凌OK6410开发板bsp中g_oalAddressTable表的具体实现:
g_oalAddressTable
DCD 0x80000000, 0x50000000, 256 ;
256 MB DRAM
DCD 0x90000000, 0x70000000, 4 ;
SROM SFR
DCD 0x90400000, 0x71000000, 4 ;
TZIC0
DCD 0x90800000, 0x72000000, 1 ;
FIMG-3DSE SFR
DCD 0x
DCD 0x
DCD 0x90E00000, 0x75000000, 2 ;
DMA0
DCD 0x91000000, 0x76100000, 3 ;
2D Graphics
DCD 0x91300000, 0x77000000, 3 ;
Post Processor
DCD 0x91600000, 0x78000000, 1 ;
Camera I/F
DCD 0x91700000, 0x78800000, 1 ;
JPEG
DCD 0x91800000, 0x
DCD 0x91D00000, 0x7D000000, 13 ; D&I(Security Subsystem Config) SFR
DCD 0x
DCD 0x92B00000, 0x
DCD 0x93000000, 0x00000000, 16 ;
32 MB SROM(SRAM/ROM) BANK 0
DCD 0x94000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1 = DM
DCD 0x00000000, 0x00000000, 0 ;
end of table
第一行:DCD 0x80000000,
0x50000000, 256 ; 256 MB DRAM
从这一行可以看出,我这块开发板用的是256MB的RAM,为什么物理地址映射的是0x50000000,这可以从S
从整体上看,g_oalAddressTable表中映射的虚拟地址在0x80000000至0x9FFFFFFF之间,因为这一块虚拟地址在windows ce操作系统中用作(带缓存的)静态映射。
第二行映射的物理地址是0x70000000,从S
RAM从0x80000000虚拟地址开始,映射的容量大小是
看懂了前两行,后面的也都没什么问题了,都是一些SFR或者外设的映射。g_oalAddressTable表是后续BootLoader和OAL构造一级页表的根据。