ATF中bl32的啟動
bl31中的runtime_svc_init函數會初始化OP-TEE對應的服務,通過調用該服務項的初始化函數來完成OP-TEE的啟動。對于OP-TEE的服務項會通過DECLARE_RT_SVC宏在編譯時被存放到rt_svc_des段中。
該段中的init成員會被初始化成opteed_setup函數,由此開始進入到OP-TEE OS的啟動。整個流程如圖下所示。
bl32執行流程
1. opteed_setup函數
該函數是ATF啟動OP-TEE的入口函數,該函數會
- ? 查找到OP-TEE鏡像的信息、
- ? 檢查OP-TEE的入口函數指針是否有效、
- ? 設置OP-TEE運行的上下文,
- ? 然后調用OP-TEE的入口函數,
- ? 開始執行OP-TEE的啟動。
該函數的內容如下:
int32_t opteed_setup(void)
{
entry_point_info_t *optee_ep_info;
uint32_t linear_id;
linear_id = plat_my_core_pos(); //獲取當前core的ID
/* 獲取bl32(OP-TEE)鏡像的描述信息 */
optee_ep_info = bl31_plat_get_next_image_ep_info(SECURE);
if (! optee_ep_info) {
WARN("No OPTEE provided by BL2 boot loader, Booting device"
" without OPTEE initialization. SMC's destined for OPTEE"
" will return SMC_UNKn");
return 1;
}
/* 檢查OP-TEE鏡像指定的PC地址是否有效 */
if (! optee_ep_info- >pc)
return 1;
opteed_rw = OPTEE_AARCH64;
/* 初始化OP-TEE運行時CPU的smc上下文 */
opteed_init_optee_ep_state(optee_ep_info,
opteed_rw,
optee_ep_info- >pc,
&opteed_sp_context[linear_id]);
/* 使用opteed_init初始化bl32_init變量,以備在bl31中調用 */
bl31_register_bl32_init(&opteed_init);
return 0;
}
2. opteed_init函數
該函數的地址會被賦值給bl32_init變量,在bl31_main函數中會被調用,主要用來完成啟動OP-TEE的設置。該函數內容如下:
static int32_t opteed_init(void)
{
uint32_t linear_id = plat_my_core_pos();
//獲取core的執行上下文變量
optee_context_t *optee_ctx = &opteed_sp_context[linear_id];
entry_point_info_t *optee_entry_point;
uint64_t rc;
/* 獲取OPTEE image的信息 */
optee_entry_point = bl31_plat_get_next_image_ep_info(SECURE);
assert(optee_entry_point);
/* 使用optee image的entry point信息初始化CPU的上下文 */
cm_init_my_context(optee_entry_point);
/* 開始設置CPU參數,最終會調用opteed_enter_sp函數執行跳轉到OP-TEE的操作 */
rc = opteed_synchronous_sp_entry(optee_ctx);
assert(rc ! = 0);
return rc;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
函數
+關注
關注
3文章
4379瀏覽量
64735 -
編譯
+關注
關注
0文章
678瀏覽量
33939
發布評論請先 登錄
相關推薦
熱點推薦
如何使用STM32MP157F-EV1來嘗試實施安全啟動鏈?
你好ST社區, 對于一個項目,我們使用 STM32MP157F-EV1 來嘗試實施安全啟動鏈。為此,我們必須生成一個包含所有必需證書的 FIP 包。 在ST wiki中提出了兩種方法: 一個
發表于 12-27 07:56
如何在BL2中配置DDR init?
:2022 年 10 月 25 日 18:55:21錯誤:BL2:加載圖像失敗(-2)身份驗證失敗我認為我們必須更改 atf\plat\nxp\soc-ls1046\ls1046ardb\ddr_init.c 中的配置,但我不知
發表于 03-24 08:50
S32g如何在ATF中啟用安全啟動?
/cortexa53-wrs-linux/atf-s32g/2.5-r0/build/batman/release /bl2/bl2_main.o:在函數“bl2_main”
發表于 04-03 07:12
用于1028A系列的Yocto Layerscape安全啟動是怎么操作的?
我目前正在嘗試熟悉 Layerscape 處理器上的安全啟動實現。最近幾天我一直在閱讀文檔但我仍然不清楚一切是如何工作的。
據我了解,這些是啟動階段:
BL1:BootROM 代碼
BL
發表于 05-31 08:19
Yocto LS1028定制板用BL2,為了使DDR工作是否需要編輯ddr_init.c中的任何其他函數/值或ATF源中的任何其他文件??
的下一步是創建一個自定義 BL2,用于啟動基于 kirkstone 版本的 yocto 編譯。
為此,我修補了 atf repo 的 ddr_init.c 文件,這個“ddr_cfg_regs”結構
發表于 06-01 09:03
ATF的啟動過程介紹
ATF的啟動過程根據ARMv8的運行模式(AArch32/AArch64)會有所不同,但基本一致。 在AArch32中是不會去加載bl31而是將EL3或者Monitor模式的運行代碼保

ATF中如何用函數完成bl2的啟動
bl31加載到內存中后會觸發安全監控模式調用(smc)將CPU權限轉交給bl31。 該函數的主要內容和相關注釋如下: ** void bl2_main ( void
評論