{
#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_PARSERu_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_BOOTDELAY在x4412.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文件内定义的。

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

被折叠的 条评论
为什么被折叠?



