Uboot之hush方式解析用户命令

Uboot之hush方式解析用户命令

ID:39469058

大小:34.50 KB

页数:5页

时间:2019-07-04

Uboot之hush方式解析用户命令_第1页
Uboot之hush方式解析用户命令_第2页
Uboot之hush方式解析用户命令_第3页
Uboot之hush方式解析用户命令_第4页
Uboot之hush方式解析用户命令_第5页
资源描述:

《Uboot之hush方式解析用户命令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、uboot命令解析流程简析uboot正常启动后,会调用main_loop(void)函数,进入main_loop()之后,如果在规定的时间(CONFIG_BOOTDELAY)内,没有检查到任何按键事件的发生,就会去加载OS,并启动系统,比如把linux内核压缩镜像从nandflash中读到sdram,然后执行它。如果在CONFIG_BOOTDELAY时间内,用户按下键盘上的任意一个按键,uboot就会进入与用户交互的状态。如果用户在配置文件中定义了CONFIG_SYS_HUSH_PARSER,就会通过parse_file_outer(),去接收并解析用户命令,否则进入一个for(;;)循环中

2、,通过readline(CONFIG_SYS_PROMPT)接收用户命令,然后调用run_command(cmd,flag)去解析并执行命令。代码如下:voidmain_loop(void){..............................#ifdefCONFIG_SYS_HUSH_PARSERparse_file_outer();/*Thispointisneverreached*/for(;;);#elsefor(;;){#ifdefCONFIG_BOOT_RETRY_TIMEif(rc>=0){/*Sawenoughofavalidcommandto*restartthet

3、imeout.*/reset_cmd_timeout();}#endiflen=readline(CONFIG_SYS_PROMPT);printf("afterreadline:%d",len);flag=0;/*assumenospecialflagsfornow*/if(len>0)strcpy(lastcommand,console_buffer);elseif(len==0)flag

4、=CMD_FLAG_REPEAT;#ifdefCONFIG_BOOT_RETRY_TIMEelseif(len==-2){/*-2meanstimedout,retryautoboot*/puts

5、("Timedoutwaitingforcommand");#ifdefCONFIG_RESET_TO_RETRY/*Reinitboardtoruninitializationcodeagain*/do_reset(NULL,0,0,NULL);#elsereturn;/*retryautoboot*/#endif}#endifif(len==-1)puts("");elserc=run_command(lastcommand,flag);.....................................}如果定义了CONFIG_SYS_HUSH_

6、PARSER,命令接收和解析讲采用busybox中的hush(对应hush.c)工具来实现,与uboot原始的命令解析方法相比,该工具更加智能。这里主要讲uboot中基于hush的命令解析流程。不过hush的实现太过复杂,鉴于自己水平太次,只是简单追踪下流程。当在配置文件中定义了CONFIG_SYS_HUSH_PARSER,main_loop会调用parse_file_outer(),进入hush,然后里面是一大堆和hush相关的机制,暂时不做分析,最终会调用到hush中的run_pipe_real(structpipe*pi),在该函数中经过一些列解析,最终会调用到对应的命令执行函数,代码

7、如下:staticrun_pipe_real(structpipe*pi){........................................rcode=(cmdtp->cmd)(cmdtp,flag,child->argc-i,&child->argv[i]);if(!cmdtp->repeatable)flag_repeat=0;...................................}cmdtp是对应命令的结构指针,cmd就是该命令对应的执行函数指针。在uboot中,对所有的命令,有一个cmd_tbl_t的结构,定义如下:structcmd_tbl_s{ch

8、ar*name;/*CommandName*/intmaxargs;/*maximumnumberofarguments*/intrepeatable;/*autorepeatallowed?*/int(*cmd)(structcmd_tbl_s*,int,int,char*[]);/*Implementationfunction*/char*usage;/*Usagemessage(short)*/#ifd

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

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

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