4. Testing on QEMU

Quick verification using QEMU for x86_64 and AArch64

x86_64 QEMU

Place loadvmm.efi and bitvisor.elf in a directory (e.g. ~/x86_test/) and run:

qemu-system-x86_64 \
  -cpu host -enable-kvm \
  -bios /path/to/OVMF.fd \
  -drive file=fat:rw:~/x86_test/,format=raw \
  -cdrom /path/to/bootable.iso \
  -nic user,model=e1000e \
  -M q35 -m 4096
  • -bios /path/to/OVMF.fd — UEFI firmware (OVMF)
  • -nic user,model=e1000e — emulates an Intel NIC; enable NET_PRO1000 in Kconfig
  • Add -boot menu=on to give more time to press ESC for the setup menu

After the VM starts, press ESC repeatedly to enter the setup menu and launch the EFI Shell. Switch to the filesystem containing BitVisor and run loadvmm.efi.

KVM and APICv

On recent Intel CPUs, having KVM’s APICv enabled while running BitVisor can cause timer check panics or SMP bring-up stalls.

Check current value:

cat /sys/module/kvm_intel/parameters/enable_apicv

Disable temporarily:

sudo modprobe -r kvm-intel && sudo modprobe kvm-intel enable_apicv=N

To make the setting permanent, add options kvm-intel enable_apicv=N to a file under /etc/modprobe.d/.

SMP Note

Linux guest SMP bring-up can be unstable due to INIT/SIPI timing issues under KVM. Setting .localapic_intercept = 1 in defconfig enables BitVisor’s INIT-SIPI and APIC access emulation, which stabilizes operation under QEMU + KVM.

AArch64 QEMU

Place the AArch64 builds of bitvisor.elf and loadvmm.efi in the same directory, then run:

qemu-system-aarch64 \
  -m 8G \
  -M virt,gic-version=3,virtualization=true \
  -cpu neoverse-n1 \
  -bios /path/to/aarch64/qemu_efi.fd \
  -drive file=fat:rw:/path/to/bitvisor_dir/,format=raw \
  -cdrom /path/to/aarch64/linux.iso \
  -nic user,model=e1000e \
  -serial vc:1024x768 \
  -smp 4
  • Tested CPUs: -cpu neoverse-n1 or -cpu a64fx
  • Avoid -cpu max — it enables optional features not yet supported
  • For devicetree-based device discovery, add acpi=off to -M and enable CONFIG_DEVICETREE=y in Kconfig

Boot procedure is the same as x86_64: press ESC to enter setup, then launch the EFI Shell and run loadvmm.efi.

AArch64 BitVisor is experimental. Booting Linux with virtio_net networking has been verified.