关于启动卡,开始 提供的有2416和6410的源代码,我们需要添加210进去,因为210代码信息少,而且是新手大致花了1个月时间
首先看下原理,tf卡每一个块分512byte
1,6410和2416是将启动卡文件从tf卡最后1024+2+文件大小 块开始写(4g以上),从离tf卡最后2+文件大小 块开始写(2g以下)。
2,210是从第一个块开始写bl1,wince从65块开始写bl2,linux从49块开始写bl2,关于linux和wince都是生成了一个288 k的u-boot.bin,528 k的gzsd210_boot_sd.nb0
但是我们并没有看到bl1,其实bl1也在u-boot.bin和gzsd..里面,我们需要将他分离出来就是读出来。
3,读出来之后发现还是启动不了,这就涉及到校验位,bl1的第8字节到16字节是统计除了前16字节所有和。
if((strcurent==(_T("icool 210")))&&(m_strFilePath.Right(3)==(_T("nb0"))) )
{
m_dwStartWriteSector =65;//65;96
BufLen=16*1024;
Buf=(char *)malloc(BufLen);
memset(Buf, 0x00, BufLen);
m_fileImageFile.Read(Buf,BufLen);
a = Buf + 16;
unsigned long checksum=0;
for(int i = 0; i < BufLen - 16; i++)
checksum += (0x000000FF) & *a++;
a = Buf + 8;
*( (unsigned int *)a ) = checksum;
a = Buf;
if (!WriteSector(1,32,a ))
{
//MessageBox(TEXT("Can not Write image file from 1 sertor block"),TEXT("ERROR"),NULL);
m_strReport.SetWindowTextW(TEXT("erro Can not Write image file from first block"));
return ;//exit(1) ;
}
free(Buf);
}