之前對(duì)這個(gè)uboot的源碼了解有些許遺忘。最近做AVB校驗(yàn),需要uboot到kernel的這個(gè)過程。這里再復(fù)習(xí)一下。
與大多數(shù)BootLoader一樣,uboot的啟動(dòng)過程分為BL1和BL2兩個(gè)階段。
BL1階段通常是開發(fā)板的配置等設(shè)備初始化代碼,需要依賴依賴于SoC體系結(jié)構(gòu),通常用匯編語言來實(shí)現(xiàn);
BL2階段主要是對(duì)外部設(shè)備如網(wǎng)卡、Flash等的初始化以及uboot命令集等的自身實(shí)現(xiàn),通常用C語言來實(shí)現(xiàn)。
1、BL1階段
uboot的BL1階段代碼通常放在start.s文件中,用匯編語言實(shí)現(xiàn),其主要代碼功能如下:
? (1) 指定uboot的入口。在鏈接腳本uboot.lds中指定uboot的入口為start.S中的_start。
? (2)設(shè)置異常向量(exception vector)
? (3)關(guān)閉IRQ、FIQ,設(shè)置SVC模式
? (4)關(guān)閉L1 cache、設(shè)置L2 cache、關(guān)閉MMU
? (5)根據(jù)OM引腳確定啟動(dòng)方式
? (6)在SoC內(nèi)部SRAM中設(shè)置棧
? (7)lowlevel_init(主要初始化系統(tǒng)時(shí)鐘、SDRAM初始化、串口初始化等)
? (8)設(shè)置開發(fā)板供電鎖存
? (9)設(shè)置SDRAM中的棧
? (10)將uboot從SD卡拷貝到SDRAM中
? (11)設(shè)置并開啟MMU
? (12)通過對(duì)SDRAM整體使用規(guī)劃,在SDRAM中合適的地方設(shè)置棧
? (13)清除bss段,遠(yuǎn)跳轉(zhuǎn)到start_armboot執(zhí)行,BL1階段執(zhí)行完
2、BL2階段
start_armboot函數(shù)位于lib_arm/board.c中,是C語言開始的函數(shù),也是BL2階段代碼中C語言的 主函數(shù),同時(shí)還是整個(gè)u-boot(armboot)的主函數(shù),BL2階段的主要功能如下:
? (1)規(guī)劃uboot的內(nèi)存使用
? (2)遍歷調(diào)用函數(shù)指針數(shù)組init_sequence中的初始化函數(shù)
? (3)初始化uboot的堆管理器mem_malloc_init
? (4)初始化SMDKV210開發(fā)板的SD/MMC控制器mmc_initialize
? (5)環(huán)境變量重定位env_relocate
? (6)將環(huán)境變量中網(wǎng)卡地址賦值給全局變量的開發(fā)板變量
? (7)開發(fā)板硬件設(shè)備的初始化devices_init
? (8)跳轉(zhuǎn)表jumptable_init
? (9)控制臺(tái)初始化console_init_r
? (10)網(wǎng)卡芯片初始化eth_initialize
? (11)uboot進(jìn)入主循環(huán)main_loop
這里主要對(duì)第二個(gè)階段BL2進(jìn)行一個(gè)分析。
3、start_armboot函數(shù)分析
start_armboot函數(shù)的主要功能如下:
? (1)遍歷調(diào)用函數(shù)指針數(shù)組init_sequence中的初始化函數(shù)
依次遍歷調(diào)用函數(shù)指針數(shù)組init_sequence中的函數(shù),如果有函數(shù)執(zhí)行出錯(cuò),則執(zhí)行hang函數(shù),打印出”### ERROR ### Please RESET the board ###”,進(jìn)入死循環(huán)。
? (2)初始化uboot的堆管理器mem_malloc_init
? (3)初始化SMDKV210的SD/MMC控制器mmc_initialize
? (4)環(huán)境變量重定位env_relocate
? (5)將環(huán)境變量中網(wǎng)卡地址賦值給全局變量的開發(fā)板變量
? (6)開發(fā)板硬件設(shè)備的初始化devices_init
? (7)跳轉(zhuǎn)表jumptable_init
? (8)控制臺(tái)初始化console_init_r
? (9)網(wǎng)卡芯片初始化eth_initialize
? (10)uboot進(jìn)入主循環(huán)main_loop
-
soc
+關(guān)注
關(guān)注
38文章
4173瀏覽量
218422 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4333瀏覽量
62705 -
開發(fā)板
+關(guān)注
關(guān)注
25文章
5067瀏覽量
97619 -
Uboot
+關(guān)注
關(guān)注
4文章
125瀏覽量
28249
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論