Axvisor 开发指南
Axvisor 是运行在 ArceOS 基础能力之上的 Type-1 Hypervisor。与 ArceOS / StarryOS 不同,Axvisor 的开发必须同时关注代码、 板级配置、VM 配置和 Guest 镜像。本文档覆盖开发环境、Hypervisor 运行时开发、虚拟设备开发、vCPU 管理、VM 与板级配置、Guest 支持、测试策略和调试技巧。
架构分层、运行时模块和核心设计机制见 Axvisor 架构。 最短命令和快速启动见 快速开始。 构建系统总览见 构建与运行。
1. 开发环境
1.1 工具链
Axvisor 共享 TGOSKits 工作区统一工具链(nightly-2026-04-27)。Axvisor 的交叉编译配置位于 os/axvisor/.cargo/config.toml,包含各架构的链接器标志和 runner 配置。
1.2 QEMU
Axvisor 开发依赖 QEMU 的硬件虚拟化支持:
| 架构 | QEMU 包名 | 虚拟化特性 |
|---|---|---|
| aarch64 | qemu-system-aarch64 | EL2 虚拟化扩展 |
| riscv64 | qemu-system-riscv64 | H 扩展 |
| x86_64 | qemu-system-x86_64 | VMX |
| loongarch64 | qemu-system-loongarch64 | 虚拟化支持 |
推荐 QEMU 版本 ≥ 8.0。
1.3 Guest 镜像准备
Axvisor 支持加载多种 Guest OS 镜像。首次运行前需要通过 setup_qemu.sh 准备:
cargo xtask axvisor defconfig qemu-aarch64
(cd os/axvisor && ./scripts/setup_qemu.sh arceos)
该脚本完成以下操作:
- 从
axvisor-guestGitHub 仓库下载 Guest 镜像到/tmp/.axvisor-images/qemu_aarch64_arceos - 从
configs/vms/arceos-aarch64-qemu-smp1.toml生成os/axvisor/tmp/vmconfigs/arceos-aarch64-qemu-smp1.generated.toml - 自动修正 VM 配置中的
kernel_path - 复制
rootfs.img到os/axvisor/tmp/rootfs.img
支持的 Guest 镜像类型:arceos, arceos-riscv64, linux, nimbos。
2. 目录结构总览
os/axvisor/
├── src/ # Hypervisor 运行时
│ ├── main.rs # 入口:打印 logo → 检查硬件虚拟化 → vmm::init() → vmm::start()
│ ├── hal/ # 硬件抽象层
│ │ ├── mod.rs # AxMmHalImpl(地址空间内存分配),架构分发
│ │ └── arch/ # 架构相关虚拟化原语
│ │ ├── aarch64/
│ │ ├── loongarch64/
│ │ ├── riscv64/
│ │ └── x86_64/
│ ├── vmm/ # 虚拟机管理器
│ │ ├── mod.rs # VMM init/start,VM 启动,VM 列表管理
│ │ ├── config.rs # VM 配置加载(文件系统或静态)
│ │ ├── vcpus.rs # vCPU 设置和管理
│ │ ├── vm_list.rs # 全局 VM 列表
│ │ ├── images/ # Guest 镜像加载
│ │ ├── fdt/ # 为 Guest 生成设备树
│ │ ├── timer.rs # 虚拟定时器管理
│ │ ├── hvc.rs # Hypervisor Call 处理
│ │ └── ivc.rs # 跨 VM 通信
│ ├── shell/ # 交互式控制台(VM 管理)
│ ├── task.rs # vCPU 任务扩展 trait
│ └── logo.rs # ASCII art logo
├── configs/
│ ├── board/ # 板级配置(10 个)
│ │ ├── qemu-aarch64.toml
│ │ ├── qemu-riscv64.toml
│ │ ├── qemu-x86_64.toml
│ │ ├── qemu-loongarch64.toml
│ │ ├── orangepi-5-plus.toml
│ │ ├── phytiumpi.toml
│ │ ├── rdk-s100.toml
│ │ ├── roc-rk3568-pc.toml
│ │ └── tac-e400.toml
│ └── vms/ # VM 配置(50+ 个)
│ ├── linux-*-*.toml
│ ├── arceos-*-*.toml
│ ├── freertos-*-*.toml
│ ├── nimbos-*-*.toml
│ ├── rt-thread-*-*.toml
│ └── zephyr-*-*.toml
└── scripts/
└── setup_qemu.sh # QEMU Guest 镜像准备脚本
核心组件(位于 components/):
| 组件 | 职责 |
|---|---|
axvm | VM 抽象:AxVM, AxVMRef, VMMemoryRegion, VMStatus |
axvcpu | vCPU 抽象:AxArchVCpu, AxVCpuExitReason,状态机管理 |
axdevice | 虚拟设备框架:passthrough / emulated / excluded |
axvisor_api | Hypervisor API 接口 |
axaddrspace | 地址空间管理 |
3. Hypervisor 运行时开发
3.1 启动流程
Axvisor 的启动流程(src/main.rs):
main()
→ 打印 logo
→ 检查硬件虚拟化支持 (has_hardware_support)
→ 启用虚拟化
→ vmm::init()
→ 加载 VM 配置
→ 创建 AxVM 实例
→ 加载 Guest 镜像
→ 初始化 vCPU
→ 生成设备树(如需要)
→ vmm::start()
→ 启动所有 VM
→ 进入控制台 shell
3.2 VMM 核心模块
| 模块 | 文件 | 职责 |
|---|---|---|
| 配置加载 | vmm/config.rs | 从文件系统或静态配置加载 VM 定义 |
| vCPU 管理 | vmm/vcpus.rs | vCPU 创建、初始化和调度 |
| VM 列表 | vmm/vm_list.rs | 全局 VM 注册表 |
| 镜像加载 | vmm/images/ | 将 Guest kernel/initramfs/DTB 加载到 VM 内存 |
| 设备树 | vmm/fdt/ |