19,502
社区成员
发帖
与我相关
我的任务
分享
while (OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecAddr)
&& OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecLen)
&& OEMReadData (sizeof (DWORD), (LPBYTE) &dwRecChk)) {
RETAILMSG(1, (_T("DownloadImage RecAddr: 0x%x\r\n"), dwRecAddr));
RETAILMSG(1, (_T("DownloadImage RecLen: 0x%x\r\n"), dwRecLen));
RETAILMSG(1, (_T("DownloadImage RecChk: 0x%x\r\n"), dwRecChk));
// check for last record
if (!dwRecAddr && !dwRecChk) {
// if this is the kernel region, update launch address
if (IsKernelRegion(dwImageStart, dwImageLength)) {
*pdwImageStart = dwImageStart;
*pdwImageLength = dwImageLength;
*pdwLaunchAddr = dwRecLen;
RETAILMSG(1, (_T("dwImageStart : 0x%x\r\n"), dwImageStart));
RETAILMSG(1, (_T("dwImageLength: 0x%x\r\n"), dwImageLength));
RETAILMSG(1, (_T("LaunchAddr : 0x%x\r\n"), dwRecLen));
}
// write to flash if it's flash image
if (fIsFlash) {
// finish the flash erase
if (!OEMFinishEraseFlash ()) {
HALT (BLERR_FLASH_ERASE);
return FALSE;
}
// Before writing the image to flash, optionally check the image signature.
if (g_pOEMCheckSignature)
{
if (!g_pOEMCheckSignature(dwImageStart, g_dwROMOffset, *pdwLaunchAddr, TRUE))
HALT(BLERR_WHQL_SIGNATURE);
}
}
// On to the next (possible) BIN file...
break;
}
// map the record address (FLASH data is cached, for example)
lpDest = OEMMapMemAddr (dwImageStart, dwRecAddr);
// read data block
if (!OEMReadData (dwRecLen, lpDest)) {
EdbgOutputDebugString ("****** Data record %d corrupted, ABORT!!! ******\r\n", nPkgNum);
HALT (BLERR_CORRUPTED_DATA);
return FALSE;
}
if (!VerifyChecksum (dwRecLen, lpDest, dwRecChk)) {
EdbgOutputDebugString ("****** Checksum failure on record %d, ABORT!!! ******\r\n", nPkgNum);
HALT (BLERR_CHECKSUM);
return FALSE;
}