系統上電之后首先會運行ChipRom,之后會跳轉到ATF的bl1中繼續執行。bl1主要初始化CPU、設定異常向量、將bl2的鏡像加載到安全RAM中,然后跳轉到bl2中開始運行。
bl1的主要代碼存放在bl1目錄中,bl1的鏈接文件是bl1/bl1.ld.s文件,該文件指定bl1的入口函數是bl1_entrypoint。
AArch32的該函數定義在bl1/aarch32/bl1_entrypoint.S文件中,AArch64的該函數定義在bl1/aarch64/bl1_entrypoint. S文件中。bl1的執行流程如圖所示。
bl1執行流程
bl1_entrypoint函數說明
bl1_entrypoint函數主要完成ARMv8架構中EL3執行環境的基礎初始化、設定異常向量表、加載bl2的鏡像文件到內存中并進行跳轉到bl2繼續執行。該函數的內容如下:
func bl1_entrypoint
/* EL3級別運行環境的初始化,該函數定義在include/common/aarch64/el3_common_macros.S文
件中*/
el3_entrypoint_common
_set_endian=1
_warm_boot_mailbox=! PROGRAMMABLE_RESET_ADDRESS
_secondary_cold_boot=! COLD_BOOT_SINGLE_CPU
_init_memory=1
_init_c_runtime=1
_exception_vectors=bl1_exceptions
bl bl1_early_platform_setup //調用bl1_early_platform_setup函數完成底層初始化
bl bl1_plat_arch_setup //調用bl1_plat_arch_setup完成平臺初始化
bl bl1_main //調用bl1_main函數,初始化驗證模塊,加載下一階段的
image到RAM中
b el3_exit //調用el3_exit函數,跳轉到下一個image(bl2)
endfunc bl1_entrypoint
el3_entrypoint_common函數執行時帶入的參數包括大小端標識、屬于冷啟動還是重啟操作、是否是從核的啟動、是否需要進行內存初始化、是否需要建立C語言運行環境(棧初始化)、異常向量表地址注冊等。
-
ARM
+關注
關注
134文章
9046瀏覽量
366819 -
函數
+關注
關注
3文章
4306瀏覽量
62431 -
Code
+關注
關注
0文章
68瀏覽量
15371
發布評論請先 登錄
相關推薦
評論