Minos 虚拟化: Hypercall 与设备虚拟化
本文拆解 Minos 中 guest 与 hypervisor 的通信与设备模拟机制:Hypercall 的 ID 编码与调用约定、从 HVC 指令到 handler 的分发链路、VM 管理接口,并以 create_guest_vm 为线索串起 mvm—驱动—hypervisor 的完整数据流,最后落到 vdev 框架与 virtio-mmio 块设备虚拟化的实例。
本文拆解 Minos 中 guest 与 hypervisor 的通信与设备模拟机制:Hypercall 的 ID 编码与调用约定、从 HVC 指令到 handler 的分发链路、VM 管理接口,并以 create_guest_vm 为线索串起 mvm—驱动—hypervisor 的完整数据流,最后落到 vdev 框架与 virtio-mmio 块设备虚拟化的实例。
本文分析 Minos 如何复用自身的任务调度器来实现 vCPU 的调度:从任务数据结构与就绪队列讲起,再到 vCPU 的创建、mode 四态状态机与 vcpu_idle 睡眠,最后覆盖 kick_vcpu 跨核唤醒、vmodule 状态保存恢复,以及 guest 与 VM0 通信所用的 vmcs 协议。
本文从 GICv3 硬件机制出发,梳理 Minos 中断虚拟化的完整实现:virq 抽象层如何描述一条虚拟中断的状态,硬件路径如何借助 List Register 直接注入,软件路径又如何模拟 GICD/GICR 的 MMIO 访问,以及 vCPU 切换时中断上下文的保存与恢复。
本文是内存虚拟化一文的补充,逐行拆解 map_boot_mem 如何建立启动页表:从函数在启动链路中的位置与寄存器别名说起,再到 PUD/PMD/PTE 三级页表骨架的搭建、内核镜像各段与 UART 设备的精确映射,最后给出最终的内存布局图。
本文讲解 Minos 内存虚拟化的两级翻译架构:hypervisor 自身的 Stage1 页表如何建立与动态映射,guest 的 Stage2 页表如何用 40-bit IPA / 4K granule 三级结构完成重映射与权限控制,VTCR_EL2/VTTBR_EL2 的硬件配置,以及一次 guest 内存访问的完整流程。
本文梳理 guest 异常陷入 EL2 后的完整处理路径:从异常入口的现场保存/恢复,到同步异常按 ESR 的 EC/ISS 字段分发到 22 个 handler,并重点剖析 access_system_reg_handler 与 dataabort_tfl_handler 两类典型场景,最后覆盖 IRQ 的中断进入与分发流程。
本文梳理 Minos 从上电到进入 C 世界的完整启动过程:镜像的段布局、汇编启动核心(_start、EL2 环境初始化、降级分支、mmu_on),以及 arch_main 到 boot_main 的 C 世界初始化主流程,并穿插与 Linux 启动流程的对比。
本文是 Minos 虚拟化系列的硬件基础篇,梳理 ARMv8-A 虚拟化所依赖的关键机制:EL 层级与异常模型、HCR_EL2 控制寄存器、Stage1/Stage2 两级地址翻译、异常向量表布局,以及 GICv3 中断虚拟化与 Generic Timer 定时器虚拟化的原理与代码位置。
本文记录了在 WSL2 + Docker 环境下从零复现 Minos Hypervisor 的全过程:搭建容器与镜像加速、clone 源码并补装工具、修复 GCC15 编译错误,再构建 U-Boot、Linux 内核与 ramdisk,最终打包镜像并在 QEMU 中成功启动,文末汇总了踩坑记录与关键产物位置。
本文介绍 Arm A-profile 的通用定时器架构。