ARM32的OP-TEE與ARM64的OP-TEE啟動過程大致相同。ARM64的OP-TEE的_start函數定義在generic_entry_a64.S文件中,而且該函數不像ARM32位系統一樣會進入reset中去執行OP-TEE啟動,而是直接在_start函數中就完成整個啟動過程,
在進行初始化操作之前會注冊一個異常向量表,該異常向量表會在喚醒從核階段被使用,當主核通知喚醒從核時,從核會查找該異常向量表,然后命中對應的處理函數并執行從核的啟動操作。
ARM64的OP-TEE的啟動過程與ARM32的OP-TEE的啟動過程幾乎一樣。ARM64位系統的_start函數內容說明如下:
FUNC _start , :
mov x19, x0 //保存paged_table的地址到x19中
mov x20, x2 //保存device tree的地址到x20中
adr x0, reset_vect_table //獲取異常向量表的地址
msr vbar_el1, x0 //將異常向量表的地址寫入VBAR寄存器中
isb
//設置系統控制寄存器,禁止cache等操作
mrs x0, sctlr_el1
mov x1, #(SCTLR_I | SCTLR_A | SCTLR_SA)
orr x0, x0, x1
msr sctlr_el1, x0
isb
//復制OP-TEE鏡像中的init部分到內存中
copy_init:
ldp x3, x4, [x1], #16
stp x3, x4, [x0], #16
cmp x0, x2
b.lt copy_init
msr daifclr, #DAIFBIT_ABT //使能異常處理
adr x0, __text_start //將__text_start的地址保存到x0中
adrp x1, __end //將_end的地址保存到x1中
add x1, x1, :lo12:__end
sub x1, x1, x0
bl inv_dcache_range //關閉數據cache
bl console_init //初始化console
bl core_init_mmu_map //初始化MMU的頁表
bl core_init_mmu_regs //將MMU的頁表信息寫入TTBRx寄存器中
bl cpu_mmu_enable //使能MMU
bl cpu_mmu_enable_icache //使能MMU的指令cache
bl cpu_mmu_enable_dcache //使能MMU的數據cache
mov x0, x19 //將paged_table的地址保存到x0中
mov x1, #-1
mov x2, x20 //將device tree的地址保存到x2中
//使用device tree和paged_table作為參數開始OP-TEE的啟動
bl generic_boot_init_primary
mov x19, x0
adr x0, __text_start
add x1, x1, :lo12:__end
sub x1, x1, x0
bl flush_dcache_range //刷新數據cache
bl thread_clr_boot_thread //清空系統線程的狀態
mov x1, x19
//將TEESMC_OPTEED_RETURN_ENTRY_DONE保存到x0
mov x0, #TEESMC_OPTEED_RETURN_ENTRY_DONE
smc #0 //調用SMC切換到normal world狀態
b . /* SMC不應該有返回操作 */
END_FUNC _start
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
ARM
+關注
關注
134文章
9164瀏覽量
368625 -
函數
+關注
關注
3文章
4345瀏覽量
62877 -
TEE
+關注
關注
0文章
29瀏覽量
10283
發布評論請先 登錄
相關推薦
ARM32位設計
ARM32位設計,兼容16位指令集,現在被軟銀收購ARM1-11 從功能機到智能手機新款命名 :cortex V7-A 手機智能設備-R 實時操作系統-M嵌入式開發stm32 性能從
發表于 08-24 06:51
請問HSE op-tee是什么關系?
我有個問題。S32G同時支持HSE和op-tee。S32G的安全加解密和證書管理是通過HSE完成的嗎?op-tee 和 HSE 只是其中之一嗎?有沒有相關的設計文檔?謝謝
發表于 04-06 06:26
Core 3399KJ Linux根文件系統鏡像(arm64/arm32)
電子發燒友網站提供《Core 3399KJ Linux根文件系統鏡像(arm64/arm32).txt》資料免費下載
發表于 09-14 10:08
?3次下載
Core 3399J Linux根文件系統鏡像(arm64/arm32)
電子發燒友網站提供《Core 3399J Linux根文件系統鏡像(arm64/arm32).txt》資料免費下載
發表于 09-14 09:24
?0次下載
Core 3399 JD4 V2文件系統Linux根文件系統鏡像(arm64/arm32)
電子發燒友網站提供《Core 3399 JD4 V2文件系統Linux根文件系統鏡像(arm64/arm32).txt》資料免費下載
發表于 09-16 09:44
?10次下載
ROC RK3399 PC Pro文件系統Linux根文件系統鏡像(arm64/arm32)
電子發燒友網站提供《ROC RK3399 PC Pro文件系統Linux根文件系統鏡像(arm64/arm32).txt》資料免費下載
發表于 09-20 10:59
?5次下載
AIO 3399ProC Linux根文件系統鏡像(arm64/arm32)
電子發燒友網站提供《AIO 3399ProC Linux根文件系統鏡像(arm64/arm32).txt》資料免費下載
發表于 09-21 09:52
?11次下載
OP-TEE中安全驅動的框架
OP-TEE中的安全驅動是OP-TEE操作安全設備的載體。 TA通過調用某個安全驅動的接口就可實現對特定安全設備的操作。安全驅動在OP-TEE中的軟件框架如圖22-2所示。 (其實這里,你要搞清楚
OP-TEE的內核初始化函數調用
generic_boot_init_primary函數內容 generic_boot_init_primary函數是OP-TEE建立系統運行環境的入口函數,該函數會進行建立線程運行空間、初始化
OP-TEE服務項的啟動
OP-TEE服務項的啟動分為: service_init以及service_init_late ,需要被啟動的服務項通過使用這兩個宏,在編譯時,相關服務的內容將會被保存到initcall1
OP-TEE的安全存儲的簡介
OP-TEE的安全存儲的簡介 OP-TEE的安全存儲功能是OP-TEE為用戶提供的安全存儲機制。用戶可使用安全存儲功能來保存敏感數據、密鑰等信息。 使用OP-TEE安全存儲功能保存數據
OP-TEE安全存儲安全文件的格式
安全文件、dirf.db文件的數據格式和操作過程 OP-TEE的安全存儲功能可滿足用戶保存敏感數據的需求,需要被保存的數據會被加 密保存到文件系統或RPMB分區中 。 當選擇將數據保存到文件系統中
評論