毕业设计 · 阶段里程碑
目标平台 ST Stellar SR6P6(ARMv8-R / MPU,无页表)。定位为混合虚拟化: CPU 指令层硬件辅助、近原生;I/O 与 VM 间通信走半虚拟化(HVC)。参照 StellarSDK 的 C 实现, 用 Rust 重写核心。
CPU 近原生、内存靠 MPU 静态隔离(非可重定位)、I/O 走 HVC 半虚拟化。论文的核心设计论证。
架构无关核心(HVC 分发、调度、VCB)与平台相关 BSP(内存布局、UART、时钟、MPU)分离,迁移只换 BSP。
QEMU 搞懂机制、快速试错;TRACE32 + 真板子做真东西、写进论文。别让板子未知拖慢理解。
// 八个阶段
想清三件事:半虚拟化 vs 全虚拟化、跑在哪、范围多大。定下"混合虚拟化 + 先 QEMU"的技术路线。
能讲清为什么 R52 上选半虚拟化,而非全虚拟化。
吃透 ARMv8-R / Cortex-R52:异常等级 EL2/EL1、HVC、HSR/ESR、VSCTLR、HCR、EL2 向量表、PMSA/MPU stage-2、GIC 与虚拟定时器。带着这些再通读 Stellar 的 C hypervisor。
能复述guest 一次 siul2_iotoggle() 如何陷入 EL2 又返回。
首次"运行代码"。搭 no_std 工程:target armv8r-none-eabihf、build-std、链接脚本、_start、内联汇编读写系统寄存器。QEMU 从这里正式登场。
QEMU 出字:Rust 裸机在 mps3-an536 上启动并从 UART 输出。
整篇论文的地基。启动到 EL2 → 配一个 VM → ERET 降到 EL1 跑极简 guest → guest 发 HVC → EL2 接住、读 HSR、分发、返回。
往返闭环:guest 的 HVC 请求被 EL2 处理并正确返回,可打印验证。
切到真板子 + TRACE32(QEMU 虚拟化特性不全)。加上真正的 hypervisor 能力:vCPU 上下文切换、时间片调度、VMM 生命周期、stage-2 MPU 隔离、GIC 中断虚拟化。
隔离可证:两个 VM 轮转运行,A 越界访问 B 内存被 EL2 拦截。
实现虚拟外设驱动对:guest 侧发 HVC(*_hvc)+ EL2 侧真操作(*_hyp)。由简到繁:虚拟 UART/LED → 虚拟定时器 →(有余力)虚拟 CAN。
半虚拟化闭环:guest 经 HVC 操作真实外设并拿到结果。
单集群双核跑一个 VM → 多集群多 VM。核间同步、SMP 启动。做不完可写进"未来工作"。
多核可跑:两核协同承载一个或多个 VM,无竞态。
测试与量化:隔离性、调度公平性、HVC 延迟、上下文切换开销;并做 Rust vs C 参照实现在内存安全 / 可读性 / 性能上的对比——这通常是论文核心贡献。
可答辩:硬件上验证通过,数据与对比成文。
armv8r-none-eabihf(tier-3,build-std)11.0.1 · mps3-an536 / cortex-r5215.2 · arm-none-eabi-gcc / gdb6.0.1 · C 参考实现版本由 rust-toolchain.toml(nightly + rust-src)与 .cargo/config.toml(默认目标 / build-std / QEMU runner)锁定,cargo build / cargo run 开箱即用。