From 2e0fd28b2470f6d81bfb1b0b273af5742060ed6a Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Sun, 12 May 2024 15:28:59 -0400 Subject: Rework KVM demo configuration Changes: - Move KVM demo configuration and image recipes to a new sub-layer, meta-agl-kvm-demo, to keep things that may not be buildable with just the agl-demo feature separate to avoid confusion. It will hopefully also avoid clutter in recipes-platform/images. This sub-layer is pulled in when the agl-kvm setup feature is given to aglsetup.sh. - Remove the agl-kvm-host-kuksa and agl-kvm-host-audio setup features. - Add new *-guest and *-guest-preconfigured flavors of the Flutter IVI and IC images under meta-agl-kvm-demo that that have the desired configuration changes baked in. - Add required qemu-config recipe variants for the new guest image flavors. At the moment there is more duplication of configuration for this than is desired, and some reworking of agl-qemu-runner configuration may come as a follow up to avoid this. - Remove qemu-config recipe variants for unused Qt guest images. If it becomes desirable to use the Qt demo images as guests this can be revisited. - Added agl-kvm-demo-flutter-preconfigured image variant that supports the full demo setup (i.e. "green machine" with steering wheel, equivalent to CES 2024 demos). NOTES: - The agl-kvm-demo image remains and builds roughly the same image as before, with the KUKSA.val databroker running in the IVI guest and cluster support enabled. Replacing this image with a bbclass abstraction and an e.g. agl-kvm-demo-flutter image is under consideration. Bug-AGL: SPEC-5138 Change-Id: I64936208fd032e5ba47366e3a7ff572dc18338e4 Signed-off-by: Scott Murray Reviewed-on: https://gerrit.automotivelinux.org/gerrit/c/AGL/meta-agl-demo/+/29918 ci-image-build: Jenkins Job builder account Tested-by: Jenkins Job builder account ci-image-boot-test: Jenkins Job builder account --- .../agl-qemu-runner/agl-qemu-runner.bb | 25 ++++++++ .../agl-qemu-runner/files/agl-qemu-runner.sh | 72 ++++++++++++++++++++++ .../agl-qemu-runner/files/agl-qemu-runner@.service | 12 ++++ 3 files changed, 109 insertions(+) create mode 100644 meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/agl-qemu-runner.bb create mode 100755 meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh create mode 100644 meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service (limited to 'meta-agl-kvm-demo/recipes-extended') diff --git a/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/agl-qemu-runner.bb b/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/agl-qemu-runner.bb new file mode 100644 index 00000000..b3e3a67d --- /dev/null +++ b/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/agl-qemu-runner.bb @@ -0,0 +1,25 @@ +SUMMARY = "AGL simple QEMU runner script" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit systemd allarch + +SRC_URI = "file://agl-qemu-runner.sh \ + file://agl-qemu-runner@.service \ +" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" + +do_install() { + # Install template unit + install -d ${D}${systemd_system_unitdir} + install -m 0644 ${WORKDIR}/agl-qemu-runner@.service ${D}${systemd_system_unitdir}/ + + # Install script + install -D -m 0755 ${WORKDIR}/agl-qemu-runner.sh ${D}${sbindir}/agl-qemu-runner.sh +} + +FILES:${PN} += "${systemd_system_unitdir}" + +RDEPENDS:${PN} += "bash qemu" diff --git a/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh b/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh new file mode 100755 index 00000000..f0136b6d --- /dev/null +++ b/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh @@ -0,0 +1,72 @@ +#!/bin/bash +# SPDX-License-Identifier: Apache-2.0 + +if [ -z "$1" ]; then + echo "Usage: ${basename $0} " + exit 1 +fi +image="$1" + +conf="/etc/agl-qemu-runner/${image}.conf" +if [ ! -f "$conf" ]; then + echo "No configuration file $conf" + exit 1 +fi + +. $conf + +arch="$(uname -m)" +if [ -z "$QEMU_IMAGE_ARCH" ]; then + QEMU_IMAGE_ARCH="virtio-${arch}" +fi + +disk="/var/lib/machines/${image}/${image}-${QEMU_IMAGE_ARCH}.ext4" +if [ ! -f "$disk" ]; then + echo "No disk image for $image" + exit 1 +fi +kernel="/var/lib/machines/${image}/Image-${QEMU_IMAGE_ARCH}.bin" +if [ ! -f "$kernel" ]; then + echo "No kernel for $image" + exit 1 +fi + +TASKSET_CMD="" +if [ -n "$QEMU_TASKSET_CPUS" ]; then + TASKSET_CMD="taskset -c ${QEMU_TASKSET_CPUS}" +fi + +export SDL_VIDEODRIVER=wayland +export XDG_RUNTIME_DIR=/run/user/1001 +# The following may be needed if the socket is not wayland-0, as SDL +# seems to lack detection logic for that case. +#export WAYLAND_DISPLAY=wayland-1 + +# This sets the XDG app id, which we need for setting outputs with +# agl-compositor. If QEMU_XDG_APP_ID is not set, the image name +# is used. +export SDL_VIDEO_WAYLAND_WMCLASS="${QEMU_XDG_APP_ID:-${image}}" + +${TASKSET_CMD} \ +qemu-system-${arch} \ + -enable-kvm \ + -machine virt,gic-version=max,iommu=smmuv3 \ + -cpu host \ + ${QEMU_SMP_OPT} \ + ${QEMU_MEM_OPT} \ + -kernel $kernel \ + -append "${QEMU_KERNEL_CMDLINE_APPEND}" \ + -drive id=disk0,file=${disk},format=raw,if=none \ + -serial mon:pty \ + -object rng-random,filename=/dev/urandom,id=rng0 \ + -device virtio-blk-device,drive=disk0 \ + -device virtio-rng-device,rng=rng0 \ + ${QEMU_NET_OPT} \ + ${QEMU_INPUT_OPT} \ + -global virtio-mmio.force-legacy=false \ + -device virtio-gpu-gl-device \ + -display sdl,gl=on -vga std \ + ${QEMU_AUDIO_OPT} \ + ${QEMU_CAN_OPT} \ + ${QEMU_EXTRA_OPT} \ + -full-screen diff --git a/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service b/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service new file mode 100644 index 00000000..d19c529f --- /dev/null +++ b/meta-agl-kvm-demo/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service @@ -0,0 +1,12 @@ +[Unit] +Requires=native-shell-client.service +After=native-shell-client.service + +[Service] +Type=simple +ExecStart=/usr/sbin/agl-qemu-runner.sh %i +#Restart=on-failure +Restart=no + +[Install] +WantedBy=multi-user.target -- cgit 1.2.3-korg