我用的是一块2410的开发板,根据资料说明定制的系统下载到扳子上,系统能正确启动,但是当我使用自定义的系统编译时会提示ROM与RAM的地址冲突,提示错误为:
Copy Section Offset: 8cef6f84
FileSys 4K Chunks/Mbyte: 128 <2Mbyte 128 2-4Mbyte 0 4-6Mbyte 0 >6Mbyte
CPU Type: 01c0h
Extensions Pointer: 8c20248c
Total ROM size: 0220f418 ( 35714072)
Error: Ram start overlaps rom binary
Rom end : 0x8e40f418
Ram start: 0x8e029000
NK
physfirst 8c200000
physlast 8e40f418
ulRAMFree 8e029000
错误应该是因为我自定义的系统比较大,需要在config.bib中增加NK的内存分配,于是修改相应的RAMIMAGE和RAM的内存分配(地址是连续的),pb编译成功,但是下在到扳子上系统无法启动,提示信息为:
Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
SDMMC config current rGPGCON: ff95fdba
SDMMC config set rGPGCON: ffa5fdba
SDMMC config Init Done.
OEMInit Done...
Sp=ffffc7cc
修改前的config.bib:
; NK name
#define NKNAME NK
; NK Start address
#define NKSTART 8C200000
#define NKLEN 01D00000
#define RAMSTART 8E000000
#define RAMLEN 01F00000
$(NKNAME) $(NKSTART) $(NKLEN) RAMIMAGE
RAM $(RAMSTART) $(RAMLEN) RAM
; NK 80040000 01EB0000 RAMIMAGE
; RAM 8c200000 01C00000 RAM
; Common RAM areas
AUD_DMA 8c002000 00002000 RESERVED
DRV_GLB 8c010000 00010000 RESERVED
DBGSER_DMA 8c022000 00002000 RESERVED
SER_DMA 8c024000 00002000 RESERVED
IR_DMA 8c026000 00002000 RESERVED
SD_DMA 8c028000 00008000 RESERVED
EDBG 8c030000 00020000 RESERVED
CPXIPCHAIN 8c050000 00008000 RESERVED
SLEEP_BUFF 8c058000 00004000 RESERVED
DISPLAY 8c100000 00100000 RESERVED
CONFIG
COMPRESSION=ON
KERNELFIXUPS=ON
IF IMGPROFILER
PROFILE=ON
ENDIF
IF IMGPROFILER !
PROFILE=OFF
ENDIF
ROMFLAGS=0
ROMSTART=$(NKSTART)
ROMWIDTH=32
ROMSIZE=$(NKLEN)
反复做了多次实验,没有得到结果,我又用第一次按资料说明定制的、可以正确启动的系统,将config.bib的RAM启示地址偏移200000,编译成功,下载到扳子上也是不能启动,和上述提示相同。
现在只能把目标定位在Boot Loader系统初始化阶段的内存空间映射,有资料提到内存分配表,但是不知道此表在哪个文件中,是否修改了此表的内存分配就可以了。
我使用的pb4.2,通过USB将NK.bin直接下载到0x30200000
; NK Start address
#define NKSTART8C200000
#define NKLEN01D00000
#define RAMSTART 8E000000
#define RAMLEN01F00000
这四个地址应该是在一个范围的, 不能顺便修改,必须成对修改,以适应两个地址空间都在以前那个大的地址空间内。
2410的OEMAddressTable在WINCEROOT\PLATFORM\SMDK2410\KERNEL\HAL\ARM和WINCEROOT\PLATFORM\SMDK2410\NBOOT路径下的map.a的文件中
DCD 0x80000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
DCD 0x82000000, 0x08000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 1
DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x88000000, 0x20000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 4
DCD 0x8A000000, 0x28000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 5
DCD 0x8C000000, 0x30000000, 64 ; 64 MB DRAM BANK 0
Kernel的起始地址是0x30200000,对应的虚拟地址就是8C200000
我最后做的实验是将RAM地址偏移了200000,大小不变,这样ROM+RAM的总空间大于64M,再验证下
DCD 0x80000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
对此句不理解,那位兄弟指点一下.
那位兄弟有SMDK2410 BSP的文档资料,给俺发一份zzkn11@163.com
我用的开发板是别人转手的,资料残缺不全,感谢先!