注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

时间记录器

记录我的Linux、Android学习之路

 
 
 

日志

 
 

android之 lk 烧写mtd.img原理  

2011-08-18 19:51:34|  分类: Android |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

下面的代码与生成镜像的代码必须匹配

static int nandmtd(int argc, const cmd_args *argv)
{
 RAW_IMAGE_HEADER_T *stRawImageHeader;
 tagDiskImageBunchHeaderType *stBunchHeader;

    unsigned int img_part;
    unsigned int img_size;
    unsigned int img_cnt;
 void *ptr = 0;
    unsigned int i;
 
 unsigned int ulCRC32 = 0;
 unsigned int crc_tmp = 0;
 unsigned int img_bytes = 0;

 if(argc < NANDMTD_ARGS)
 {
  usage_nandmtd();
  return 0;
 }

 if(argv[NANDMTD_ADDR].u == 0x0)
 {
  printf("Wrong address:%x\n", argv[NANDMTD_ADDR].u);
  return 0;
 }
    ptr = (u_char *)argv[NANDMTD_ADDR].u;

    stRawImageHeader = (RAW_IMAGE_HEADER_T *)ptr;
    printf("|*************************************************|\n"); 
    printf("  tagHeader    = %s\n", (char *)stRawImageHeader->tagHeader);   
    printf("  ulHeaderSize = %d Bytes\n", stRawImageHeader->ulHeaderSize);
    printf("  ulCRC32      = 0x%x\n", stRawImageHeader->ulCRC32);
    printf("  tagImageType = %s\n", (char *)stRawImageHeader->tagImageType);
    printf("  areaName     = %s\n", (char * )stRawImageHeader->areaName);
    printf("  total_img    = %d \n", stRawImageHeader->total_img);
   
    img_cnt = stRawImageHeader->total_img;
 
 ulCRC32 = stRawImageHeader->ulCRC32;
 stRawImageHeader->ulCRC32 = 0;//reset it for count crc

    ptr += 52;//move ptr to the first stBunchHeader
 img_bytes += 52;

    for(i=0; i<img_cnt; i++)
    {
        stBunchHeader = (tagDiskImageBunchHeaderType *)ptr;
   
        img_part = stBunchHeader->ullPart;
        img_size = stBunchHeader->ullLength;
   
        ptr += 16; //sizeof(stBunchHeader);
        ptr += img_size;

  img_bytes += 16;
  img_bytes += img_size;
    }
 
    ptr = (u_char *)argv[NANDMTD_ADDR].u;

 crc_tmp = TC_CalcCRC(ptr, img_bytes, crc_tmp);

 if(crc_tmp != ulCRC32)
 {
        printf("|*************************************************|\n");
  printf(" [CRC error]: Bad mtd image, please reload it !\n");
        printf("|*************************************************|\n");
  return 0;
 } 
 printf(" > CRC correct.\n");
    ptr += 52;//move ptr to the first stBunchHeader

    for(i=0; i<img_cnt; i++)
    {
        stBunchHeader = (tagDiskImageBunchHeaderType *)ptr;
   
        img_part = stBunchHeader->ullPart;
        img_size = stBunchHeader->ullLength;
   
        printf("|*************************************************|\n");
        printf(" >img[%d]\n", i);
        printf(" >  ullPart = %d\n", img_part);
        printf(" >  ullLength = 0x%x\n", img_size);

        ptr += 16; //sizeof(stBunchHeader);
        nandwrite((u_char *)ptr, mtd_part[img_part], img_size);
        printf(" >Write img[%d] to nand OK!\n", i);   
        ptr += img_size;
    }
     printf("|*************************************************|\n"); 
    return 0;
}

  评论这张
 
阅读(911)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017