从bootm看u-boot引导内核的过程

从bootm看u-boot引导内核的过程

ID:39546075

大小:59.00 KB

页数:8页

时间:2019-07-05

从bootm看u-boot引导内核的过程_第1页
从bootm看u-boot引导内核的过程_第2页
从bootm看u-boot引导内核的过程_第3页
从bootm看u-boot引导内核的过程_第4页
从bootm看u-boot引导内核的过程_第5页
资源描述:

《从bootm看u-boot引导内核的过程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、我们知道,在u-boot中可以使用bootm这个命令来引导uclinux内核,那么其具体的过程是怎样的呢?1.1.1  bootm的命令参数通过helpbootm命令可以知道bootm所带的参数,以下内容来自于u-boot/common/cmd-bootm.c:U_BOOT_CMD(bootm,CFG_MAXARGS,1,do_bootm,"bootm-bootapplicationimagefrommemory","[addr[arg...]]-bootapplicationimagestoredinmemory""tpassi

2、ngarguments'arg...';whenbootingaLinuxkernel,""t'arg'canbetheaddressofaninitrdimage");从这里可以知道,bootm后面可以带两个参数,一个是内核所在的地址,这个地址就是通过tftp或者loadx指令下载内核时的存放地址,另一个可以指明initrd所处的位置。1.1.2  do_bootm在u-boot检测到bootm命令后,它将调用do_bootm这个函数进行内核引导:intdo_bootm(cmd_tbl_t*c

3、mdtp,intflag,intargc,char*argv[]){ulongiflag;ulongaddr;ulongdata,len,checksum;ulong*len_ptr;uintunc_len=CFG_BOOTM_LEN;inti,verify;char*name,*s;int(*appl)(int,char*[]);image_header_t*hdr=&header;/*1、提取命令行中的地址参数。*/s=getenv("verify");verify=(s&&(*s=='n'))?0:1;if(argc<

4、2){addr=load_addr;}else{addr=simple_strtoul(argv[1],NULL,16);}SHOW_BOOT_PROGRESS(1);printf("##Bootingimageat%08lx...",addr);/*CopyheadersowecanblankCRCfieldforre-calculation*/memmove(&header,(char*)addr,sizeof(image_header_t));/*2、检测内核文件头的签名是否有效。*/if(ntohl(hdr->ih_magic)!=

5、IH_MAGIC){{puts("BadMagicNumber");SHOW_BOOT_PROGRESS(-1);return1;}}SHOW_BOOT_PROGRESS(2);/*3、通过CRC校验确定文件是否损坏。*/data=(ulong)&header;len=sizeof(image_header_t);checksum=ntohl(hdr->ih_hcrc);hdr->ih_hcrc=0;if(crc32(0,(uchar*)data,len)!=checksum){puts("BadHeaderChecksum");SHO

6、W_BOOT_PROGRESS(-2);return1;}SHOW_BOOT_PROGRESS(3);/*4、输出内核文件头的信息。*//*formulti-fileimagesweneedthedatapart,too*/print_image_hdr((image_header_t*)addr);data=addr+sizeof(image_header_t);len=ntohl(hdr->ih_size);if(verify){puts("VerifyingChecksum...");if(crc32(0,(uchar*)data,len

7、)!=ntohl(hdr->ih_dcrc)){printf("BadDataCRC");SHOW_BOOT_PROGRESS(-3);return1;}puts("OK");}SHOW_BOOT_PROGRESS(4);/*5、检验内核是否为此ARCH编译的。*/len_ptr=(ulong*)data;if(hdr->ih_arch!=IH_CPU_BLACKFIN){printf("UnsupportedArchitecture0x%x",hdr->ih_arch);SHOW_BOOT_PROGRESS(-4);return1

8、;}SHOW_BOOT_PROGRESS(5);/*6、判断文件类型,对于uclinux内核,其值为IH_TYPE_KERNEL。*/switch(h

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

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

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