坏境:6410板子,wince6.0系统,4G MLC Nandflash
情况描述:
1、SD启动方式下,可以进行stepldr、Eboot、NK等下载,下载完后,可Launch进入到系统
2、拨到Nandflash启动,插入SD卡,可进入到Eboot,有NK的情况下,可引导进入升级NK,升级完后,可Launch进入到系统(Eboot已实现读取SD卡中是否有NK,有NK则进行升级,该功能在2G的Nandflash下测试通过)。
若不插入SD卡,或SD卡中没有NK,则应该直接从Eboot那边Launch到NK。但发现到了跳转的那个地方就停住了。
调试信息如下:
System ready!
Preparing for download...
waitforconnect
INFO: using TOC[1] dwJumpAddress: 0x80157a2c
INFO: OEMLaunch: Jumping to Physical Address 0x50157A2Ch (Virtual Address 0x80157A2Ch)...
使用ViewBin工具查看NK,看到跳转的地址是0x80157a2c,长度为0x027c8c6c
config.bib中的部分配置如下:
#define NKNAME NK
;#define NKSTART 80100000
;#define NKSTART 80105000
#define NKSTART 80150000 ; gjl 80145400
;
;#define NKLEN 03F00000 ; 63MB (Max size, to match image_cfg.* files. This will be auto-sized)
;#define NKLEN 02800000 ; 40MB
#define NKLEN 027FB000 ; 40MB
#define RAMNAME RAM
;#define RAMSTART 83200000 ; 84000000
;#define RAMLEN 05000000 ; 05000000--OK 01D00000 29MB (Will be auto-sized from the end of NK)
#define RAMSTART 86800000 ;88000000--ok
#define RAMLEN 09800000 ; 09800000 08000000--OK 08000000 128MB
从上述情况来看,跳转地址没错,NK大小也没有超过定义的最大值。理论上应该是可以的,但实际却是不行。
SD的IROM固化程序是自己移植的,一直在怀疑这个创建分区部分有问题,其中代码如下:
hPart = BP_OpenPartition( (IMAGE_START_BLOCK+1)*PAGES_PER_BLOCK, // next block of MBR
0x19000, //SECTOR_TO_BLOCK_SIZE(FILE_TO_SECTOR_SIZE(dwBINFSPartLength))*PAGES_PER_BLOCK, // align to block
PART_BINFS,
TRUE,
PART_OPEN_ALWAYS);
这个调用时WriteOSImageToBootMedia()函数里面的。
请大家帮忙分析下,这个到底是怎么回事?为什么无法由Eboot跳转到NK(Nandflash启动方式下直接进入系统)
------解决方案--------------------
既然LZ排除了NK的问题和跳转地址的问题,那么LZ可以看看跳转的时候是否有跳到NK的startup.s那里。如果没有跳到这里的话,说明在Eboot那边从Nandflash中读取NK到RAM中就有问题了。
------解决方案--------------------