国产成人高清亚洲,日韩无码一区二区,国产精品亚洲综合专区片高清久久久,欧美日韩国产区在线观看,sese在线,亞洲綜合久久精品無碼色欲,日韩亚洲av三级片

飛凌嵌入式ElfBoard ELF 1板卡-uboot啟動流程分析之uboot啟動階段

05/30 09:25
436
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

uboot啟動可分為匯編語言執(zhí)行和C語言執(zhí)行兩個階段,兩個階段以_main函數(shù)為分界。

uboot第一階段由_start (arch/arm/lib/vectors.S)進入,然后跳轉(zhuǎn)到reset(arch/arm/cpu/armv7/start.S)函數(shù), reset函數(shù)進行設置CPU運行模式,關閉中斷等一系列CPU內(nèi)部環(huán)境初始化后,跳轉(zhuǎn)到_main函數(shù)。

第二階段通過_main函數(shù)進入,_main主要做了如下功能:

一、設置C代碼的運行環(huán)境,為調(diào)用board_init_f接口做準備:

(一)設置堆棧(C代碼的函數(shù)調(diào)用,堆棧是必須的);

(二)調(diào)用board_init_f接口,從堆棧開始的地方,為u-boot中global data數(shù)據(jù)結構,分配空間;

(三)調(diào)用board_init_f_init_reserve接口,對gd進行初始化;

二、調(diào)用board_init_f函數(shù),完成一些前期的初始化工作,例如:

(一)設置gd結構體中各成員在內(nèi)存中的地址,包括環(huán)境變量地址、uboot重定位的地址;

(二)串口初始化,打印板卡信息;

三、根據(jù)board_init_f 指定的uboot重定位的地址,執(zhí)行u-boot的relocation重定位操作。

四、清除BSS段。

五、調(diào)用board_init_r函數(shù),執(zhí)行后續(xù)的板級初始化操作,包括各種外設接口、中斷、環(huán)境變量等。最后調(diào)用run_main_loop()函數(shù),進入倒計時等待,等待超時后執(zhí)行bootcmd啟動內(nèi)核。

具體流程如下圖:

相關推薦