|
1. if( ((DWORD)lpdwToc & 0x90000000) == 0x80000000 )
WinCE4.2 还是 WinCE5.0 不是重点, 重点是 LZ 的 OEMAddressTable 的值是设为多少, 因为 4.2 与 5.0 是不同的 bsp, 故这 2 个版本的 OEMAddressTable 定义可能会不同. 还有就是 config.bib 中, NK 的位置是在哪里, 是否会因 IMGFLASH 的值不同而有所改变?? LZ 可测试 IMGFLASH 设 1 or 不设, lpdwToc 其值是否会改变.
2. memcpy((LPVOID)&RomHdr, (LPVOID)(RAMSTART + ((DWORD)lpdwToc - FLASH_IMG_START)), sizeof(ROMHDR));
2.1 RomHdr 是 Global Variable, 故无法得知其用途, 若是无人使用, 则应可忽略该行. 至於 TOC 的用途, LZ 可在 c:\WINCE500\platform\common\src\common\boot\blcommon\blcommon.c 看到 static BOOL KernelRelocate (ROMHDR *const pTOC), 它就是用 TOC 将 eboot 的 global variable 做初值的设定动作. (c language 中, global variable 没初值的清为 0, 有初值的会将初值放入)
2.2 lpdwToc - FLASH_IMG_START 是因为 lpdwToc 是放在 Flash 中, 但在执行 FlashWrite 前, 它还是在 RAMSTART (OEMusbdown() 中的第 4 行 PBYTE pImgStart = (PBYTE) RAMSTART; //定义了一个下NK到SDRAM的地址) 中, LZ 可用 UltraEdit 这类的软体, 用 Hex Mode 去看 NK.nb0, 在 offset 68 的地方, 你会看到一个 lpdwToc 的值.
Paul, Chao @ Techware
|
|