NanoPC-T2 Uboot启动过程分析 - 3-1 main_loop()初认识

本文详细分析了UBoot的主循环函数main_loop(),包括modem_init()、cli_init()、run_preboot_environment_command()、bootdelay_process()等步骤,重点讲解了bootcmd的解析过程和命令执行机制,涉及run_command_list()、parse_string_outer()等关键函数。通过本文,读者可以深入了解UBoot启动流程。
摘要由CSDN通过智能技术生成

main_loop()是uboot的主循环,位于\/uboot-root\/common\/main.c中。其代码如下:


void main_loop(void)

{

 const char *s;

 bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop");

 modem_init();

 cli_init();

 run_preboot_environment_command();

 s = bootdelay_process();

 if (cli_process_fdt(&s))

 cli_secure_boot_cmd(s);

 autoboot_command(s);

 cli_loop();

}

首先用bootstage_mark_name()来标记uboot的运行状态。

接下来执行的是modem_init()。该函数什么都没做,忽略。

接下来执行的是位于\/uboot-root\/common\/cli.c中的cli_init()。里面就调用一个函数u_boot_hush_start()。该函数位于\/uboot-root\/common\/cli_hush.c中,主要是初始化一个变量top_vars,其代码如下:


int u_boot_hush_start(void)

{

 if (top_vars == NULL) {

 top_vars = malloc(sizeof(struct variables));

 top_vars->name = "HUSH_VERSION";

 top_vars->value = "0.01";

 top_vars->next = NULL;

 top_vars->flg_export = 0;

 top_vars->flg_read_only = 1;

 }

 return 0;

}

通过代码分析,该函数的内容只执行一次。开始时top_vars为NULL,因此得到初始化。之后因为if判断不满足,所以以后不再执行。

接下来执行的是run_preboot_environment_command()。该函数什么都没做,忽略。

接下来执行的是bootdelay_process()。该函数位于\/uboot-root\/common\/autoboot.c中,其代码如下:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值