u-boot命令内核浅析

u-boot命令内核浅析

ID:6736124

大小:27.50 KB

页数:3页

时间:2018-01-24

u-boot命令内核浅析_第1页
u-boot命令内核浅析_第2页
u-boot命令内核浅析_第3页
资源描述:

《u-boot命令内核浅析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、u-bootbootm命令浅析bootm命令浅析与boom命令实现有关的源文件主要为common/cmd_bootm.c和lib_arm/armlinux.c。下面就这两个文件中的关键代码段进行分析。common/cmd_bootm.c(前面数字为SourceInsight中显示的行号):168if(argc2){addr=load_addr;}else{addr=simple_strtoul(argv[1],NULL,16);}判断运行bootm时是否指定了程序加载地址,若没有则使用默认的加载地址,load_ad

2、dr在cmd_bootm.c中是这样定义的:ulongload_addr=CFG_LOAD_ADDR;183memmove(&header,(char*)addr,sizeof(image_header_t));将使用uboot工具mkimage添加到映象文件头部的64字节提取到image_header_t结构变量header中。。185if(ntohl(hdr-ih_magic)!=IH_MAGIC){#ifdef__I386__if(fake_header(hdr,(void*)addr,-1)!=NULL){

3、addr-=sizeof(image_header_t);verify=0;}else#endif{puts("BadMagicNumber");SHOW_BOOT_PROGRESS(-1);return1;}}判断文件头中的幻数是否为IH_MAGIC,所以如果不是u-boot镜像格式,会输出提示信息”BadMagicNumber”204data=(ulong)&header;len=sizeof(image_header_t);checksum=ntohl(hdr-ih_hcrc);hdr-ih_hcrc=0

4、;if(crc32(0,(uchar*)data,len)!=checksum){puts("BadHeaderChecksum");SHOW_BOOT_PROGRESS(-2);return1;}比对u-bootimage文件头的CRC32校验和。229data=addr+sizeof(image_header_t);len=ntohl(hdr-ih_size);if(verify){puts("VerifyingChecksum...");if(crc32(0,(uchar*)data,len)!=ntoh

5、l(hdr-ih_dcrc)){printf("BadDataCRC");SHOW_BOOT_PROGRESS(-3);return1;}puts("OK");}比对u-bootimage数据部分的校验和。245#ifdefined(__PPC__)if(hdr-ih_arch!=IH_CPU_PPC)#elifdefined(__ARM__)if(hdr-ih_arch!=IH_CPU_ARM)…#else#errorUnknownCPUtype#endif这部条件编译指令检验检验imageheader中

6、的arch类型是否是否正确。275switch(hdr-ih_type){…caseIH_TYPE_KERNEL:name="KernelImage";break;…default:printf("WrongImageTypefor%scommand",cmdtp-name);SHOW_BOOT_PROGRESS(-5);return1;}判断image的类型,这里只列出了KernelImage类型的代码,直接break,:)switch(hdr-ih_comp){…caseIH_COMP_GZIP:print

7、f("Uncompressing%s...",name);if(gunzip((void*)ntohl(hdr-ih_load),unc_len,(uchar*)data,&len)!=0){puts("GUNZIPERROR-mustRESETboardtorecover");SHOW_BOOT_PROGRESS(-6);do_reset(cmdtp,flag,argc,argv);}break;?default:if(iflag)enable_interrupts();printf("Unimplement

8、edcompressiontype%d",hdr-ih_comp);SHOW_BOOT_PROGRESS(-7);return1;}puts("OK");这段代码比较重要,它根据image所采用的压缩类型,将image解压到hdr-ih_load指向的地址,这个ih_load就是在mkimage中的-a选项指定的地址,这下明白了,-a选项指定的是内核

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。