ax-plat-x86-qemu-q35
路径:
platforms/ax-plat-x86-qemu-q35类型:库 crate 分层:平台层 / x86_64 Q35 板级平台包 版本:0.2.0文档依据:当前仓库源码、Cargo.toml、README.md、build.rs、linker.lds.S、src/lib.rs、src/boot.rs、src/multiboot.S、src/init.rs、src/mem.rs、src/console.rs、src/time.rs、src/apic.rs、src/mp.rs、src/power.rs
ax-plat-x86-qemu-q35 是面向 QEMU Q35 机型的 x86_64 axplat 平台实现,当前主要服务于 Axvisor 的宿主侧启动路径。它把 Multiboot 引导、临时 GDT/页表、COM1 控制台、TSC/LAPIC/IOAPIC、AP 启动页、Q35 MMIO 窗口和关机/重启策略收敛成 axplat 契约。它不是通用 x86 PC 平台抽象,也不是虚拟化核心本身;它解决的是“Axvisor 在 Q35 这台机器上怎样把宿主环境带起来”的问题。
架构设计
1.1 真实定位
这个 crate 和仓库里另一个 ax-plat-x86-pc 很容易被混淆,但它们的定位并不相同:
ax-plat-x86-pc位于platforms,更偏 ArceOS 侧的标准 PC 参考平台。ax-plat-x86-qemu-q35位于根目录platforms/,是 Axvisor 当前 x86_64 宿主平台依赖。- 前者走
axplat_crates的常规平台组织方式;后者把 Q35 和 Axvisor 的构建约束直接内嵌进自己的build.rs与链接脚本。
它在平台栈中的职责可以概括为:
- 向下依赖 x86 架构库和 Multiboot 解析库。
- 向上实现
ConsoleIf、InitIf、MemIf、TimeIf、IrqIf、PowerIf。 - 通过
build.rs和linker.lds.S在构建期注入内核基址与 CPU 数。 - 为 Axvisor 提供宿主侧最小板级环境,但不介入 VMX/EPT、VM exit 或虚拟设备模拟。
模块结构
| 模块 | 作用 | 关键内容 |
|---|---|---|
boot | 启动配置汇总 | Multiboot 常量、CR0/CR4/EFER 参数、启动栈和 multiboot.S 组合 |
multiboot.S | 最早期入口 | 32 位到 64 位切换、临时 GDT/页表、主核/次核入口汇编 |
console | ConsoleIf 实现 | COM1 串口收发 |
mem | MemIf 实现 | Multiboot 内存图解析、MMIO 窗口、线性映射 |
time | TimeIf 实现 | TSC 单调时间、可选 RTC、LAPIC one-shot timer |
apic | IrqIf 实现核心 | LAPIC/x2APIC、IOAPIC、向量分发、IPI |
mp | SMP bring-up | AP 启动页、INIT-SIPI-SIPI、栈与入口灌入 |
init | InitIf 实现 | trap、串口、时间、内存、APIC 初始化顺序 |
power | PowerIf 实现 | QEMU 关机/重启策略、次核启动封装 |