optee中断处理的介绍(概念篇)
快速鏈接:
.
👉👉👉 個(gè)人博客筆記導(dǎo)讀目錄(全部) 👈👈👈
說(shuō)明:
辣雞文章,不用看
本節(jié)介紹optee_os如何根據(jù)SMC異常和中斷通知處理世界執(zhí)行上下文的切換。中斷通知是 IRQ/FIQ 異常,這也可能意味著世界執(zhí)行上下文的切換:正常世界到安全世界,或安全世界到正常世界。
world context switch的用例
本節(jié)列出了 OP-TEE OS 參與世界上下文切換的所有情況。Optee_os 在安全世界中執(zhí)行。世界切換由核心的安全監(jiān)視器級(jí)別/模式完成,以下稱為Monitor。
當(dāng)正常世界調(diào)用安全世界時(shí),正常世界執(zhí)行 SMC 指令。SMC 異常始終由監(jiān)視器捕獲。如果相關(guān)服務(wù)以可信操作系統(tǒng)為目標(biāo),則監(jiān)視器將切換到 OP-TEE 操作系統(tǒng)世界執(zhí)行。當(dāng)安全世界返回正常世界時(shí),OP-TEE OS 執(zhí)行一個(gè) SMC,該 SMC 被監(jiān)視器捕獲,監(jiān)視器切換回正常世界。
當(dāng) Arm GIC 發(fā)出安全中斷信號(hào)時(shí),它將到達(dá) OP-TEE OS 中斷異常向量。如果安全世界正在執(zhí)行,OP-TEE OS 將直接從其異常向量處理中斷。如果安全中斷引發(fā)時(shí)正常世界正在執(zhí)行,則監(jiān)視器向量必須處理異常并調(diào)用 OP-TEE 操作系統(tǒng)來(lái)服務(wù)中斷。
當(dāng) Arm GIC 發(fā)出非安全中斷信號(hào)時(shí),它將到達(dá)正常的世界中斷異常向量。如果正常世界正在執(zhí)行,它將直接處理來(lái)自其異常向量的異常。如果在非安全中斷引發(fā)時(shí)安全世界正在執(zhí)行,OP-TEE OS 將通過(guò)監(jiān)視器暫時(shí)返回正常世界,讓正常世界為中斷服務(wù)。
異常(中斷)向量
監(jiān)視器向量VBAR_EL3位于 AArch64 和MVBARArmv7-A/AArch32 中。在正常世界或安全世界正在執(zhí)行時(shí)可以訪問(wèn)監(jiān)視器。正在執(zhí)行的安全狀態(tài)通過(guò)SCR_NS.
可以從 SMC 異常、IRQ 或 FIQ 異常(所謂的中斷)和異步中止訪問(wèn)監(jiān)視器。顯然,監(jiān)視器中止(數(shù)據(jù)、預(yù)取、未定義)是監(jiān)視器執(zhí)行的本地操作。
監(jiān)視器可以在 OP-TEE 操作系統(tǒng)的外部(案例 CFG_WITH_ARM_TRUSTED_FW=y)。如果沒(méi)有,則提供本地安全監(jiān)視器core/arch/arm/sm。 Armv7-A 平臺(tái)應(yīng)使用 OP-TEE OS 安全監(jiān)視器。Armv8-A 平臺(tái)可能依賴Trusted Firmware A。
在監(jiān)視器外執(zhí)行時(shí),系統(tǒng)要么在正常世界 ( SCR_NS=1) 中執(zhí)行,要么在安全世界 ( SCR_NS=0) 中執(zhí)行。每個(gè)世界都有自己的異常向量表(狀態(tài)向量):
- VBAR_EL2或者VBAR_EL1非安全或VBAR_EL1安全的AArch64。
- HVBAR或者VBAR非安全或VBAR安全對(duì)ARMv7-A和AArch32。
所有 SMC 異常都被捕獲在監(jiān)視器向量中。IRQ/FIQ 異常可以被捕獲在監(jiān)視器向量或執(zhí)行世界的狀態(tài)向量中。
當(dāng)正常世界執(zhí)行時(shí),系統(tǒng)配置為路由:
- 對(duì)將轉(zhuǎn)發(fā)到 OP-TEE OS 的監(jiān)視器的安全中斷
- 對(duì)正在執(zhí)行的世界異常向量的非安全中斷。
當(dāng)安全世界正在執(zhí)行時(shí),系統(tǒng)配置為路由:
- 對(duì)正在執(zhí)行的 OP-TEE 操作系統(tǒng)異常向量的安全和非安全中斷。OP-TEE OS 應(yīng)將非安全中斷轉(zhuǎn)發(fā)到正常世界。
- Optee_os 非安全中斷總是被困在執(zhí)行世界的狀態(tài)向量中。這由 的靜態(tài)值反映SCR_(IRQ|FIQ)。
Native and foreign interrupts
從 OP-TEE OS 的角度定義了兩種類型的中斷。
- Native 中斷- 由 OP-TEE OS 處理的中斷、針對(duì) S-EL1 或安全特權(quán)模式的安全中斷
- foreign 中斷- OP-TEE OS 未處理的中斷、針對(duì)正常世界的非安全中斷或針對(duì) EL3 的安全中斷。
對(duì)于 Arm GICv2模式,本地中斷通過(guò) FIQ 發(fā)出信號(hào),外部中斷通過(guò) IRQ 發(fā)出信號(hào)。對(duì)于 Arm GICv3模式,外部中斷作為 FIQ 發(fā)出信號(hào),可由安全世界(aarch32 監(jiān)控模式或 aarch64 EL3)或正常世界處理。
可以通過(guò)設(shè)置啟用 Arm GICv3 模式CFG_ARM_GICV3=y。本機(jī)中斷必須安全地路由到 OP-TEE 操作系統(tǒng)。在安全世界執(zhí)行期間被困的外部中斷可能需要有效地路由到正常世界。
IRQ 和 FIQ 在正常世界中保持其含義,因此為清楚起見(jiàn),我們將繼續(xù)在正常世界上下文中使用這些名稱。
Normal World 使用 SMC 調(diào)用 OP-TEE OS
進(jìn)入安全監(jiān)視器
監(jiān)視器管理安全世界的所有入口和出口。為了從正常世界進(jìn)入安全世界,監(jiān)視器保存正常世界的狀態(tài)(通用寄存器和未存儲(chǔ)的系統(tǒng)寄存器)并恢復(fù)以前的安全世界狀態(tài)。然后執(zhí)行從異常返回并恢復(fù)恢復(fù)的安全狀態(tài)。從安全世界退出到正常世界則相反。
一些通用寄存器在進(jìn)入和退出時(shí)不會(huì)保存和恢復(fù),它們用于在安全世界和普通世界之間傳遞參數(shù)(詳細(xì)信息請(qǐng)參見(jiàn) ARM_DEN0028A_SMC_Calling_Convention)。
Trusted OS 的進(jìn)入和退出
在進(jìn)入和退出 Trusted OS 時(shí),每個(gè) CPU 都使用單獨(dú)的入口堆棧并在 IRQ 和 FIQ 屏蔽的情況下運(yùn)行。SMC 分為兩種類型:fast 和 yielding。
-
對(duì)于 fast SMCs,OP-TEE OS 將在 entry stack上執(zhí)行,并屏蔽 IRQ/FIQ,直到執(zhí)行返回到正常世界。
-
yielding SMCs,OP-TEE OS 將在某個(gè)時(shí)候執(zhí)行請(qǐng)求的服務(wù),并且中斷未屏蔽。為了處理中斷,主要是外來(lái)中斷的轉(zhuǎn)發(fā),OP-TEE OS為SMC請(qǐng)求分配了一個(gè)可信線程(core/arch/arm/kernel/thread.c)。受信線程存儲(chǔ)所請(qǐng)求服務(wù)的執(zhí)行上下文。當(dāng)請(qǐng)求的服務(wù)執(zhí)行和被中斷時(shí),這個(gè)上下文可以被掛起和恢復(fù)。只有在服務(wù)執(zhí)行返回完成狀態(tài)時(shí)才釋放受信任線程。
為了產(chǎn)生SMC,OP-TEE OS 分配或恢復(fù)受信任的線程,然后取消屏蔽 IRQ 和 FIQ 線。當(dāng) OP-TEE OS 需要從外部中斷或遠(yuǎn)程服務(wù)調(diào)用調(diào)用正常世界時(shí),OP-TEE OS 會(huì)屏蔽 IRQ 和 FIQ 并掛起受信任的線程。掛起時(shí),OP-TEE OS 返回到入口堆棧。 -
這兩個(gè)快速產(chǎn)生的SMC結(jié)束與IRQ和FIQ進(jìn)入堆棧蒙面OP-TEE OS將調(diào)用監(jiān)控通過(guò)SMC返回到正常的世界。
-
fast 和yielding SMCs在進(jìn)入optee時(shí)的entry stack上,IRQ 和 FIQ都是屏蔽的。OP-TEE OS通過(guò)調(diào)用smc進(jìn)入Monitor再返回normal world。
總結(jié)
以上是生活随笔為你收集整理的optee中断处理的介绍(概念篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 防止Stack smash的技术
- 下一篇: [architecture]-ARM S