命令行阶段
4 Dec 2024
Read time: 1 minute(s)
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
| | // 获取 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 首先获取 bootdelay 的时间设置。Boot delay 的时间是指 U-Boot 在执行启动命令之前的倒计时读秒的时间,该时间在 ArtInChip 平台上在环境变量 env.txt 中配置,例如配置 bootdelay 为 3,如果不需要倒计时读秒,可以将该设置改为 0 。
-
启动命令
U-Boot 检查并且默认执行 bootcmd 所指定的启动命令。该启动命令可以在两个地方设置:-
环境变量中设置
-
DTS 中设置
ArtInChip 平台上通过环境变量 env.txt 设置,同行是一段启动脚本。
-
-
按键中断
进入 autoboot_command 在执行启动命令之前,U-Boot 还会检查用户是否有通过串口按键中断启动流程。无论 bootdelay 时间是否为 0 都会进行按键中断检查。