首页 Uboot启动流程国嵌视频培训

Uboot启动流程国嵌视频培训

举报
开通vip

Uboot启动流程国嵌视频培训U-Boot启动过程(国嵌2440培训)开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数。看一下board/smdk2410/这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/,那么U-Boot的入口指令一定位于这个程序中。下面分两阶段介绍启动流程:第一阶段1.cpu/arm920t/这个汇编程序是U-Boot的入口程序,开头就是复位向量的代码。_start:breset1f.*/addr0,r0,#4cmpr0,r1bnec...

Uboot启动流程国嵌视频培训
U-Boot启动过程(国嵌2440 培训 焊锡培训资料ppt免费下载焊接培训教程 ppt 下载特设培训下载班长管理培训下载培训时间表下载 )开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数。看一下board/smdk2410/这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/,那么U-Boot的入口指令一定位于这个程序中。下面分两阶段介绍启动流程:第一阶段1.cpu/arm920t/这个汇编程序是U-Boot的入口程序,开头就是复位向量的代码。_start:breset1f.*/addr0,r0,#4cmpr0,r1bneclbss_l/*跳转到start_armboot函数入口,_start_armboot字保存函数入口指针*/ldrpc,_start_armboot_start_armboot:. word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 start_armboot3c3c.\n",addr);rc=((ulong(*)(int,char[]))addr)(--argc,&argv[1]);/*运行程序*/if(rc!=0)rcode=1;printf("##Applicationterminated,rc=0x%lX\n",rc);/*如果是运行linux,这条指令是否能运行?*/returnrcode;}go命令调用do_go()函数,跳转到某个地址执行的。如果在这个地址准备好了自引导的内核映像,就可以启动了。尽管go命令可以带变参,实际使用时不用来传递参数。2.bootm命令的实现/*common/*/intdo_bootm(cmd_tbl_t*cmdtp,intflag,intargc,char*argv[]){/*检查头部*/if(crc32(0,(uchar*)data,len)!=checksum){puts("BadHeaderChecksum\n");SHOW_BOOT_PROGRESS(-2);return1;}/*解压缩*/switch(hdr->ih_comp){caseIH_COMP_NONE:if(ntohl(hdr->ih_load)==addr){printf("XIP%s...",name);}else{#ifdefined(CONFIG_HW_WATCHDOG)||defined(CONFIG_WATCHDOG)size_tl=len;void*to=(void*)ntohl(hdr->ih_load);void*from=(void*)data;printf("Loading%s...",name);while(l>0){size_ttail=(l>CHUNKSZ)?CHUNKSZ:l;WATCHDOG_RESET();memmove(to,from,tail);to+=tail;from+=tail;l-=tail;}#else/*!(CONFIG_HW_WATCHDOG||CONFIG_WATCHDOG)*/memmove((void*)ntohl(hdr->ih_load),(uchar*)data,len);#endif/*CONFIG_HW_WATCHDOG||CONFIG_WATCHDOG*/}break;caseIH_COMP_GZIP:printf("Uncompressing%s...",name);if(gunzip((void*)ntohl(hdr->ih_load),unc_len,(uchar*)data,&len)!=0){puts("GUNZIPERROR-mustRESETboardtorecover\n");SHOW_BOOT_PROGRESS(-6);do_reset(cmdtp,flag,argc,argv);}break;#ifdefCONFIG_BZIP2caseIH_COMP_BZIP2:printf("Uncompressing%s...",name);/*Ifwe'vegotlessthan4MBofmalloc()space,useslowerdecompressionalgorithmwhichrequiresatmost2300KBofmemory.*/=BZ2_bzBuffToBuffDecompress((char*)ntohl(hdr->ih_load),&unc_len,(char*)data,len,CFG_MALLOC_LEN<(4096*1024),0);if(i!=BZ_OK){printf("BUNZIP2ERROR%d-mustRESETboardtorecover\n",i);SHOW_BOOT_PROGRESS(-6);udelay(100000);do_reset(cmdtp,flag,argc,argv);}break;#endif/*CONFIG_BZIP2*/default:if(iflag)enable_interrupts();printf("Unimplementedcompressiontype%d\n",hdr->ih_comp);SHOW_BOOT_PROGRESS(-7);return1;}}switch(hdr->ih_os){default:/*handledby(original)Linuxcase*/caseIH_OS_LINUX:do_bootm_linux(cmdtp,flag,argc,argv,addr,len_ptr,verify);break;caseIH_OS_NETBSD:do_bootm_netbsd(cmdtp,flag,argc,argv,addr,len_ptr,verify);break;caseIH_OS_RTEMS:do_bootm_rtems(cmdtp,flag,argc,argv,addr,len_ptr,verify);break;caseIH_OS_VXWORKS:do_bootm_vxworks(cmdtp,flag,argc,argv,addr,len_ptr,verify);break;caseIH_OS_QNX:do_bootm_qnxelf(cmdtp,flag,argc,argv,addr,len_ptr,verify);break;}bootm命令调用do_bootm函数。这个函数专门用来引导各种操作系统映像,可以支持引导Linux、vxWorks、QNX等操作系统。引导Linux的时候,调用do_bootm_linux()函数。3.do_bootm_linux函数的实现/*lib_arm/*/voiddo_bootm_linux(cmd_tbl_t*cmdtp,intflag,intargc,char*argv[],ulongaddr,ulong*len_ptr,intverify){theKernel=(void(*)(int,int,uint))ntohl(hdr->ih_ep);/*weassumethatthekernelisinplace*/printf("\nStartingkernel...\n\n");theKernel(0,bd->bi_arch_number,bd->bi_boot_params);/*启动内核,传递启动参数*/}do_bootm_linux()函数是专门引导Linux映像的函数,它还可以处理ramdisk文件系统的映像。这里引导的内核映像和ramdisk映像,必须是U-Boot 格式 pdf格式笔记格式下载页码格式下载公文格式下载简报格式下载 的。U-Boot格式的映像可以通过mkimage工具来转换,其中包含了U-Boot可以识别的符号。
本文档为【Uboot启动流程国嵌视频培训】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
个人认证用户
is_916680
暂无简介~
格式:doc
大小:52KB
软件:Word
页数:0
分类:
上传时间:2021-09-05
浏览量:1