基本的世界切换流程是:
将 FIQ 设置为监控模式
- 正常世界 -> FIQ 触发
- -> 进入监控模式(切换到安全世界,恢复安全世界上下文)
- -> 在安全世界系统模式下
- -> FIQ 不清楚,在 Secure world 中输入 FIQ 处理程序
step3和step4,我们恢复目标上下文后,arm会触发异常进入异常行为是否正确?(如果我们不在监控模式向量表中分支到 FIQ 句柄)
我们需要如下流程:(没有世界上下文切换的情况,只需进入监控模式检查是否需要世界切换,然后直接从监控模式进入irq异常。由于我们的硬件限制,我们需要这个,我们的芯片中只有IRQ )
将 IRQ 设置为监控模式
- 普通世界用户模式 -> IRQ 触发
- -> 进入monitor,做我们想hook的事情,检查是否需要上下文切换,为IRQ模式准备一些spsr/lr
- -> 进入普通世界IRQ模式,irq处理
- -> irq 完成,返回用户模式
对于non-world switch的情况,我们想让正常的world os不知道monitor mode,尽管他直接进入irq mode并从irq mode返回。对于世界开关盒,只需在监控模式下切换即可。
还是只是在监控模式下执行 irq_handle?
等式。
普通世界 OS usr 模式 -> irq -> usr 模式
普通世界 OS usr 模式 -> 监控到 irq 处理程序 -> usr 模式
流程是否可行且设计良好?