Edit online

命令行阶段

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 都会进行按键中断检查。