PRTOS Hypervisor v1.0.0 发布说明

prtos, info prtos-开发手册 系统资讯 嵌入式虚拟化技术评论字数 3230阅读10分46秒阅读模式

概述

PRTOS Hypervisor v1.0.0 是首个全平台正式发布版本,在 五种处理器架构 上提供硬件辅助虚拟化支持:x86 (i386)、AArch64 (ARMv8)、RISC-V 64、AMD64 (x86_64) 和 LoongArch64。本版本提供了一个生产就绪的嵌入式 Type-1 虚拟机管理程序,具有确定性实时调度、严格的空间与时间隔离,以及完善的 VirtIO I/O 虚拟化支持。


支持的平台

平台 虚拟化模式 硬件扩展 客户操作系统支持
x86 (i386) 半虚拟化 影子页表 BAIL、FreeRTOS
AArch64 (ARMv8) 硬件辅助虚拟化 + 半虚拟化 EL2/vGIC/Stage-2 Linux 6.19、FreeRTOS、BAIL
AMD64 (x86_64) 硬件辅助虚拟化 + 半虚拟化 Intel VT-x/VMX/EPT Linux 6.19、FreeRTOS、BAIL
RISC-V 64 (RV64) 硬件辅助虚拟化 + 半虚拟化 H-扩展/SBI HSM Linux 6.19、FreeRTOS、BAIL
LoongArch64 硬件辅助虚拟化 + 半虚拟化 LVZ (GCFG/GTLBC/GID) Linux 6.19、FreeRTOS、BAIL

新增功能

多架构硬件虚拟化

  • AArch64: ARM VHE(虚拟化宿主扩展),EL2 层运行,vGIC v3 中断虚拟化,Stage-2 页表(VTTBR_EL2)实现内存隔离
  • AMD64: Intel VT-x/VMX 与 EPT(扩展页表),直接 APIC 虚拟化用于中断传递
  • RISC-V 64: H-扩展与 hgatp G-stage 地址转换(Sv39x4),SBI HSM 用于多核管理
  • LoongArch64: LVZ(龙芯虚拟化扩展),GCFG 控制 CSR/TLB/定时器陷入,基于 GID 的 TLB 隔离,GSPR 异常驱动的虚拟机退出处理

Linux 6.19 SMP 客户机支持(4 个平台)

