Using Windows as Guest VM on ACRN

This tutorial describes how to launch Windows as a Guest (WaaG) VM on the ACRN hypervisor.

Verified version

  • Clear Linux version: 32680
  • ACRN-hypervisor tag: v1.6 (acrn-2020w12.5-140000p)
  • ACRN-kernel tag: acrn-2020w12.5-140000p
  • Windows 10 Version:
    • Microsoft Windows 10 Enterprise, 10.0.17134 Build 17134
    • Microsoft Windows 10 Enterprise LTSC Evaluation, 10.0.17763 Build 17763
  • Windows graphics driver:
    • igfx_win10_100.7212.zip

Hardware setup

The following Intel Kaby Lake NUCs are verified:

Platform Model BIOS Version BIOS Download Link
NUC7i7DNHE DNKBLi7v.86A.0052.2018.0808.1344 link
NUC7i5DNHE DNKBLi5v.86A.0060.2018.1220.1536 link

ACRN Service VM Setup

If necessary, refer to the steps in Using SDC Mode on the NUC to set up ACRN on the KBL NUC. Once complete, you should be able to launch the Service VM successfully.

Setup for Using Windows as the Guest VM

All patches to support WaaG have been upstreamed; download them from the acrn-hypervisor repository.

Build ACRN EFI Images

  1. Follow the steps described at Build ACRN from Source to set up the build environment.

  2. Use the make command to compile the acrn.efi and acrn-dm:

    $ git clone https://github.com/projectacrn/acrn-hypervisor.git
    $ cd acrn-hypervisor
    $ make FIRMWARE=uefi BOARD=kbl-nuc-i7
    
  3. Get the outputs from the following:

    $ build/hypervisor/acrn.efi
    $ build/devicemodel/acrn-dm
    
  4. Replace the acrn.efi and acrn-dm on your NUC:

    1. Log in to the ACRN Service VM and then mount the EFI partition to /boot

    2. scp the acrn.efi and acrn-dm from your host:

      # scp <acrn.efi from your host> /boot/EFI/acrn/
      # scp <acrn-dm from your host> /usr/bin/
      # chmod +x /usr/bin/acrn-dm && sync
      

Build the Service VM Kernel

  1. Follow the steps described at Build ACRN from Source to set up the build environment.

  2. Follow the steps below to build the ACRN kernel:

    $ WORKDIR=`pwd`;
    $ JOBS=`nproc`
    $ git clone -b master https://github.com/projectacrn/acrn-kernel.git
    $ cd acrn-kernel && mkdir -p ${WORKDIR}/{build,build-rootfs}
    $ cp kernel_config_uefi_sos ${WORKDIR}/build/.config
    $ make olddefconfig O=${WORKDIR}/build && make -j${JOBS} O=${WORKDIR}/build
    $ make modules_install INSTALL_MOD_PATH=${WORKDIR}/build-rootfs O=${WORKDIR}/build -j${JOBS}
    

Update the Kernel on KBL NUC

  1. Copy the new kernel image (bzImage) and its modules to the target machine:

    # scp <your host>:$WORKDIR/build/arch/x86/boot/bzImage /boot/bzImage
    # scp -r <your host>:$WORKDIR/build-rootfs/lib/modules/* /lib/modules/
    # cp /boot/loader/entries/acrn.conf  /boot/loader/entries/acrngt.conf
    
  2. Modify acrngt.conf to the content as shown below:

    title The ACRNGT Service VM
    linux /bzImage
    options console=tty0 console=ttyS0 root=/dev/sda3 rw rootwait ignore_loglevel no_timer_check consoleblank=0 i915.nuclear_pageflip=1 i915.avail_planes_per_pipe=0x010101 i915.domain_plane_owners=0x011100001111 i915.enable_gvt=1 i915.enable_conformance_check=0 i915.enable_guc=0 hvlog=2M@0x1FE00000
    

    Note

    Change /dev/sda3 to your file system partition.

  3. reboot the Service VM and select The ACRNGT Service VM from the boot menu to apply the ACRN kernel and hypervisor updates.

Create Windows 10 Image in Service VM

Create a Windows 10 image to install Windows 10 onto a virtual disk.

Download Win10 ISO and Drivers

  • Download Windows 10 LTSC ISO.
  • Select ISO-LTSC, then click Continue.
  • Complete the required info then click Continue.
  • Select the language and x86 64 bit, then click Download ISO and save as windows10-LTSC-17763.iso.
  • Download the Intel DCH Graphics Driver.
  • Download the Oracle Windows driver.
  • Sign in. If you do not have an Oracle account, register for one.
  • Select Download Package. Key in Oracle Linux 7.6 and click Search.
  • Click DLP: Oracle Linux 7.6; it will be added to your Cart.
  • Click Checkout which is located at the top right corner.
  • Under Platforms/Language, select x86 64 bit, and click Continue.
  • Check I accept the terms in the license agreement; click Continue.
  • In the list, right check the item labeled Oracle VirtIO Drivers Version for Microsoft Windows 1.x.x, yy MB, and then Save link as …. Currently, it is named V982789-01.zip.
  • Click Download. When the download is complete, unzip the file. You will see an ISO named winvirtio.iso.

