VM Configurations: Gen1 vs Gen2 Equivalents

If you're familiar with Hyper-V's Gen1 and Gen2 VM concepts, this page maps those to the equivalent OpenVMM CLI flags.

Background

Hyper-V defines two VM "generations" that differ in firmware, device model, and boot mechanism:

Gen1Gen2
FirmwareBIOS (PCAT)UEFI
Boot diskIDESCSI (VMBus storvsp)
Guest OSLegacy and modern (older Windows, DOS, Linux with BIOS support)Modern (Windows 10+, most Linux)
Secure BootNot availableAvailable

OpenVMM doesn't use the "Gen1/Gen2" terminology — you select the components directly via CLI flags.

Gen2-equivalent (UEFI boot) — the common case

Most development and testing uses UEFI boot. This is the default for modern Windows and Linux guests.

cargo run -- \
  --uefi \
  --disk memdiff:file:path/to/disk.vhdx \
  -p 4 -m 4GB \
  --gfx

Key flags:

  • --uefi — boot using mu_msvm UEFI firmware (implicitly enables Hyper-V enlightenments and VMBus, so --hv is not needed separately)
  • --disk — exposes a disk over VMBus (SCSI-equivalent)

Gen1-equivalent (PCAT BIOS boot)

Use PCAT for operating systems that support BIOS boot. This includes legacy systems (DOS, older Windows) as well as modern OSes that still support BIOS boot (most Linux distributions, Windows 10+).

cargo run -- \
  --pcat \
  --ide memdiff:file:path/to/disk.vhd \
  --gfx

Key flags:

  • --pcat — boot using the Microsoft Hyper-V PCAT BIOS
  • --ide — expose a disk via emulated IDE controller (the traditional Gen1 storage path, no --hv required)

See the PCAT BIOS reference for more details on PCAT boot, including floppy and optical boot order.

With OpenHCL (VTL2)

To run with OpenHCL, add --hv --vtl2 and --igvm. You don't need to separately specify --uefi or --pcat — the IGVM file contains the OpenHCL paravisor, and most IGVM builds bundle the mu_msvm UEFI firmware for VTL0 guest boot. The build recipe controls whether UEFI is included (see IGVM architecture).

Note: --vtl2 requires --hv to be passed explicitly on the command line, even though other flags like --uefi imply it internally.

cargo run -- \
  --hv --vtl2 \
  --igvm path/to/openhcl.igvm \
  --disk memdiff:file:path/to/disk.vhdx \
  -p 4 -m 4GB

Note

OpenVMM does not currently support OpenHCL with PCAT (Gen1-style) boot. OpenHCL + PCAT is supported on Hyper-V, where the host provides the PCAT firmware. If you need Gen1-style boot with OpenHCL, use Hyper-V rather than openvmm standalone.

See Running OpenHCL with OpenVMM for full setup instructions.

Quick reference

ScenarioFlagsNotes
Modern Windows/Linux guest--uefi --disk memdiff:file:disk.vhdxMost common
With graphical consoleadd --gfxVNC-based, see Graphical Console
With networkingadd --nicConsomme user-mode NAT
With OpenHCL--hv --vtl2 --igvm path/to/openhcl.igvm --disk memdiff:file:disk.vhdxIGVM carries the paravisor; no --uefi/--pcat needed
Legacy OS (DOS, old Windows)--pcat --ide memdiff:file:disk.vhd --gfxIDE storage, BIOS boot
Linux direct boot (no firmware)--kernel vmlinux --initrd initrdSkips UEFI/PCAT entirely