四个 64 位平台均可引导未修改的 Linux 6.19.9 SMP 内核,支持 4 个 vCPU:

  • 通过串口控制台登录(用户名 root,密码 1234
  • 完整的 SMP 调度,所有 vCPU 在 /proc/cpuinfo 中可见
  • 嵌入式 Buildroot initramfs 根文件系统,BusyBox 用户空间

混合操作系统演示(4 个平台)

Linux(3 个 vCPU,硬件虚拟化)+ FreeRTOS(1 个 vCPU,半虚拟化)同时运行,通过共享内存实现分区间通信:

  • mix_os_demo_aarch64
  • mix_os_demo_riscv64
  • mix_os_demo_amd64
  • mix_os_demo_loongarch64

VirtIO I/O 虚拟化(4 个平台)

双分区 Linux 演示,通过共享内存实现基于 VirtIO 的分区间网络通信:

  • virtio_linux_demo_2p_aarch64
  • virtio_linux_demo_2p_riscv64
  • virtio_linux_demo_2p_amd64
  • virtio_linux_demo_2p_loongarch64

自动化测试框架

统一测试脚本(scripts/run_test.sh)支持全部 5 种架构:

  • 37 个示例测试用例
  • 基于 QEMU 的自动化引导验证
  • 确定性通过/失败报告

测试结果

x86 (i386)

总计: 27  通过: 11  失败: 0  跳过: 16

AArch64

总计: 27  通过: 17  失败: 0  跳过: 10

RISC-V 64

总计: 27  通过: 16  失败: 0  跳过: 11

AMD64 (x86_64)

总计: 27  通过: 16  失败: 0  跳过: 11

LoongArch64

总计: 32  通过: 16  失败: 0  跳过: 16

所有平台特定测试均通过。SKIP 结果表示属于其他架构的测试。


各平台详细说明

x86 (i386)

  • 虚拟化:半虚拟化,影子页表
  • 调度:循环调度,可配置时间片
  • 示例:11 个通过测试(example.001-009、helloworld、helloworld_smp)
  • 引导:ISO 镜像,通过 QEMU -cdrom 选项加载

AArch64 (ARMv8)

  • 虚拟化:ARM VHE,EL2 层 Stage-2 地址转换
  • 中断控制器:vGIC v3,支持 LPI/SGI
  • 引导:U-Boot (u-boot.bin) + mkimage uImage 格式
  • SMP:4 个 vCPU,通过 PSCI 电源管理
  • QEMU-machine virt,gic_version=3 -machine virtualization=true -cpu cortex-a72

RISC-V 64

  • 虚拟化:H-扩展,G-stage 地址转换(Sv39x4)
  • SMP:SBI HSM(Hart 状态管理)多核引导
  • 引导:OpenSBI 固件(-bios default)+ 扁平二进制内核
  • QEMU-machine virt -cpu rv64 -smp 4 -m 1G

AMD64 (x86_64)

  • 虚拟化:Intel VT-x/VMX,EPT 扩展页表
  • 内存:恒等映射前 1GB;所有分区内存地址需低于 0x40000000
  • 引导:ISO 镜像,通过 QEMU -cdrom 选项加载
  • KVM 支持:可选 -enable-kvm 使用原生硬件加速
  • QEMU-machine virt -smp 4 -m 1024

LoongArch64

  • 虚拟化:LVZ 硬件辅助虚拟化(GCFG、GTLBC、GID)
  • 定时器:TB 边界宿主定时器轮询(单线程 TCG 模式);通过 csrwr TCFG 周期性重装
  • SMP:跨 CPU 定时器唤醒,多 CPU 分区调度
  • 引导:RSW(驻留软件)引导桩,无需 U-Boot
  • QEMU-accel tcg,thread=single -nodefaults -nic none -machine virt -cpu max -smp 4 -m 2G
  • Linux 客户机:4 个 vCPU,Buildroot 根文件系统,DTB 中嵌入 rng-seed 加速 CRNG 初始化

构建指南

快速开始(所有平台)

git clone https://github.com/prtos-project/prtos-hypervisor.git
cd prtos-hypervisor

# 选择平台:x86、aarch64、riscv64、amd64 或 loongarch64
cp prtos_config.<平台> prtos_config
make defconfig
make

# 运行测试
bash scripts/run_test.sh --arch <平台> check-all

LoongArch64 特殊要求

  • 交叉编译器loongarch64-linux-gnu-gcc(推荐 GCC 14.x)
  • QEMU:需要支持 LVZ TCG 的自定义构建版本(参见 loongarch64_getting_started.md
  • Linux 客户机:预构建的 vmlinux,内嵌 Buildroot initramfs
  • 构建脚本buildroot_linux_configure_build.sh 自动化 Buildroot + Linux 内核构建

已知限制

  1. LoongArch64 TCG 性能:在 TCG 模拟下客户 Linux 引导约需 5 分钟(其他平台使用原生 QEMU 支持约 30 秒)。这是单线程 TCG 模式下软件模拟 LVZ 的固有特性。
  2. LoongArch64 QEMU:需要带有 LVZ TCG 补丁的自定义 QEMU 构建版本(非上游 QEMU)。
  3. x86 (i386):仅支持半虚拟化(32 位平台不支持硬件辅助 VT-x)。

文档

文档 说明
README.md / README_zh.md 项目概述和各平台快速入门
doc/design/prtos_tech_report.md 技术架构报告
doc/getting_started/<arch>_getting_started.md 各平台入门指南
doc/getting_started/<arch>_api_reference.md 各平台 API 参考
AGENTS.md AI 代理开发自动化指导

贡献者

PRTOS Hypervisor 由 PRTOS 社区开发。参见代码贡献指南了解如何参与。


许可证

GPL v2。

继续阅读
prtos, info
  • 本文由 发表于 2026年5月24日 15:19:28
  • 除非特殊声明,本站文章均为原创,转载请务必保留本文链接
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定