hvisor is a Type-1 bare-metal virtual machine monitor implemented in Rust, featuring a separation kernel design to provide efficient hardware resource virtualization and isolation. This virtual machine monitor allows strict system environment separation, ensuring performance and security of the virtualized environments through distinct regions.
- Separation Kernel Design: The virtual machine is divided into three regions: zone0 (management zone), zoneU (user zone), and zoneR (real-time zone), with strict isolation between them.
- Simple and Lightweight: Implemented in Rust with a minimal design.
- CPU Virtualization: Static partitioning of physical CPUs (pCPUs), without dynamic scheduling.
- Memory Virtualization: Pre-allocated virtual machine memory space via configuration files.
- I/O Virtualization: Supports device passthrough and virtio paravirtualization.
- Multi-platform Support: Supports various architectures, including
aarch64,riscv64,loongarch64andx86_64. - Virtual Machine Management: Virtual machines are managed through a Linux environment in zone0 (root-linux), with basic management tasks (create, start, stop, delete) handled via the command-line tool hvisor-tool.
- Formal Verification: Part of the hvisor code is undergoing formal verification using the verus tool.
| Category | Device | Supported Architectures | Notes |
|---|---|---|---|
| Virtio Devices | virtio-blk | aarch64, riscv64, loongarch64,x86_64 |
|
| virtio-net | aarch64,x86_64 |
||
| virtio-console | aarch64, riscv64, loongarch64,x86_64 |
||
| virtio-gpu | aarch64 |
QEMU only | |
| Serial Devices/UARTs | PL011 | aarch64 |
|
| imx-uart | aarch64 |
NXP i.MX8MP | |
| NS16550A | loongarch64 |
||
| xuartps | aarch64 |
Xilinx Ultrascale+ MPSoC ZCU102 | |
| uart16550 | aarch64 |
Rockchip RK3568/RK3588, Forlinx OK6254-C | |
| uart16550a | x86_64 |
||
| Interrupt Controllers | GIC irq controller | aarch64 |
|
| 7A2000 irq controller | loongarch64 |
||
| PLIC | riscv64 |
||
| AIA | riscv64 |
MSI mode only | |
| APIC | x86_64 |
||
| Device Passthrough(Zone0) | All | All | |
| Device Passthrough(ZoneU) | PCIe | aarch64, riscv64, loongarch64,x86_64 |
|
| GPU / HDMI | aarch64, loongarch64 |
NXP i.MX8MP, 3A6000 | |
| eMMC | aarch64, riscv64 |
NXP i.MX8MP | |
| USB | aarch64, x86_64 |
NXP i.MX8MP | |
| SATA | riscv64, loongarch64, x86_64 |
megrez, 3A6000 | |
| Ethernet | aarch64, riscv64, loongarch64,x86_64 |
NXP i.MX8MP, megrez, 3A6000 |
- QEMU virt aarch64
- NXP i.MX8MP
- Xilinx Ultrascale+ MPSoC ZCU102
- Rockchip RK3588
- Rockchip RK3568
- Forlinx OK6254-C
- Phytium Pi
- Jetson Orin
- QEMU virt riscv64
- Milk-V Megrez
- Sifive Hifive Premier P550
- dp-1000
- Spacemit k3-com260
- FPGA XiangShan(KunMingHu) on S2C Prodigy S7-19PS-2
- Loongson 3A5000 (7A2000 bridge chip)
- Loongson 3A6000 (7A2000 bridge chip)
- QEMU Q35
- ASUS NUC14MNK
- ECX-2300F-PEG
- Linux 6.13
- Zephyr AArch64
- Zephyr AArch32
- RT-Thread
- Android
- OpenHarmony
- Asterinas
Please refer to the hvisor documentation for quick start guides, build and run instructions for all supported platforms: hvisor Documentation
- CHANGELOG
- Support for USB zoneU passthrough
- Support for PCIe bus virtualization
- Support for Android
- Support for OpenHarmony
- Support for Jetson Orin
- Support for IOMMU virtualization (Intel VT-d / RISC-V virtual IOMMU)
- Support for Clock Controller virtualization (virtio-scmi Clock protocol, ARM)
- Support for NPU zoneU passthrough (sysoul_x3300-scmi)
- Support for ARMv9
- Support for GICv4
- Support for Cache Coloring
- Support for Nvidia GPU zoneU passthrough
- Support for ARM SMMU virtualization
- Support for Clock Controller virtualization on x86_64
- Support for SR-IOV
- Web Management tool
- Device Tree configuration tool
- Support for Nvidia Thor
- Support for Raspberry Pi 5
- Support for pinctrl virtualization
- Support for booting zoneU / zoneR without zone0
Some implementations of this project reference RVM1.5 and jailhouse.