# 1. build hvisor
cd hvisor
make defconfig ARCH=x86_64 BOARD=qemu
make ARCH=x86_64 BOARD=qemu MODE=release
# 2. build hvisor-tool
cd ../hvisor-tool
make ARCH=x86_64 LOG=LOG_INFO KDIR=/path/to/linux-or-linux-headers
# 3. deploy hvisor-tool, configs, rootfs2.img and Asterinas artifacts into rootfs1.img
# 4. start root-zone
cd ../hvisor
make ARCH=x86_64 BOARD=qemu MODE=release run
# 5. in root-zone shell
./start_asterinas_hvisor.sh
root-zone 内启动脚本:
#!/bin/sh
set -x
cd /
insmod ./hvisor.ko || true
./hvisor virtio start ./virtio_asterinas_cfg.json &
sleep 3
./hvisor zone start ./zone1_asterinas.json
Asterinas on hvisor 适配与验证
1. 成果摘要
本项目完成了 Asterinas 在 hvisor x86_64/QEMU 虚拟化环境中的基础启动适配,并验证 virtio-mmio 设备发现与 virtio-blk 读请求/中断完成路径。
当前关键成果:
panic=0、ERROR=0。相关上游 PR:
virtio_mmio.device=命令行发现本仓库交付物:
2. 系统架构
flowchart TB subgraph QEMU["QEMU x86_64/q35"] subgraph Z0["hvisor root zone: Linux"] HVKO["hvisor.ko"] HTOOL["hvisor-tool\nzone/virtio control"] VCON["virtio-mmio console backend"] VNET["virtio-mmio net backend"] VBLK["virtio-mmio blk backend\nrootfs2.img"] end subgraph HV["hvisor Type-1 Hypervisor"] IOAPIC["virtual IOAPIC"] CPUID["CPUID virtualization\nleaf 0x15/0x16"] MEM["stage-2 memory mapping"] end subgraph Z1["zone1: Asterinas"] AK["Asterinas kernel"] VIRTIO["virtio-mmio bus"] BLKDRV["virtio-blk driver"] INIT["initramfs / user init"] end end HTOOL --> HVKO HTOOL --> VCON HTOOL --> VNET HTOOL --> VBLK HVKO --> HV HV --> Z1 CPUID --> AK MEM --> AK IOAPIC --> BLKDRV VCON <--> VIRTIO VNET <--> VIRTIO VBLK <--> BLKDRV AK --> INIT3. 启动流程
sequenceDiagram participant User as User/root-zone shell participant Tool as hvisor-tool participant HV as hvisor participant AST as Asterinas zone1 participant BLK as virtio-blk backend User->>Tool: insmod hvisor.ko User->>Tool: hvisor virtio start virtio_asterinas_cfg.json Tool->>BLK: create console/net/blk backends User->>Tool: hvisor zone start zone1_asterinas.json Tool->>HV: create non-root zone1 HV->>AST: load boot.bin/setup.bin/vmlinux.bin/initramfs AST->>AST: OSTD/kernel init AST->>AST: parse virtio_mmio.device cmdline AST->>BLK: submit virtio-blk read request BLK->>HV: inject completion IRQ HV->>AST: translate guest-local APIC id to zone CPU and inject vector AST->>AST: handle blk IRQ, continue mount/init4. 资源配置
4.1 CPU / 内存
asterinas0x0起映射到 root-zone physical0x40300000附近0x100000000起,大小0x70000000/asterinas/vmlinux.bin/asterinas/initramfs.cpio4.2 virtio-mmio
0x5950f0000x2000x5950f2000x2000x5950f4000x200rootfs2.img块设备Asterinas kernel command line:
5. 核心改动
5.1 Asterinas
Asterinas 侧通过上游 PR #3401 支持 x86 下从 kernel command line 解析:
这使 Asterinas 不依赖 device tree,也能在 hvisor x86 zone 中发现 virtio-mmio console/net/blk。
5.2 hvisor
hvisor 侧补充:
zone1_asterinas.json与virtio_asterinas_cfg.json;0x15,给 guest 暴露 TSC/crystal clock ratio,避免 guest 依赖 PIT 校准;0,1,...编程 IOAPIC RTE 时,将其映射到 zone 的实际物理 CPU 集合。关键 patch:
deliverables/patches/0001-hvisor-support-asterinas-x86-guest.patch5.3 hvisor-tool
hvisor-tool 侧补充:
BlkDev使用calloc初始化,避免未初始化字段;blk_size = 512;关键 patch:
deliverables/patches/0002-hvisor-tool-support-asterinas-virtio-blk.patch6. 复现步骤概要
完整 quick-start 已附在 hvisor PR 评论:
最小流程:
root-zone 内启动脚本:
7. 启动日志截图
7.1 验证统计
7.2 Asterinas 入口与 OSTD 初始化
7.3 virtio-mmio 设备发现
7.4 virtio-blk 请求和 completion IRQ
完整日志:
deliverables/assets/logs/hvisor-asterinas-autostart.log8. 最新验证结果
最新日志关键计数:
结论:Asterinas 在 hvisor zone1 中完成内核入口、OSTD 初始化、virtio-mmio 设备发现、virtio-blk 读请求与 completion IRQ 路径验证。
9. 目录索引
deliverables/docs/方案文档.md(英文文件名副本:deliverables/docs/solution.md)deliverables/patches/deliverables/source-snapshot/deliverables/assets/deliverables/assets/logs/hvisor-asterinas-autostart.log