Create Raw Disk

Run these commands on the Service VM:

# swupd bundle-add kvm-host
# mkdir /root/img
# cd /root/img
# qemu-img create -f raw win10-ltsc.img 30G

Prepare Script to Create Image

  1. Copy /usr/share/acrn/samples/nuc/launch_win.sh to install_win.sh:

    # cp /usr/share/acrn/samples/nuc/launch_win.sh ~/install_win.sh
    
  2. Edit the acrn-dm command line in install_win.sh as follows:

    • Change -s 3,virtio-blk,./win10-ltsc.img to your path to the Windows 10 image.
    • Add -s 6,xhci,1-5:1-9. You may need to change 1-5:1-9 to match the ports of the USB keyboard/Mouse and flash on your platform.
    • Add -s 8,ahci,cd:./windows10-LTSC-17763.iso to point to the Win10 ISO.
    • Add -s 9,ahci,cd:./winvirtio.iso to point to your path to the winvirtio iso.

Install Windows 10

Note

Make sure you have configured your monitor and display according to 3 of Boot Windows with GVT-g on ACRN.

  1. Run install_win.sh. When you see the UEFI shell, input exit.

  2. Select Boot Manager and boot up from Win10 ISO.

  3. When the display reads Press any key to boot from CD or DVD on the monitor, press any key in the terminal on the Host side.

    ../_images/windows_install_1.png
    ../_images/windows_install_2.png
    ../_images/windows_install_3.png
  4. Click Load driver.

    ../_images/windows_install_4.png
  5. Click Browser and go to the drive that includes the virtio win drivers. Select all under vio\w10\amd64. Install the following drivers into the image:

    • Virtio-balloon
    • Virtio-net
    • Virtio-rng
    • Virtio-scsi
    • Virtio-serial
    • Virtio-block
    • Virtio-input

    Note

    Be sure to unselect Hide Drivers that aren’t compatible with this computer’s hardware near the bottom of the page.

    ../_images/windows_install_5.png
  6. Click Next.

    ../_images/windows_install_6.png
  7. Continue with the installation.

    ../_images/windows_install_7.png
  8. The system will restart.

    ../_images/windows_install_8.png
  9. Windows will restart several times and then you will be asked to configure your system.

    ../_images/windows_install_9.png

    Note

    You must connect two monitors to the KBL NUC in order to launch Windows with the default configurations above.

  10. The Windows installation is completed after a few configuration steps; the Windows desktop displays.

    ../_images/windows_install_10.png
  11. Copy Intel DCH Graphics Driver into Windows and install; the display driver is updated to 7212.

Boot Windows with GVT-g on ACRN

  1. Modify the /usr/share/acrn/samples/nuc/launch_win.sh script to specify the Windows image generated above.

  2. Run the launch_win.sh. The WaaG desktop displays on the HDMI monitor.

    Note

    Use the following command to disable the GNOME Display Manager (GDM) if it is enabled:

    # sudo systemctl mask gdm.service
    

    Note

    You must connect two monitors to the KBL NUC in order to launch Windows with the default configurations above. The second monitor must include the Weston desktop. If you have set up Weston in the Service VM, follow the steps in GPU Passthrough on Skylake NUC to set up Weston as the desktop environment in the Service VM to experience Windows with the AcrnGT local display feature.

ACRN Windows verified feature list

Items Details Status
IO Devices Virtio block as the boot device Working
  AHCI as the boot device Working
  AHCI cdrom Working
  Virtio network Working
  Virtio input - mouse Working
  Virtio input - keyboard Working
  GOP & VNC remote display Working
GVT-g GVT-g without local display Working with 3D benchmark
  GVT-g  with local display Working with 3D benchmark
Tools WinDbg Working
Test cases Install Windows 10 from scratch OK
  Windows reboot OK
  Windows shutdown OK
Built-in Apps Microsoft Edge OK
  Maps OK
  Microsoft Store OK
  3D Viewer OK

Known Limitations

  • The cursor is not visible with the GVG-g local display.

Secure boot enabling

Refer to the steps in How to enable secure boot for Windows for secure boot enabling.

Activate Windows 10

If you are using a trial version of Windows 10, you may find that some apps and features do not work or that Windows 10 automatically gets shut down by the Windows licensing monitoring service. To avoid these issues, obtain a licensed version of Windows.

For Windows 10 activation steps, refer to “Activate Windows 10