关键流程设计
系统初始化
系统初始化的过程中,并不会设计不必要的驱动等模块的初始化。所有的驱动和模块,
都只在需要使用时进行初始化,这样可以减少启动过程中的不必要时间消耗,加快启动速度。
_start //bsp/artinchip/sys/d21x/startup_gcc.S |-> save_boot_params // bsp/artinchip/sys/d21x/boot_param_gcc.S |-> icache_enable(); |-> dcache_enable(); // bsp/artinchip/sys/d21x/system.c |-> SystemInit(); |-> main(); // application/baremetal/bootloader/main.c |-> board_init(); | |-> heap_init(); | |-> aic_board_sysclk_init(); // target/d21x/<board>/board.c | |-> aic_board_pinmux_init(); | |-> uart_init(cons_uart); | |-> stdio_set_uart(cons_uart); |-> console_init();
启动和升级
main(); // application/baremetal/bootloader/main.c
|-> board_init();
|-> console_init();
|-> bd = aic_get_boot_device();
| // 根据启动参数,判断当前的启动设备
|
|-> console_set_bootcmd("nor_boot");
| // 此处根据 boot_device 的类型,设置不同的 bootcmd,比如 aicupg usb 0
|
|-> console_loop();
|-> console_run_cmd(g_console->bootcmd);
|-> _console_loop(g_console);
// 当执行 bootcmd 失败时,会进入串口控制台,等待用户交互