[ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复
生活随笔
收集整理的這篇文章主要介紹了
[ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
ATF點滴
- 1、設置運行時棧SP
- 2、寄存器的保存和恢復的實現
- 3、寄存器的保存和恢復的使用場景
★★★ 友情鏈接 : 個人博客導讀首頁—點擊此處 ★★★
1、設置運行時棧SP
bl31_entrypoint—>el3_entrypoint_common---->plat_set_my_stack—>platform_set_stack—>platform_get_stack
動態找到該cpu的棧地址
func platform_set_stackmov x9, x30 // lrbl platform_get_stackmov sp, x0ret x9 endfunc platform_set_stack /** This macro calculates the base address of the current CPU's MP stack* using the plat_my_core_pos() index, the name of the stack storage* and the size of each stack* Out: X0 = physical address of stack base* Clobber: X30, X1, X2*/ .macro get_my_mp_stack _name, _size bl plat_my_core_pos ldr x2, =(\_name + \_size) mov x1, #\_size madd x補充madd指令小知識
MADD Rd, Rn, Rm, Ra => Rd = Ra + Rn*Rm
2、寄存器的保存和恢復的實現
在tee/ree系統切換時,需要保存和恢復一些寄存器,這些寄存器包含:
- general registers
- system registers
- fp registers
- EL3_register
函數的實現
例如general registers的保存和恢復,如X0其實是保存在了當前sp + CTX_GPREGS_OFFSET + CTX_GPREG_X0處,也就是保存在了棧中
3、寄存器的保存和恢復的使用場景
在TEE/REE雙系統切換的時候,會先保存當前系統的general registers、system registers,然后再恢復目標系統的general registers、system registers. 具體的操作流程如下圖所示
總結
以上是生活随笔為你收集整理的[ATF]-TEE/REE系统切换时ATF的寄存器的保存和恢复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [optee]-TA的签名和验签
- 下一篇: [toolchains]-ARM Too