diff options
author | Scott Murray <scott.murray@konsulko.com> | 2022-11-23 15:37:20 -0500 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2022-11-23 16:17:51 -0500 |
commit | dce8116fb1a1b6f3c2976db126d9f923e2fe4c6f (patch) | |
tree | 6f250dfebc50e8323c4a955784a7c7a8cf06b889 /recipes-extended | |
parent | 46a4e4e4f43625686e73db8523bbfc9abaed558f (diff) |
agl-qemu-runner: Add recipes
Add recipes for agl-qemu-runner.sh QEMU wrapper script and template
systemd unit, and guest per-image configuration files and systemd
unit links for the various demo platform images. The configurations
for the demo images can be mixed and matched somewhat, but only one
each of IVI and cluster should be used, as there are some static CPU
assignments in the configurations. As well, this has only been
tested on the AGL reference hardware at present, some rework will
likely be required to support other platforms.
There is room to add a bbclass to simplify the guest configuration
recipes, but that has not been done for now as this approach may be
temporary; a switch to libvirtd with appropriate configurations is
likely.
Bug-AGL: SPEC-4618
Change-Id: Ieefbd4081cca506f915957cc313411a5ed1ece5c
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Diffstat (limited to 'recipes-extended')
3 files changed, 107 insertions, 0 deletions
diff --git a/recipes-extended/agl-qemu-runner/agl-qemu-runner.bb b/recipes-extended/agl-qemu-runner/agl-qemu-runner.bb new file mode 100644 index 000000000..b3e3a67dd --- /dev/null +++ b/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/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh b/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh new file mode 100755 index 000000000..d12764735 --- /dev/null +++ b/recipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# SPDX-License-Identifier: Apache-2.0 + +if [ -z "$1" ]; then + echo "Usage: ${basename $0} <image name>" + 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 +export SDL_VIDEO_WAYLAND_WMCLASS="${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 \ + -netdev user,id=net-user \ + -device virtio-blk-device,drive=disk0 \ + -device virtio-net-device,netdev=net-user,mac=52:54:00:12:00:02 \ + -device virtio-rng-device,rng=rng0 \ + ${QEMU_INPUT_OPT} \ + -global virtio-mmio.force-legacy=false \ + -device virtio-gpu-gl-device \ + -display sdl,gl=on -vga std \ + ${QEMU_AUDIO_OPT} \ + ${QEMU_EXTRA_OPT} \ + -full-screen diff --git a/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service b/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service new file mode 100644 index 000000000..a9e9f3346 --- /dev/null +++ b/recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service @@ -0,0 +1,11 @@ +[Unit] +Requires=agl-session@agl-driver.service +After=agl-session@agl-driver.service + +[Service] +Type=simple +ExecStart=/usr/sbin/agl-qemu-runner.sh %i +Restart=on-failure + +[Install] +WantedBy=multi-user.target |