summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-11-23 15:37:20 -0500
committerJan-Simon Moeller <jsmoeller@linuxfoundation.org>2022-12-14 16:28:00 +0000
commit7aeccbeaf418826795f7f1be4715d857628f8982 (patch)
treeaf356c5c373f8f108d62204191dcb67882a92499
parent663de2a9c4404f56f032d01aa49b441b42a28521 (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> (cherry picked from commit dce8116fb1a1b6f3c2976db126d9f923e2fe4c6f)
-rw-r--r--recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf4
-rw-r--r--recipes-config/qemu-config/files/agl-cluster-demo-platform.conf4
-rw-r--r--recipes-config/qemu-config/files/agl-demo-platform.conf6
-rw-r--r--recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf6
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb29
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb29
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-demo-platform.bb29
-rw-r--r--recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb29
-rw-r--r--recipes-extended/agl-qemu-runner/agl-qemu-runner.bb25
-rwxr-xr-xrecipes-extended/agl-qemu-runner/files/agl-qemu-runner.sh71
-rw-r--r--recipes-extended/agl-qemu-runner/files/agl-qemu-runner@.service11
11 files changed, 243 insertions, 0 deletions
diff --git a/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf b/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf
new file mode 100644
index 00000000..262f3c2d
--- /dev/null
+++ b/recipes-config/qemu-config/files/agl-cluster-demo-platform-flutter.conf
@@ -0,0 +1,4 @@
+QEMU_TASKSET_CPUS="4-7"
+QEMU_SMP_OPT="-smp 4"
+QEMU_MEM_OPT="-m 2G"
+QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=2048M video=Virtual-1:1920x1080"
diff --git a/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf b/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf
new file mode 100644
index 00000000..262f3c2d
--- /dev/null
+++ b/recipes-config/qemu-config/files/agl-cluster-demo-platform.conf
@@ -0,0 +1,4 @@
+QEMU_TASKSET_CPUS="4-7"
+QEMU_SMP_OPT="-smp 4"
+QEMU_MEM_OPT="-m 2G"
+QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=2048M video=Virtual-1:1920x1080"
diff --git a/recipes-config/qemu-config/files/agl-demo-platform.conf b/recipes-config/qemu-config/files/agl-demo-platform.conf
new file mode 100644
index 00000000..e7238678
--- /dev/null
+++ b/recipes-config/qemu-config/files/agl-demo-platform.conf
@@ -0,0 +1,6 @@
+QEMU_TASKSET_CPUS="0-3"
+QEMU_SMP_OPT="-smp 4"
+QEMU_MEM_OPT="-m 4G"
+QEMU_INPUT_OPT="-device virtio-tablet-device"
+QEMU_AUDIO_OPT="-audiodev alsa,id=agl -device intel-hda -device hda-duplex,audiodev=agl"
+QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=4196M video=Virtual-1:1920x1080"
diff --git a/recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf b/recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf
new file mode 100644
index 00000000..e7238678
--- /dev/null
+++ b/recipes-config/qemu-config/files/agl-ivi-demo-platform-flutter.conf
@@ -0,0 +1,6 @@
+QEMU_TASKSET_CPUS="0-3"
+QEMU_SMP_OPT="-smp 4"
+QEMU_MEM_OPT="-m 4G"
+QEMU_INPUT_OPT="-device virtio-tablet-device"
+QEMU_AUDIO_OPT="-audiodev alsa,id=agl -device intel-hda -device hda-duplex,audiodev=agl"
+QEMU_KERNEL_CMDLINE_APPEND="root=/dev/vda rw mem=4196M video=Virtual-1:1920x1080"
diff --git a/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb
new file mode 100644
index 00000000..c15528a6
--- /dev/null
+++ b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform-flutter.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Setting files for agl-cluster-demo-plaform-flutter guest VM"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://${QEMU_IMAGE}.conf"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+QEMU_IMAGE = "agl-cluster-demo-platform-flutter"
+QEMU_UNIT = "agl-qemu-runner@${QEMU_IMAGE}.service"
+
+do_install() {
+ # Install template unit links
+ install -d ${D}${systemd_system_unitdir}
+ ln -sf agl-qemu-runner@.service ${D}${systemd_system_unitdir}/${QEMU_UNIT}
+ install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
+ ln -sf ${systemd_system_unitdir}/${QEMU_UNIT} ${D}${systemd_system_unitdir}/multi-user.target.wants/${QEMU_UNIT}
+
+ # Install conf file
+ install -d ${D}${sysconfdir}/agl-qemu-runner
+ install -m 0644 ${WORKDIR}/${QEMU_IMAGE}.conf ${D}${sysconfdir}/agl-qemu-runner/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
+
+RDEPENDS:${PN} += "agl-qemu-runner"
diff --git a/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb
new file mode 100644
index 00000000..4f9c5a92
--- /dev/null
+++ b/recipes-config/qemu-config/qemu-config-agl-cluster-demo-platform.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Setting files for agl-cluster-demo-plaform guest VM"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://${QEMU_IMAGE}.conf"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+QEMU_IMAGE = "agl-cluster-demo-platform"
+QEMU_UNIT = "agl-qemu-runner@${QEMU_IMAGE}.service"
+
+do_install() {
+ # Install template unit links
+ install -d ${D}${systemd_system_unitdir}
+ ln -sf agl-qemu-runner@.service ${D}${systemd_system_unitdir}/${QEMU_UNIT}
+ install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
+ ln -sf ${systemd_system_unitdir}/${QEMU_UNIT} ${D}${systemd_system_unitdir}/multi-user.target.wants/${QEMU_UNIT}
+
+ # Install conf file
+ install -d ${D}${sysconfdir}/agl-qemu-runner
+ install -m 0644 ${WORKDIR}/${QEMU_IMAGE}.conf ${D}${sysconfdir}/agl-qemu-runner/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
+
+RDEPENDS:${PN} += "agl-qemu-runner"
diff --git a/recipes-config/qemu-config/qemu-config-agl-demo-platform.bb b/recipes-config/qemu-config/qemu-config-agl-demo-platform.bb
new file mode 100644
index 00000000..1d5e0df2
--- /dev/null
+++ b/recipes-config/qemu-config/qemu-config-agl-demo-platform.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Setting files for agl-demo-plaform guest VM"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://${QEMU_IMAGE}.conf"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+QEMU_IMAGE = "agl-demo-platform"
+QEMU_UNIT = "agl-qemu-runner@${QEMU_IMAGE}.service"
+
+do_install() {
+ # Install template unit links
+ install -d ${D}${systemd_system_unitdir}
+ ln -sf agl-qemu-runner@.service ${D}${systemd_system_unitdir}/${QEMU_UNIT}
+ install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
+ ln -sf ${systemd_system_unitdir}/${QEMU_UNIT} ${D}${systemd_system_unitdir}/multi-user.target.wants/${QEMU_UNIT}
+
+ # Install conf file
+ install -d ${D}${sysconfdir}/agl-qemu-runner
+ install -m 0644 ${WORKDIR}/${QEMU_IMAGE}.conf ${D}${sysconfdir}/agl-qemu-runner/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
+
+RDEPENDS:${PN} += "agl-qemu-runner"
diff --git a/recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb b/recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb
new file mode 100644
index 00000000..5efb7a96
--- /dev/null
+++ b/recipes-config/qemu-config/qemu-config-agl-ivi-demo-platform-flutter.bb
@@ -0,0 +1,29 @@
+SUMMARY = "Setting files for agl-ivi-demo-plaform-flutter guest VM"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+inherit systemd allarch
+
+SRC_URI = "file://${QEMU_IMAGE}.conf"
+
+do_configure[noexec] = "1"
+do_compile[noexec] = "1"
+
+QEMU_IMAGE = "agl-ivi-demo-platform-flutter"
+QEMU_UNIT = "agl-qemu-runner@${QEMU_IMAGE}.service"
+
+do_install() {
+ # Install template unit links
+ install -d ${D}${systemd_system_unitdir}
+ ln -sf agl-qemu-runner@.service ${D}${systemd_system_unitdir}/${QEMU_UNIT}
+ install -d ${D}${systemd_system_unitdir}/multi-user.target.wants
+ ln -sf ${systemd_system_unitdir}/${QEMU_UNIT} ${D}${systemd_system_unitdir}/multi-user.target.wants/${QEMU_UNIT}
+
+ # Install conf file
+ install -d ${D}${sysconfdir}/agl-qemu-runner
+ install -m 0644 ${WORKDIR}/${QEMU_IMAGE}.conf ${D}${sysconfdir}/agl-qemu-runner/
+}
+
+FILES:${PN} += "${systemd_system_unitdir}"
+
+RDEPENDS:${PN} += "agl-qemu-runner"
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 00000000..b3e3a67d
--- /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 00000000..d1276473
--- /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 00000000..a9e9f334
--- /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