在uboot源碼目錄下生成tags文件: ctags –R
u-boot起始地址為0x0000000,4字節對其,文本段.text說明第一個執行的文件是在Arch/arm/cpu/armv7/start.o 所以下一步找這個目錄的start.s文件
從 arch/arm/cpu/armv7/start.S構建異常向量表
b reset------>
設置cpu為svc模式,關閉所有中斷------>
bl cpu_init_cp15
關閉數據和指令
關閉cache TLB
關閉mmu相關的東西------>
bl cpu_init_crit------>
b lowlevel_init 切換到了board/samsung/fs4412/lowlevel_init.S
設置堆棧,lr入棧
關閉看門狗------>
判斷uboot是否已經運行到物理內存中(系統時鐘等初始化交給之前的代碼完成)------>
bl uart_asm_init
串口的初始化------>
bl _main (arch/arm/cpu/armv7/start.S)
設置C語言運行的基本環境------> arch/arm/lib/alt0.s
bl board_init_f 切換到 arch/arm/lib/board.c
初始化一些全局數據(比如 0x40000100就是給內核傳遞參數地址)
進行各種板級初始化。
b relocate_code 進行uboot代碼重定位。 切換到arch/arm/cpu/armv7/start.S
需要對搬移后的代碼進行符號重定向,避免絕對跳轉失敗------>
設置C語言運行終的環境 arch/arm/lib/crt0.S
bss段的清零操作。
第二階段:完善uboot功能
ldr pc, =board_init_r
完全進入C語言的代碼
702 for (;;) {
703 main_loop();
704 }