KVM Hypervisor

Kernel-based Virtual Machine (KVM) is an open source virtualization technology for Linux on x86 hardware containing virtualization extensions (for instance, Intel® Virtualization Technology (Intel® VT)).

KVM consists of loadable kernel modules, for example, kvm.ko that provides the core virtualization infrastructure. KVM turns Linux into a hypervisor that allows host machine to run multiple, isolated virtual environments called virtual machine, running unmodified Linux or Microsoft Windows images.

Each virtual machine can have private virtual BIOS (basic input/output system) and private virtualized hardware: processor, memory, network cards, disk, graphics adapter, and so on.

KVM Terminology

Term

Description

VM

Hypervised operating systems (OS) are referred to as virtual machines or VMs.

GVT-d

Graphics Virtualization Technology - VT-d

IGD

Integrated Graphics Device

BDF

Bus:Device.Function notation used to succinctly describe PCI and PCIe devices.

KVM Prerequisites

The following section is applicable to:

../_images/target_generic1.png

KVM and relevant modules are pre-installed in Linux kernel.

Do the following to set up the system:

  1. Add intel_iommu=on to the kernel command line.

  2. Setup the ECI repository.

  3. Run the following command to install this component:

    $ sudo apt install qemu-system-x86
    
  4. Disable graphical desktop:

    $ sudo systemctl set-default multi-user.target
    

Real-Time VMs using KVM

With the correct host and guest configuration, it is possible to execute real-time workloads in a VM. For a complete tutorial, refer to Real-Time VMs using KVM.

Prepare Image for KVM

See the following sections for detailed tutorials on creating and booting VMs using Intel® Edge Controls for Industrial images or Microsoft Windows images.

Virtualize ECI Images with KVM

To create a core-bookworm or core-noble VM image on the KVM hypervisor, refer to Virtualize ECI Images with KVM.

Create Windows Image for KVM

To create a Microsoft Windows VM image on the KVM hypervisor, refer to Create Windows Image for KVM.

Set up QEMU Command to Boot Windows VM

To boot a Microsoft Windows VM image on the KVM hypervisor, refer to Set up QEMU Command to Boot Windows VM.

Build OVMF.fd for KVM

Do the following to build OVMF.fd.

  1. Clone the EDK2 source from upstream and checkout to a specific release.

    $ git clone https://github.com/tianocore/edk2.git
    $ cd edk2
    $ git checkout edk2-stable202008
    
  2. Apply the following patches on EDK2 using the git apply command.

  3. Build OVMF.fd:

    Refer to this document to build OVMF.fd.

    After the build is complete, OVMF.fd will be in edk2/Build/Build/OvmfX64/DEBUG_GCC5/FV/OVMF.fd.

  4. Build GOP ROM file:

    GOP is not mandatory, but if one wants to check UEFI interface of VM, follow below method to generate GOP rom file:

  • Prepare platform related IntelGopDriver.efi and copy it into /src_path. For GOP driver, go to https://premiersupport.intel.com/ (Login with your Intel® account) to ask support for your own platform.

  • Get device codes and GPU PCI bus address

    # lspci -Dnn | grep VGA
    0000:00:02.0 VGA compatible controller [0300]: Intel Corporation Meteor Lake-P [Intel Graphics] [8086:7d45] (rev 08)
    
  • Generate GOP.rom

    source ./edksetup.sh
    make -C BaseTools/
    ./BaseTools/BinWrappers/PosixLike/EfiRom -v -f 0x8086 -i 0x7d45 -e /src_path/IntelGopDriver.efi -o /dest_path/GOP.rom