建立读懂 C 参考实现所需的全部架构知识,再带着具体问题把 Stellar hypervisor 的关键源码通读一遍。本阶段仍不写代码。
HVC,异常向量表布局HSR/ESR(陷入原因)、VSCTLR(VMID)、HCR(hyp 控制)、SPSR_hyp / ELR_hyp(返回现场)HVC 回调);Ex3 用 GIC list register(ICH_LR*)注入虚拟中断;Ex4 双核 SPI/SGI 路由GIC 中断虚拟化的 FigJam 框图,可在框内缩放、拖动;也可在 Figma 中打开 ↗
ARMv8-R 虚拟化 example 逐个研习(从 Example 1 开始,后续 example 持续画在这一页);可在框内缩放、拖动,也可在 Figma 中打开 ↗
hyper.h —— HVC 的 module-id / service-id 定义el2_vectors.S —— EL2 向量表与入口汇编hyp_handler.c —— 陷入后读 HSR 与分发hyp_services.c —— 各服务的 EL2 侧实现AArch32 的 hyp 模式不是"EL2 版的 SVC 模式"——它有自己的 banked 寄存器(SP_hyp、SPSR_hyp、ELR_hyp),上下文切换要单独处理。查手册认准 ARMv8-R AArch32,别误读成 ARMv8-A AArch64 的资料。
能复述guest 一次 siul2_iotoggle() 如何陷入 EL2 又返回。
ERET 降级进 guest、banked 寄存器 + FPU 的全上下文交换