- static int run_main_loop(void)
- {
- #ifdef CONFIG_SANDBOX
- sandbox_main_loop_init();
- #endif
- /* main_loop() can return to retry autoboot, if so just run it again */
- for (;;)
- main_loop();
- return 0;
- }
- void main_loop(void)
- {
- const char *s;
-
- bootstage_mark_name(BOOTSTAGE_ID_MAIN_LOOP, "main_loop");
-
- #ifndef CONFIG_SYS_GENERIC_BOARD
- puts("Warning: Your board does not use generic board. Please read\n");
- puts("doc/README.generic-board and take action. Boards not\n");
- puts("upgraded by the late 2014 may break or be removed.\n");
- #endif
-
- #ifdef CONFIG_VERSION_VARIABLE
- setenv("ver", version_string); /* set version variable */
- #endif /* CONFIG_VERSION_VARIABLE */
-
- cli_init();
-
- run_preboot_environment_command();
-
- #if defined(CONFIG_UPDATE_TFTP)
- update_tftp(0UL, NULL, NULL);
- #endif /* CONFIG_UPDATE_TFTP */
-
- s = bootdelay_process();
- if (cli_process_fdt(&s))
- cli_secure_boot_cmd(s);
-
- autoboot_command(s);
-
- cli_loop();
- }
main_loop 函数中:
第 5 行,调用 bootstage_mark_name 函数,打印出启动进度。
const char __weak version_string[] = U_BOOT_VERSION_STRING;
U-Boot 2016.03 (Jul 07 2023 - 17:11:27 +0800)
- void cli_loop(void)
- {
- #ifdef CONFIG_SYS_HUSH_PARSER
- parse_file_outer();
- /* This point is never reached */
- for (;;);
- #else
- cli_simple_loop();
- #endif /*CONFIG_SYS_HUSH_PARSER*/
- }
-
- void cli_init(void)
- {
- #ifdef CONFIG_SYS_HUSH_PARSER
- u_boot_hush_start();
- #endif
-
- #if defined(CONFIG_HUSH_INIT_VAR)
- hush_init_var();
- #endif
- }
- int parse_file_outer(void)
- {
- int rcode;
- struct in_str input;
-
- setup_file_in_str(&input);
- rcode = parse_stream_outer(&input, FLAG_PARSE_SEMICOLON);
- return rcode;
- }
- static int parse_stream_outer(struct in_str *inp, int flag)
- {
- ......
-
- do {
- ......
- if (rcode != 1 && ctx.old_flag == 0) {
- {
- run_list(ctx.list_head);
- }
- ......
-
- } while (rcode != -1 && !(flag & FLAG_EXIT_FROM_LOOP) &&
- (inp->peek != static_peek || b_peek(inp)));
- ......
- }
函数调用关系如下: