1、 系統上電後
由uboot的鏈結檔案\u-boot\arch\mips\cpu\u-boot.lds知
entry(_start)程式入口點是\u-boot\arch\mips\cpu\xburst\start.s
2、 由la t9, board_init_f 知跳轉到board_init_f 函式(\u-boot\arch\mips\lib\board.c)
主要工作:初始化記憶體
3、 回到\u-boot\arch\mips\cpu\xburst\start.s 執行relocate_code:
4、執行la t9, board_init_r 跳轉到board_init_r 函式(\u-boot\arch\mips\lib\board.c)
主要工作:board_early_init_r();
serial_initialize();
env_relocate();
stdio_init();
console_init_r();
最後進入main_loop(); 跳轉到\u-boot\common\main.c
5、 執行main.c
p = getenv("preboot"); 取得環境變數中的啟動命令
run_command_list(p,-1, 0); 執行這個命令列
len = readline(config_sys_prompt); 讀取uboot模式下的命令
main.c**
void main_loop(void)
; int len;
int rc = 1;
int flag;
#endif
#ifdef config_preboot
char *p;
#endif
bootstage_mark_name(bootstage_id_main_loop, "main_loop");
#ifdef config_modem_support
debug("debug: main_loop: do_mdm_init=%d\n", do_mdm_init);
if (do_mdm_init)
#endif /* config_modem_support */
#ifdef config_version_variable
#endif /* config_version_variable */
#ifdef config_sys_hush_parser
u_boot_hush_start();
#endif
#if defined(config_hush_init_var)
hush_init_var();
#endif
#ifdef config_preboot
p = getenv("preboot"); //從環境變數中取得命令列
if (p != null)
#endif /* config_preboot */
#if defined(config_update_tftp)
update_tftp(0ul);
#endif /* config_update_tftp */
#ifdef config_bootdelay
process_boot_delay();
#endif
/* * main loop for monitor command processing
*/#ifdef config_sys_hush_parser
parse_file_outer();
/* this point is never reached */
for (;;);
#else
for (;;)
#endif
len = readline (config_sys_prompt); //讀取命令
flag = 0; /* assume no special flags for now */
if (len > 0)
strcpy (lastcommand, console_buffer); //儲存輸入的資料
else if (len == 0)
flag |= cmd_flag_repeat; //如果輸入資料為零,則重複執行上次的命令,如果上次輸入的是乙個命令的話
#ifdef config_boot_retry_time
else if (len == -2)
#endif
if (len == -1)
puts ("\n");
else
rc = run_command(lastcommand, flag); //執行命令
if (rc <= 0)
}#endif /*config_sys_hush_parser*/
}
u boot 啟動流程(mips)
u boot的啟動過程比較簡單,大致做下面的工作 1 cpu初始化 2 時鐘,串列埠,記憶體 ddr ram 初始化 3 記憶體劃分,分配棧,資料,配置引數,以及u boot 在記憶體中的位置。4 對u boot 做relocate 5 初始化 malloc,flash,pci 以及外設 比如,網口...
UBoot流程分析
uboot程式分析 程式入口分析 第一階段bl1程式分析 第二階段bl2程式分析 解壓uboot原始碼,開啟頂層makefile,每個uboot所支援的開發板在makefile中都會有乙個配置選項,在e uboot board samsung smdk2440,有乙個uboot.lds鏈結器指令碼檔...
基於mips架構的uboot啟動流程(3)
要注意mips具有流水線可見性,所以跟在跳轉指令後的下一條指令,在執行跳轉到的地方前,都會執行,這個叫分支延遲。但是編譯器會隱藏該特性,但可以通過設定 set noreorder 來禁止編譯器重新組織 順序。每個板子都有自己的lds檔案。這個主要是用來說明編譯生成的指令,及執行過程中用到的資料放置的...