ARM32的OP-TEE與ARM64的OP-TEE啟動過程大致相同。ARM64的OP-TEE的_start函數(shù)定義在generic_entry_a64.S文件中,而且該函數(shù)不像ARM32位系統(tǒng)一樣會進入reset中去執(zhí)行OP-TEE啟動,而是直接在_start函數(shù)中就完成整個啟動過程,
在進行初始化操作之前會注冊一個異常向量表,該異常向量表會在喚醒從核階段被使用,當主核通知喚醒從核時,從核會查找該異常向量表,然后命中對應的處理函數(shù)并執(zhí)行從核的啟動操作。
ARM64的OP-TEE的啟動過程與ARM32的OP-TEE的啟動過程幾乎一樣。ARM64位系統(tǒng)的_start函數(shù)內(nèi)容說明如下:
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
//設置系統(tǒng)控制寄存器,禁止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部分到內(nèi)存中
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 //關閉數(shù)據(jù)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的數(shù)據(jù)cache
mov x0, x19 //將paged_table的地址保存到x0中
mov x1, #-1
mov x2, x20 //將device tree的地址保存到x2中
//使用device tree和paged_table作為參數(shù)開始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 //刷新數(shù)據(jù)cache
bl thread_clr_boot_thread //清空系統(tǒng)線程的狀態(tài)
mov x1, x19
//將TEESMC_OPTEED_RETURN_ENTRY_DONE保存到x0
mov x0, #TEESMC_OPTEED_RETURN_ENTRY_DONE
smc #0 //調(diào)用SMC切換到normal world狀態(tài)
b . /* SMC不應該有返回操作 */
END_FUNC _start
-
ARM
+關注
關注
135文章
9450瀏覽量
385630 -
函數(shù)
+關注
關注
3文章
4400瀏覽量
66353 -
TEE
+關注
關注
0文章
29瀏覽量
10592
發(fā)布評論請先 登錄
ARM32位設計
請問HSE op-tee是什么關系?
ARM64與ARM32 的Linux程序區(qū)別在哪里

Core 3399KJ Linux根文件系統(tǒng)鏡像(arm64/arm32)

Core 3399J Linux根文件系統(tǒng)鏡像(arm64/arm32)

Core 3399 JD4 V2文件系統(tǒng)Linux根文件系統(tǒng)鏡像(arm64/arm32)

ROC RK3399 PC Pro文件系統(tǒng)Linux根文件系統(tǒng)鏡像(arm64/arm32)

AIO 3399ProC Linux根文件系統(tǒng)鏡像(arm64/arm32)

OP-TEE中安全驅(qū)動的框架

OP-TEE的內(nèi)核初始化函數(shù)調(diào)用

OP-TEE服務項的啟動
OP-TEE的安全存儲的簡介

OP-TEE安全存儲安全文件的格式

評論