欢迎来到天天文库
浏览记录
ID:52925823
大小:77.86 KB
页数:7页
时间:2020-04-01
《U-boot命令分析报告.pdf》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Uboot命令的解释及添加方法Baods2012.03.22一、分析uboot命令的执行过程在uboot启动的第二段代码start_armboot函数最后面会进入死循环,在这个死循环中调用main_loop函数,其中main_loop函数在common/main.c中定义在这里面查看是否设置环境变量参数,如果设置了则看串口在bootdelay秒内有没有输入,若没有则执行bootcmd命令/***************************************************************
2、*************/voidmain_loop(void){......#ifdefined(CONFIG_BOOTDELAY)&&(CONFIG_BOOTDELAY>=0)char*s;intbootdelay;#endif....../**在这里获得环境变量参数bootdelay,如果环境变量中有定义,则将值赋给bootdelay,*没有则赋值给CONFIG_BOOTDELAY.*/#ifdefined(CONFIG_BOOTDELAY)&&(CONFIG_BOOTDELAY>=0)s=getenv(
3、"bootdelay");bootdelay=s?(int)simple_strtol(s,NULL,10):CONFIG_BOOTDELAY;debug("###main_loopentered:bootdelay=%d",bootdelay);......s=getenv("bootcmd");获取bootcmddebug("###main_loop:bootcmd="%s"",s?s:"");if(bootdelay>=0&&s&&!abortboot(bootdela
4、y)){run_command(s,0);/*执行bootcmd中的命令*/....../*MainLoopforMonitorCommandProcessing*/#ifdefCFG_HUSH_PARSERparse_file_outer();/*Thispointisneverreached*/for(;;);#elsefor(;;){len=readline(CFG_PROMPT);/*首先显示CFG_PROMPT定义的字符串"U-boot>"然后等待键盘输入....之后对一些特别字符进行处理,对于正常字符
5、将存放到console_buffer中*/flag=0;/*assumenospecialflagsfornow*/if(len>0)strcpy(lastcommand,console_buffer);elseif(len==0)flag
6、=CMD_FLAG_REPEAT;#ifdefCONFIG_BOOT_RETRY_TIMEelseif(len==-2){/*返回值等于-2则timeout*/puts("Timedoutwaitingforcommand");#ifdefCONFIG_RESET_T
7、O_RETRY/*Reinitboardtoruninitializationcodeagain*/do_reset(NULL,0,0,NULL);#elsereturn;/*retryautoboot*/#endif}#endifif(len==-1)/*返回值等于-1则break*/puts("");elserc=run_command(lastcommand,flag);读取到命令后交给run_command处理if(rc<=0){/*invalidcommandornotrepe
8、atable,forgetit*/lastcommand[0]=0;}}#endif/*CFG_HUSH_PARSER*/}接下来看看run_command函数做了什么工作?intrun_command(constchar*cmd,intflag){cmd_tbl_t*cmdtp;charcmdbuf[CFG_CBSIZE];/*workingcopyofcmd*/char*str=cmdbuf;......clear_ctrlc();/*forgetanypreviousControlC*/if(strlen(
9、cmd)>=CFG_CBSIZE){/*判断输入的命令是否太长*/puts("##Commandtoolong!");return-1;}strcpy(cmdbuf,cmd);/*复制命令到cmdbuf*//*Processseparatorsandcheckforinvalidrepeatablecommands*/while(*str){/*char*str=cm
此文档下载收益归作者所有