3.7.5. 命令行阶段
board_init_r
函数最后进入 run_main_loop
执行 Autoboot 命令或者进入控制台。
board_init_r(); // common/board_r.c
|-> run_main_loop(); // common/board_r.c
|-> main_loop(); // common/main.c
|-> cli_init(); // 初始化 command line
| |-->u_boot_hush_start();
|
|-> bootdelay_process(); // common/autoboot.c
| | // 获取boot delay时间参数,从env中获取bootcmd参数
| |-> s = env_get("bootcmd");
| // 获取 bootcmd 的内容
|-> cli_process_fdt(); // common/cli.c
| // 尝试从 DTS 中获取 bootcmd 参数,DTS 的配置优先级高于 ENV
|-> autoboot_command(); // common/autoboot.c
|-> abortboot();
| // 检查是否需要终止启动
|
|-> run_command_list(); // common/cli.c
// 执行 bootcmd 的内容,一般是执行脚本
倒计时读秒
进入命令行的主循环之后,U-Boot 首先获取 boot delay 的时间设置。Boot delay 的时间 是指 U-Boot 在执行启动命令之前的倒计时读秒的时间,该时间在 ZX 平台上在环境变量 env.txt 中进行配置:
bootdelay=3
如果不需要倒计时读秒,可以将该设置改为 0 。
启动命令
U-Boot 检查并且默认执行 bootcmd
所指定的启动命令。该启动命令可以在两个地方设置:
环境变量中设置
DTS 中设置
ZX 平台上通过环境变量 env.txt 设置,同行是一段启动脚本。
按键中断
进入 autoboot_command
在执行启动命令之前,U-Boot 还会检查用户是否有通过串口
按键中断启动流程。该检查无论 bootdelay 时间是否为 0 都会进行。