@@ -2290,6 +2290,7 @@ menu "System tools"
source "package/systemd-bootchart/Config.in"
source "package/sysvinit/Config.in"
source "package/tar/Config.in"
+ source "package/test-vm/Config.in"
source "package/tpm-tools/Config.in"
source "package/tpm2-abrmd/Config.in"
source "package/tpm2-tools/Config.in"
new file mode 100644
@@ -0,0 +1,4 @@
+config BR2_PACKAGE_TEST_VM
+ bool "test-vm"
+ help
+ A test VM for Libvirt.
new file mode 100644
@@ -0,0 +1,10 @@
+serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
+terminal_input serial
+terminal_output serial
+
+set default="0"
+set timeout="5"
+
+menuentry "Buildroot" {
+ linux /boot/bzImage root=/dev/vda1 rootwait console=ttyS0,115200n8 locale.LANG=C net.ifnames=0
+}
new file mode 100755
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# exit on any failure
+set -e
+
+MY_DIR=$(dirname "$0")
+
+cp -f "$MY_DIR/grub-bios.cfg" "$TARGET_DIR/boot/grub/grub.cfg"
+
+# Copy grub 1st stage to binaries, required for genimage
+cp -f "$HOST_DIR/lib/grub/i386-pc/boot.img" "$BINARIES_DIR"
new file mode 100644
@@ -0,0 +1,63 @@
+How to use this package
+
+1. Build an image with a defconfig containing
+
+BR2_x86_64=y
+
+BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y
+BR2_PACKAGE_BUSYBOX_SHOW_OTHERS=y
+
+BR2_PACKAGE_QEMU=y
+BR2_PACKAGE_QEMU_CUSTOM_TARGETS="x86_64-softmmu"
+BR2_PACKAGE_QEMU_SLIRP=y
+
+BR2_PACKAGE_LIBVIRT=y
+BR2_PACKAGE_LIBVIRT_QEMU=y
+BR2_PACKAGE_TEST_VM=y
+
+For remote accesss you will need an SSH server
+
+BR2_PACKAGE_DROPBEAR=y
+BR2_PACKAGE_DROPBEAR_DISABLE_REVERSEDNS=y
+
+Ensure that the kernel configuration has
+
+CONFIG_VFIO=m
+CONFIG_VFIO_PCI=m
+CONFIG_VFIO_MDEV=m
+CONFIG_VFIO_MDEV_DEVICE=m
+CONFIG_VHOST_NET=m
+CONFIG_VHOST_VSOCK=y
+CONFIG_TUN=m
+
+The rootfs size must be arount 100MB for a sysvinit/busybox init system and
+200MB for a systemd system.
+
+Configure the OS to obtain an IP address, either statically or via DHCP.
+
+2. Boot and log in as root, then run
+
+ # virsh define /etc/vm-templates/test-xm.xml
+ # virsh start test-vm && virsh console test-vm
+
+Leave the vm console by hitting ^]
+
+Shutdown the vm
+
+ # virsh shutdown test-vm
+
+3. Access the vm remotely using virt-manager
+
+On a machine with virt-manager installed, open it and create a new connection.
+Supposing that the host IP address is 192.168.2.2:
+
+ File->Add Connection
+
+ Name: QEMU/KVM on 192.168.2.2
+ Libvirt URL: qemu+ssh://root@192.168.2.2/system
+
+Double-click on the connection and provide the root user password. A "test-vm"
+item will appear (supposing that you wen through step 2, above). Double-click
+on it. Use the vm window to play with it.
+
+Have fun!
new file mode 100644
@@ -0,0 +1,25 @@
+################################################################################
+#
+# test-vm
+#
+################################################################################
+
+define TEST_VM_CONFIGURE_CMDS
+ $(MAKE) O=$(@D) \
+ BR2_DEFCONFIG=$(TEST_VM_PKGDIR)/test_vm_defconfig \
+ BR2_DL_DIR=$(BR2_DL_DIR) \
+ defconfig
+endef
+
+define TEST_VM_BUILD_CMDS
+ $(MAKE) -C $(@D)
+endef
+
+define TEST_VM_INSTALL_TARGET_CMDS
+ $(INSTALL) -D -m 644 $(@D)/images/disk.img \
+ $(TARGET_DIR)/var/lib/libvirt/images/test-vm.img
+ $(INSTALL) -D -m 644 $(TEST_VM_PKGDIR)/test-vm.xml \
+ $(TARGET_DIR)/etc/vm-templates/test-xm.xml
+endef
+
+$(eval $(generic-package))
new file mode 100644
@@ -0,0 +1,59 @@
+<domain type='kvm'>
+ <name>test-vm</name>
+ <memory unit='KiB'>1048576</memory>
+ <currentMemory unit='KiB'>1048576</currentMemory>
+ <vcpu placement='static'>2</vcpu>
+ <os>
+ <type arch='x86_64' machine='pc-i440fx-3.1'>hvm</type>
+ <boot dev='hd'/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <vmport state='off'/>
+ </features>
+ <cpu mode='host-model' check='partial'>
+ <model fallback='allow'/>
+ </cpu>
+ <clock offset='utc'>
+ <timer name='rtc' tickpolicy='catchup'/>
+ <timer name='pit' tickpolicy='delay'/>
+ <timer name='hpet' present='no'/>
+ </clock>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <pm>
+ <suspend-to-mem enabled='no'/>
+ <suspend-to-disk enabled='no'/>
+ </pm>
+ <devices>
+ <emulator>/usr/bin/qemu-system-x86_64</emulator>
+ <disk type='file' device='disk'>
+ <driver name='qemu' type='raw'/>
+ <source file='/var/lib/libvirt/images/test-vm.img'/>
+ <target dev='vda' bus='virtio'/>
+ <address type='pci' domain='0x0000'/>
+ </disk>
+ <controller type='pci' index='0' model='pci-root'/>
+ <interface type='network'>
+ <source network='default'/>
+ <model type='virtio'/>
+ <address type='pci' domain='0x0000'/>
+ </interface>
+ <serial type='pty'>
+ <target type='isa-serial' port='0'>
+ <model name='isa-serial'/>
+ </target>
+ </serial>
+ <console type='pty'>
+ <target type='serial' port='0'/>
+ </console>
+ <input type='tablet' bus='usb'>
+ <address type='usb' bus='0' port='1'/>
+ </input>
+ <memballoon model='virtio'>
+ <address type='pci' domain='0x0000'/>
+ </memballoon>
+ </devices>
+</domain>
new file mode 100644
@@ -0,0 +1,28 @@
+BR2_x86_64=y
+BR2_TOOLCHAIN_EXTERNAL=y
+BR2_TOOLCHAIN_EXTERNAL_DOWNLOAD=y
+BR2_TOOLCHAIN_EXTERNAL_URL="https://toolchains.bootlin.com/downloads/releases/toolchains/x86-64-core-i7/tarballs/x86-64-core-i7--glibc--bleeding-edge-2018.11-1.tar.bz2"
+BR2_TOOLCHAIN_EXTERNAL_GCC_8=y
+BR2_TOOLCHAIN_EXTERNAL_HEADERS_4_14=y
+BR2_TOOLCHAIN_EXTERNAL_CUSTOM_GLIBC=y
+BR2_TOOLCHAIN_EXTERNAL_CXX=y
+BR2_TARGET_GENERIC_HOSTNAME="test-vm"
+BR2_TARGET_GENERIC_ISSUE="Welcome to test-vm"
+BR2_SYSTEM_DHCP="eth0"
+BR2_ROOTFS_POST_BUILD_SCRIPT="package/test-vm/post-build.sh"
+BR2_ROOTFS_POST_IMAGE_SCRIPT="support/scripts/genimage.sh"
+BR2_ROOTFS_POST_SCRIPT_ARGS="-c board/pc/genimage-bios.cfg"
+BR2_LINUX_KERNEL=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="4.19.16"
+BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86_64/linux.config"
+BR2_LINUX_KERNEL_INSTALL_TARGET=y
+BR2_PACKAGE_ACPID=y
+BR2_TARGET_ROOTFS_EXT2=y
+BR2_TARGET_ROOTFS_EXT2_4=y
+BR2_TARGET_ROOTFS_EXT2_SIZE="120M"
+# BR2_TARGET_ROOTFS_TAR is not set
+BR2_TARGET_GRUB2=y
+BR2_TARGET_GRUB2_BUILTIN_MODULES="boot linux ext2 fat squash4 part_msdos part_gpt normal biosdisk serial"
+BR2_PACKAGE_HOST_GENIMAGE=y