icool210,2416,6410B启动卡制作

关于启动卡,开始 提供的有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);
  }

 

你可能感兴趣的:(210启动卡制作)