UBOOT之源码分析(X4412)——main_loop函数分析

本文详细分析了UBOOT启动过程中的main_loop函数,包括倒计时逻辑、自动补全命令、从环境变量获取启动参数以及如何执行预设的启动命令。在延时期间,用户可以通过按键停止自动引导进入命令行。此外,文章还介绍了abortboot函数的实现,用于检查按键中断。最后,讲解了引导命令的配置及其作用,如CONFIG_BOOTCOMMAND用于设定默认引导操作。
摘要由CSDN通过智能技术生成
void main_loop (void)
{

#ifndefCONFIG_SYS_HUSH_PARSER
 
staticchar lastcommand[CONFIG_SYS_CBSIZE] = { 0, };
int len;
int rc= 1;
int flag;
#endif
//
声明一些hush 参数变量

 
#ifdefined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
char*s;
int bootdelay;
#endif

/*uboot启动后会倒计时CONFIG_BOOTDELAY,如果沒有收到用户的输入则自动去执行宏CONFIG_BOOTCOMMAND中设置的命令。这里声明倒计时使用的变量*/

#ifdefCONFIG_SYS_HUSH_PARSER

u_boot_hush_start ();
#endif

//使用hush命令解析器。u_boot_hush_start()common/hush.c中实现

#ifdefCONFIG_AUTO_COMPLETE//自动补全命令,这里未定义使用

install_auto_complete();

#endif

#ifdefined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)

s= getenv ("bootdelay");

bootdelay= s ? (int)simple_strtol(s, NULL, 10) : CONFIG_BOOTDELAY;

//从环境变量中获取bootdelay参数(倒计时参数),得到自动启动缺省镜像文件的延时(单位是秒)。CONFIG_BOOTDELAYx4412.h中设置为3

debug("### main_loop entered: bootdelay=%d\n\n", bootdelay);

s= getenv ("bootcmd");

//从环境变量中获取bootcmd参数,得到在启动延时过程中自动执行的命令。

debug("### main_loop: bootcmd=\"%s\"\n", s ? s :"<UNDEFINED>");

if(bootdelay >= 0 && s && !abortboot (bootdelay)){ //判断延时时间和是否有按键

#ifndef CONFIG_SYS_HUSH_PARSER // 定义

run_command(s, 0);

#else
parse_string_outer(s, FLAG_PARSE_SEMICOLON |
FLAG_EXIT_FROM_LOOP);

#endif
//
当得到了bootcmd参数,bootdelay参数也是大于等于0,并且在启动延时过程中没有按下
//
任意键时,执行parse_string_outer函数,该函数的作用是解释bootcmd参数并执行,它是
//
common目录下的hush.c文件内定义的。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值