ARM32的OP-TEE與ARM64的OP-TEE啟動(dòng)過(guò)程大致相同。ARM64的OP-TEE的_start函數(shù)定義在generic_entry_a64.S文件中,而且該函數(shù)不像ARM32位系統(tǒng)一樣會(huì)進(jìn)入reset中去執(zhí)行OP-TEE啟動(dòng),而是直接在_start函數(shù)中就完成整個(gè)啟動(dòng)過(guò)程,
在進(jìn)行初始化操作之前會(huì)注冊(cè)一個(gè)異常向量表,該異常向量表會(huì)在喚醒從核階段被使用,當(dāng)主核通知喚醒從核時(shí),從核會(huì)查找該異常向量表,然后命中對(duì)應(yīng)的處理函數(shù)并執(zhí)行從核的啟動(dòng)操作。
ARM64的OP-TEE的啟動(dòng)過(guò)程與ARM32的OP-TEE的啟動(dòng)過(guò)程幾乎一樣。ARM64位系統(tǒng)的_start函數(shù)內(nèi)容說(shuō)明如下:
FUNC _start , :
mov x19, x0 //保存paged_table的地址到x19中
mov x20, x2 //保存device tree的地址到x20中
adr x0, reset_vect_table //獲取異常向量表的地址
msr vbar_el1, x0 //將異常向量表的地址寫(xiě)入VBAR寄存器中
isb
//設(shè)置系統(tǒng)控制寄存器,禁止cache等操作
mrs x0, sctlr_el1
mov x1, #(SCTLR_I | SCTLR_A | SCTLR_SA)
orr x0, x0, x1
msr sctlr_el1, x0
isb
//復(fù)制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 //關(guān)閉數(shù)據(jù)cache
bl console_init //初始化console
bl core_init_mmu_map //初始化MMU的頁(yè)表
bl core_init_mmu_regs //將MMU的頁(yè)表信息寫(xiě)入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ù)開(kāi)始OP-TEE的啟動(dòng)
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不應(yīng)該有返回操作 */
END_FUNC _start
-
ARM
+關(guān)注
關(guān)注
134文章
9167瀏覽量
369217 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4346瀏覽量
62973 -
TEE
+關(guān)注
關(guān)注
0文章
29瀏覽量
10307
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
ARM32位設(shè)計(jì)
請(qǐng)問(wèn)HSE op-tee是什么關(guān)系?
ARM64與ARM32 的Linux程序區(qū)別在哪里
![<b class='flag-5'>ARM64</b>與<b class='flag-5'>ARM32</b> 的Linux程序區(qū)別在哪里](https://file.elecfans.com/web1/M00/A1/21/o4YBAF1FTB2Adw23AAAwXxzwlds391.gif)
Core 3399KJ Linux根文件系統(tǒng)鏡像(arm64/arm32)
![Core 3399KJ Linux根文件系統(tǒng)鏡像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Core 3399J Linux根文件系統(tǒng)鏡像(arm64/arm32)
![Core 3399J Linux根文件系統(tǒng)鏡像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Core 3399 JD4 V2文件系統(tǒng)Linux根文件系統(tǒng)鏡像(arm64/arm32)
![Core 3399 JD4 V2文件系統(tǒng)Linux根文件系統(tǒng)鏡像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
ROC RK3399 PC Pro文件系統(tǒng)Linux根文件系統(tǒng)鏡像(arm64/arm32)
![ROC RK3399 PC Pro文件系統(tǒng)Linux根文件系統(tǒng)鏡像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
AIO 3399ProC Linux根文件系統(tǒng)鏡像(arm64/arm32)
![AIO 3399ProC Linux根文件系統(tǒng)鏡像(<b class='flag-5'>arm64</b>/<b class='flag-5'>arm32</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
OP-TEE中安全驅(qū)動(dòng)的框架
![<b class='flag-5'>OP-TEE</b>中安全驅(qū)動(dòng)的框架](https://file1.elecfans.com/web2/M00/AD/0B/wKgZomU_YtqAcFF-AAHj_rJOxsY762.jpg)
OP-TEE的內(nèi)核初始化函數(shù)調(diào)用
![<b class='flag-5'>OP-TEE</b>的內(nèi)核初始化函數(shù)調(diào)用](https://file1.elecfans.com/web2/M00/AC/27/wKgaomVDdK2AcJsKAARQFQOrVvs468.jpg)
OP-TEE服務(wù)項(xiàng)的啟動(dòng)
OP-TEE的安全存儲(chǔ)的簡(jiǎn)介
![<b class='flag-5'>OP-TEE</b>的安全存儲(chǔ)的簡(jiǎn)介](https://file1.elecfans.com/web2/M00/B1/94/wKgZomVcJCqAf6dKAAFGSxV5wLM284.jpg)
OP-TEE安全存儲(chǔ)安全文件的格式
![<b class='flag-5'>OP-TEE</b>安全存儲(chǔ)安全文件的格式](https://file1.elecfans.com/web2/M00/AF/D0/wKgaomVcJ3eAWRTWAAM5JkwBVLU530.jpg)
評(píng)論