From patchwork Fri Mar 31 10:40:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22021 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F2A01C77B62 for ; Fri, 31 Mar 2023 10:40:47 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web11.51476.1680259240421530960 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002Hm-EK; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBP-007yTs-UL; Fri, 31 Mar 2023 12:40:35 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006DmF-50; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 1/9] barebox: add initial support Date: Fri, 31 Mar 2023 12:40:17 +0200 Message-Id: <20230331104025.1478393-2-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179426 From: Marco Felsch This adds the support for the barebox bootloader to oe-core. The recipe is based on the recipe found in meta-ptx [1] with a few minor adaptions. This basic support includes the bootloader and the target tools to interact with the bootloader. The host tools support is not part of this commit. This will be added later on as separate recipe. [1] https://github.com/pengutronix/meta-ptx/tree/master/recipes-bsp/barebox Signed-off-by: Marco Felsch Signed-off-by: Enrico Jorns --- meta/conf/distro/include/maintainers.inc | 1 + meta/recipes-bsp/barebox/barebox.inc | 133 ++++++++++++++++++ meta/recipes-bsp/barebox/barebox_2023.03.0.bb | 3 + 3 files changed, 137 insertions(+) create mode 100644 meta/recipes-bsp/barebox/barebox.inc create mode 100644 meta/recipes-bsp/barebox/barebox_2023.03.0.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 682ec2cfdf..86d5519489 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -54,6 +54,7 @@ RECIPE_MAINTAINER:pn-automake = "Robert Yang " RECIPE_MAINTAINER:pn-avahi = "Yi Zhao " RECIPE_MAINTAINER:pn-babeltrace = "Alexander Kanavin " RECIPE_MAINTAINER:pn-babeltrace2 = "Alexander Kanavin " +RECIPE_MAINTAINER:pn-barebox = "Enrico Jörns " RECIPE_MAINTAINER:pn-baremetal-helloworld = "Alejandro Hernandez " RECIPE_MAINTAINER:pn-base-files = "Anuj Mittal " RECIPE_MAINTAINER:pn-base-passwd = "Anuj Mittal " diff --git a/meta/recipes-bsp/barebox/barebox.inc b/meta/recipes-bsp/barebox/barebox.inc new file mode 100644 index 0000000000..a6c790b84b --- /dev/null +++ b/meta/recipes-bsp/barebox/barebox.inc @@ -0,0 +1,133 @@ +SUMMARY = "barebox is a bootloader designed for embedded systems. It runs on a variety of architectures including x86, ARM, MIPS, PowerPC and others." +HOMEPAGE = "https://barebox.org/" +SECTION = "bootloaders" +PROVIDES = "virtual/bootloader" + +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://COPYING;md5=f5125d13e000b9ca1f0d3364286c4192" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +require conf/image-uefi.conf + +inherit kernel-arch deploy cml1 pkgconfig + +# libusb1 is only required for usb tools like imx-usb-loader. These tools may +# be enabled within the defconfig file so depend on it here to be more user +# friendly (do not abort the build). The actual tools are provided by the +# barebox-tools package. +DEPENDS = "libusb1 bison-native flex-native" + +export KBUILD_BUILD_USER ?= "oe-user" +export KBUILD_BUILD_HOST ?= "oe-host" + +SRC_URI = "https://barebox.org/download/barebox-${PV}.tar.bz2" + +S = "${WORKDIR}/barebox-${PV}" +B = "${WORKDIR}/build" + +def get_layer_rev(path): + try: + rev, _ = bb.process.run("git describe --match='' --always --dirty --broken", cwd=path) + except bb.process.ExecutionError: + rev = "" + return rev.strip() + +BAREBOX_BUILDSYSTEM_VERSION[doc] = "Build system version to add to the barebox image. By default this is the git description of the containing layer." +BAREBOX_BUILDSYSTEM_VERSION ??= "${@get_layer_rev(os.path.dirname(d.getVar('FILE')))}" + +BAREBOX_FIRMWARE_DIR[doc] = "Overwrite barebox' firmware blobs search directory (CONFIG_EXTRA_FIRMWARE_DIR) with this path, default ${B}/firmware" +BAREBOX_FIRMWARE_DIR ??= "${B}/firmware" + +EXTRA_OEMAKE = " \ + CROSS_COMPILE=${TARGET_PREFIX} -C ${S} O=${B} \ + BUILDSYSTEM_VERSION=${BAREBOX_BUILDSYSTEM_VERSION} \ + CONFIG_EXTRA_FIRMWARE_DIR=${BAREBOX_FIRMWARE_DIR} \ +" + +BAREBOX_CONFIG[doc] = "The barebox kconfig defconfig file. Not used if a file called defconfig is added to the SRC_URI." +BAREBOX_CONFIG ?= "" + +do_configure() { + if [ -e ${WORKDIR}/defconfig ]; then + cp ${WORKDIR}/defconfig ${B}/.config + else + if [ -n "${BAREBOX_CONFIG}" ]; then + oe_runmake ${BAREBOX_CONFIG} + else + bbfatal "No defconfig given. Either add file 'file://defconfig' to SRC_URI or set BAREBOX_CONFIG" + fi + fi + + ${S}/scripts/kconfig/merge_config.sh -m .config ${@" ".join(find_cfgs(d))} + cml1_do_configure +} + +BAREBOX_ENV_DIR[doc] = "Overlay the barebox built-in environment with the environment provided by the BSP if specified." +BAREBOX_ENV_DIR ??= "${WORKDIR}/env/" + +do_compile () { + export userccflags="${TARGET_LDFLAGS}${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" + unset LDFLAGS + unset CFLAGS + unset CPPFLAGS + unset CXXFLAGS + unset MACHINE + + if [ -d ${BAREBOX_ENV_DIR} ]; then + BAREBOX_DEFAULT_ENV="$(grep ^CONFIG_DEFAULT_ENVIRONMENT_PATH .config | cut -d '=' -f 2 | tr -d '"')" + oe_runmake CONFIG_DEFAULT_ENVIRONMENT_PATH="\"${BAREBOX_DEFAULT_ENV} ${BAREBOX_ENV_DIR}\"" + else + oe_runmake + fi +} + +BAREBOX_BINARY[doc] = "Specify the barebox binary to install. If not specified all barebox artifacts are installed." +BAREBOX_BINARY ??= "${@'barebox.efi' if d.getVar('EFI_PROVIDER') == 'barebox' else ''}" +BAREBOX_SUFFIX[doc] = "Specify the suffix for ${BAREBOX_IMAGE}." +BAREBOX_SUFFIX ??= "img" +BAREBOX_IMAGE[doc] = "A unique barebox image name. Unused if ${BAREBOX_BINARY} is not set." +BAREBOX_IMAGE_DEFAULT ?= "${PN}-${MACHINE}-${PV}-${PR}.${BAREBOX_SUFFIX}" +BAREBOX_IMAGE ?= "${@'${EFI_BOOT_IMAGE}' if d.getVar('EFI_PROVIDER') == 'barebox' else '${BAREBOX_IMAGE_DEFAULT}'}" + +BAREBOX_INSTALL_PATH ?= "${@'${EFI_FILES_PATH}' if d.getVar('EFI_PROVIDER') == 'barebox' else '/boot'}" + +do_install () { + if [ -n "${BAREBOX_BINARY}" ]; then + + BAREBOX_BIN=${B}/${BAREBOX_BINARY} + if [ ! -f "${BAREBOX_BIN}" ]; then + BAREBOX_BIN=${B}/images/${BAREBOX_BINARY} + fi + if [ ! -f "${BAREBOX_BIN}" ]; then + bbfatal "Failed to locate ${BAREBOX_BINARY}" + fi + + install -D -m 644 ${BAREBOX_BIN} ${D}${BAREBOX_INSTALL_PATH}/${BAREBOX_IMAGE} + ln -sf ${BAREBOX_IMAGE} ${D}${BAREBOX_INSTALL_PATH}/${BAREBOX_BINARY} + else + install -d ${D}${BAREBOX_INSTALL_PATH}/ + for image in $(cat ${B}/barebox-flash-images); do + install -m 644 ${B}/${image} ${D}${BAREBOX_INSTALL_PATH}/ + done + fi +} +FILES:${PN} = "${BAREBOX_INSTALL_PATH}" + +do_deploy () { + if [ -n "${BAREBOX_BINARY}" ]; then + + BAREBOX_BIN=${B}/${BAREBOX_BINARY} + if [ ! -f "${BAREBOX_BIN}" ]; then + BAREBOX_BIN=${B}/images/${BAREBOX_BINARY} + fi + + install -D -m 644 ${BAREBOX_BIN} ${DEPLOYDIR}/${BAREBOX_IMAGE} + ln -sf ${BAREBOX_IMAGE} ${DEPLOYDIR}/${BAREBOX_BINARY} + else + for image in $(cat ${B}/barebox-flash-images); do + cp ${B}/${image} ${DEPLOYDIR} + done + fi +} +addtask deploy after do_compile diff --git a/meta/recipes-bsp/barebox/barebox_2023.03.0.bb b/meta/recipes-bsp/barebox/barebox_2023.03.0.bb new file mode 100644 index 0000000000..860b68a95f --- /dev/null +++ b/meta/recipes-bsp/barebox/barebox_2023.03.0.bb @@ -0,0 +1,3 @@ +require barebox.inc + +SRC_URI[sha256sum] = "d0f78a69ba240327247c8fd0e1d45287e4a0dff99ed847e9a696cc2da0cf388c" From patchwork Fri Mar 31 10:40:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22015 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id F3235C77B6E for ; Fri, 31 Mar 2023 10:40:47 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web11.51477.1680259240427921403 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002Hp-EK; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBQ-007yTu-1T; Fri, 31 Mar 2023 12:40:36 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006DmJ-6x; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 2/9] barebox-tools: add initial barebox tools support Date: Fri, 31 Mar 2023 12:40:18 +0200 Message-Id: <20230331104025.1478393-3-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179424 From: Marco Felsch Add initial support to build the barebox tools for the host and the target. Signed-off-by: Marco Felsch Signed-off-by: Enrico Jorns --- meta/conf/distro/include/maintainers.inc | 1 + .../barebox/barebox-tools_2023.03.0.bb | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 meta/recipes-bsp/barebox/barebox-tools_2023.03.0.bb diff --git a/meta/conf/distro/include/maintainers.inc b/meta/conf/distro/include/maintainers.inc index 86d5519489..1a0ba10d3b 100644 --- a/meta/conf/distro/include/maintainers.inc +++ b/meta/conf/distro/include/maintainers.inc @@ -55,6 +55,7 @@ RECIPE_MAINTAINER:pn-avahi = "Yi Zhao " RECIPE_MAINTAINER:pn-babeltrace = "Alexander Kanavin " RECIPE_MAINTAINER:pn-babeltrace2 = "Alexander Kanavin " RECIPE_MAINTAINER:pn-barebox = "Enrico Jörns " +RECIPE_MAINTAINER:pn-barebox-tools = "Enrico Jörns " RECIPE_MAINTAINER:pn-baremetal-helloworld = "Alejandro Hernandez " RECIPE_MAINTAINER:pn-base-files = "Anuj Mittal " RECIPE_MAINTAINER:pn-base-passwd = "Anuj Mittal " diff --git a/meta/recipes-bsp/barebox/barebox-tools_2023.03.0.bb b/meta/recipes-bsp/barebox/barebox-tools_2023.03.0.bb new file mode 100644 index 0000000000..9ab1b6303d --- /dev/null +++ b/meta/recipes-bsp/barebox/barebox-tools_2023.03.0.bb @@ -0,0 +1,56 @@ +SUMMARY = "barebox bootloader tools" +HOMEPAGE = "https://barebox.org/" + +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://COPYING;md5=f5125d13e000b9ca1f0d3364286c4192" + +DEPENDS = "libusb1 bison-native flex-native" + +SRC_URI = "https://barebox.org/download/barebox-${PV}.tar.bz2" +SRC_URI[sha256sum] = "d0f78a69ba240327247c8fd0e1d45287e4a0dff99ed847e9a696cc2da0cf388c" + +S = "${WORKDIR}/barebox-${PV}" +B = "${WORKDIR}/build" + +inherit pkgconfig + +EXTRA_OEMAKE = " \ + ARCH=sandbox \ + CROSS_COMPILE=${TARGET_PREFIX} -C ${S} O=${B} \ + CROSS_PKG_CONFIG=pkg-config \ + " + +do_compile:class-target () { + export userccflags="${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS}" + export userldflags="${TARGET_LDFLAGS}${TOOLCHAIN_OPTIONS}" + oe_runmake targettools_defconfig + oe_runmake scripts +} + +do_compile:class-native () { + oe_runmake hosttools_defconfig + oe_runmake scripts +} + +BAREBOX_TOOLS = " \ + bareboxenv \ + bareboxcrc32 \ + kernel-install \ + bareboximd \ + omap3-usb-loader \ + omap4_usbboot \ + imx/imx-usb-loader \ + " + +BAREBOX_TOOLS_SUFFIX = "" +BAREBOX_TOOLS_SUFFIX:class-target = "-target" + +do_install () { + install -d ${D}${bindir} + + for tool in ${BAREBOX_TOOLS}; do + install -m 0755 scripts/${tool}${BAREBOX_TOOLS_SUFFIX} ${D}${bindir}/${tool##*/} + done +} + +BBCLASSEXTEND = "native nativesdk" From patchwork Fri Mar 31 10:40:19 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22013 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E479BC6FD18 for ; Fri, 31 Mar 2023 10:40:47 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web10.51525.1680259240422936052 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002IM-EK; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBR-007yU7-8j; Fri, 31 Mar 2023 12:40:37 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006DmN-8l; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 3/9] barebox: set default BAREBOX_CONFIG for qemu machines Date: Fri, 31 Mar 2023 12:40:19 +0200 Message-Id: <20230331104025.1478393-4-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179427 These are set in the barebox recipe rather in the corresponding machines (where they would belong otherwise) to keep the impact of barebox to oe-core minimal for now. Signed-off-by: Enrico Jorns --- meta/recipes-bsp/barebox/barebox.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meta/recipes-bsp/barebox/barebox.inc b/meta/recipes-bsp/barebox/barebox.inc index a6c790b84b..4827f7b3a4 100644 --- a/meta/recipes-bsp/barebox/barebox.inc +++ b/meta/recipes-bsp/barebox/barebox.inc @@ -48,6 +48,11 @@ EXTRA_OEMAKE = " \ BAREBOX_CONFIG[doc] = "The barebox kconfig defconfig file. Not used if a file called defconfig is added to the SRC_URI." BAREBOX_CONFIG ?= "" +# set defaults for oe-core MACHINEs to allow building barebox +BAREBOX_CONFIG:qemuarm = "vexpress_defconfig" +BAREBOX_CONFIG:qemuarm64 = "qemu_virt64_defconfig" +BAREBOX_CONFIG:qemux86-64 = "efi_defconfig" + do_configure() { if [ -e ${WORKDIR}/defconfig ]; then cp ${WORKDIR}/defconfig ${B}/.config From patchwork Fri Mar 31 10:40:20 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22017 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 00189C77B6C for ; Fri, 31 Mar 2023 10:40:47 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web11.51475.1680259240395665800 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002IH-EK; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBR-007yU4-0h; Fri, 31 Mar 2023 12:40:37 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006DmR-AN; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences Date: Fri, 31 Mar 2023 12:40:20 +0200 Message-Id: <20230331104025.1478393-5-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179425 If we talk to terminals that like colors, we need to ignore the vt100 escape sequences when matching strings. Signed-off-by: Enrico Jorns --- meta/lib/oeqa/utils/qemurunner.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 05385763ac..95c9e6596c 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -30,6 +30,7 @@ control_range = list(range(0,32))+list(range(127,160)) control_chars = [chr(x) for x in control_range if chr(x) not in string.printable] re_control_char = re.compile('[%s]' % re.escape("".join(control_chars))) +re_vt100 = re.compile(r'(\x1b\[|\x9b)[^@-_a-z]*[@-_a-z]|\x1b[@-_a-z]') class QemuRunner: @@ -662,7 +663,7 @@ class QemuRunner: time.sleep(0.1) answer = self.server_socket.recv(1024) if answer: - data += answer.decode('utf-8') + data += re_vt100.sub("", answer.decode('utf-8')) # Search the prompt to stop if re.search(self.boot_patterns['search_cmd_finished'], data): break From patchwork Fri Mar 31 10:40:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22019 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1F178C77B72 for ; Fri, 31 Mar 2023 10:40:48 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web11.51478.1680259240429544553 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002IR-EJ; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBR-007yUD-Lh; Fri, 31 Mar 2023 12:40:37 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006DmV-C8; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 5/9] oeqa/utils/qemurunner: simplify output parsing and make crlf-compatible Date: Fri, 31 Mar 2023 12:40:21 +0200 Message-Id: <20230331104025.1478393-6-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179423 Reduces the nesting depth and replaces the manual newline matching by built-in splitlines() method. This makes it compatible with shells that use windows-compatible line breaks, e.g. for EFI loaders. More comments and an early return handling should make the code a bit more readable. Signed-off-by: Enrico Jorns --- meta/lib/oeqa/utils/qemurunner.py | 32 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 95c9e6596c..1e544acc90 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -672,23 +672,21 @@ class QemuRunner: return (1, "") raise Exception("No data on serial console socket, connection closed?") - if data: - if raw: - status = 1 - else: - # Remove first line (command line) and last line (prompt) - data = data[data.find('$?\r\n')+4:data.rfind('\r\n')] - index = data.rfind('\r\n') - if index == -1: - status_cmd = data - data = "" - else: - status_cmd = data[index+2:] - data = data[:index] - if (status_cmd == "0"): - status = 1 - return (status, str(data)) - + # If we got no data, we assume something went wrong and return 0 + if not data: + return (0, str(None)) + + # in raw mode, we cannot check exit status output and thus assume success + if raw: + return (1, str(data)) + + # Split lines into array and remove first line (command line) and last line (prompt) + # Also remove empty lines to ease catching results + outlines = list(filter(None, data.splitlines()[1:-1])) + # Remaining last line contains exit code output + if (outlines[-1] == "0"): + status = 1 + return (status, "\n".join(outlines[0:-1])) def _dump_host(self): self.host_dumper.create_dir("qemu") From patchwork Fri Mar 31 10:40:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22014 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2433C76196 for ; Fri, 31 Mar 2023 10:40:47 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web10.51526.1680259240427796092 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002ID-EM; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBQ-007yTy-NJ; Fri, 31 Mar 2023 12:40:36 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006DmZ-Dn; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 6/9] oeqa/utils/commands: document runqemu context manager Date: Fri, 31 Mar 2023 12:40:22 +0200 Message-Id: <20230331104025.1478393-7-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179428 Usage and arguments are not necessarily self-explaining. Signed-off-by: Enrico Jorns --- meta/lib/oeqa/utils/commands.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/meta/lib/oeqa/utils/commands.py b/meta/lib/oeqa/utils/commands.py index f4daea2507..efbb6ab6f2 100644 --- a/meta/lib/oeqa/utils/commands.py +++ b/meta/lib/oeqa/utils/commands.py @@ -314,7 +314,22 @@ def create_temp_layer(templayerdir, templayername, priority=999, recipepathspec= @contextlib.contextmanager def runqemu(pn, ssh=True, runqemuparams='', image_fstype=None, launch_cmd=None, qemuparams=None, overrides={}, discard_writes=True): """ - launch_cmd means directly run the command, don't need set rootfs or env vars. + Starts a context manager for a 'oeqa.targetcontrol.QemuTarget' resource. + The underlying Qemu will be booted into a shell when the generator yields. + + Usage: + + with runqemu('core-image-minimal') as qemu: + qemu.run_serial('cat /proc/cpuinfo') + + Args: + pn (str): (image) recipe to run on + ssh (boolean): whether or not to enable SSH (network access) + runqemuparams (str): space-separated list of params to pass to 'runqemu' script (like 'nographics', 'ovmf', etc.) + image_fstype (str): IMAGE_FSTYPE to use + launch_cmd (str): directly run this command and bypass automatic runqemu parameter generation + overrides (dict): dict of "'': value" pairs that allows overriding bitbake variables + discard_writes (boolean): enables qemu -snapshot feature to prevent modifying original image """ import bb.tinfoil From patchwork Fri Mar 31 10:40:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22016 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E37A1C761AF for ; Fri, 31 Mar 2023 10:40:47 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web10.51524.1680259240377977703 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002IP-EJ; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBR-007yUA-Ey; Fri, 31 Mar 2023 12:40:37 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006Dmd-FU; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 7/9] oeqa: support passing custom boot patterns to runqemu Date: Fri, 31 Mar 2023 12:40:23 +0200 Message-Id: <20230331104025.1478393-8-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:47 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179419 This allows defining non-standard patterns from QEMU tests just as they are already supported by the testimage.bbclass. Will allow testing non-Linux shells in QEMU, too, e.g. a U-Boot or other bootloader shell. Signed-off-by: Enrico Jorns --- meta/lib/oeqa/targetcontrol.py | 5 +++-- meta/lib/oeqa/utils/commands.py | 5 +++-- meta/lib/oeqa/utils/qemurunner.py | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/meta/lib/oeqa/targetcontrol.py b/meta/lib/oeqa/targetcontrol.py index 1fdff82889..43a213ac0e 100644 --- a/meta/lib/oeqa/targetcontrol.py +++ b/meta/lib/oeqa/targetcontrol.py @@ -92,7 +92,7 @@ class QemuTarget(BaseTarget): supported_image_fstypes = ['ext3', 'ext4', 'cpio.gz', 'wic'] - def __init__(self, d, logger, image_fstype=None): + def __init__(self, d, logger, image_fstype=None, boot_patterns=None): import oe.types @@ -148,7 +148,8 @@ class QemuTarget(BaseTarget): dump_host_cmds = d.getVar("testimage_dump_host"), logger = logger, tmpfsdir = d.getVar("RUNQEMU_TMPFS_DIR"), - serial_ports = len(d.getVar("SERIAL_CONSOLES").split())) + serial_ports = len(d.getVar("SERIAL_CONSOLES").split()), + boot_patterns = boot_patterns) self.target_dumper = TargetDumper(dump_target_cmds, dump_dir, self.runner) self.monitor_dumper = MonitorDumper(dump_monitor_cmds, dump_dir, self.runner) diff --git a/meta/lib/oeqa/utils/commands.py b/meta/lib/oeqa/utils/commands.py index efbb6ab6f2..1f6a617367 100644 --- a/meta/lib/oeqa/utils/commands.py +++ b/meta/lib/oeqa/utils/commands.py @@ -312,7 +312,7 @@ def create_temp_layer(templayerdir, templayername, priority=999, recipepathspec= f.write('LAYERSERIES_COMPAT_%s = "%s"\n' % (templayername, corenames)) @contextlib.contextmanager -def runqemu(pn, ssh=True, runqemuparams='', image_fstype=None, launch_cmd=None, qemuparams=None, overrides={}, discard_writes=True): +def runqemu(pn, ssh=True, runqemuparams='', image_fstype=None, launch_cmd=None, qemuparams=None, overrides={}, boot_patterns = {}, discard_writes=True): """ Starts a context manager for a 'oeqa.targetcontrol.QemuTarget' resource. The underlying Qemu will be booted into a shell when the generator yields. @@ -329,6 +329,7 @@ def runqemu(pn, ssh=True, runqemuparams='', image_fstype=None, launch_cmd=None, image_fstype (str): IMAGE_FSTYPE to use launch_cmd (str): directly run this command and bypass automatic runqemu parameter generation overrides (dict): dict of "'': value" pairs that allows overriding bitbake variables + boot_patterns (dict): dict of "'': value" pairs to override default boot patterns, e.g. when not booting Linux discard_writes (boolean): enables qemu -snapshot feature to prevent modifying original image """ @@ -360,7 +361,7 @@ def runqemu(pn, ssh=True, runqemuparams='', image_fstype=None, launch_cmd=None, logdir = recipedata.getVar("TEST_LOG_DIR") - qemu = oeqa.targetcontrol.QemuTarget(recipedata, targetlogger, image_fstype) + qemu = oeqa.targetcontrol.QemuTarget(recipedata, targetlogger, image_fstype, boot_patterns=boot_patterns) finally: # We need to shut down tinfoil early here in case we actually want # to run tinfoil-using utilities with the running QEMU instance. diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py index 1e544acc90..0d64df7253 100644 --- a/meta/lib/oeqa/utils/qemurunner.py +++ b/meta/lib/oeqa/utils/qemurunner.py @@ -93,7 +93,7 @@ class QemuRunner: # Only override patterns that were set e.g. login user TESTIMAGE_BOOT_PATTERNS[send_login_user] = "webserver\n" for pattern in accepted_patterns: - if not self.boot_patterns[pattern]: + if pattern not in self.boot_patterns or not self.boot_patterns[pattern]: self.boot_patterns[pattern] = default_boot_patterns[pattern] def create_socket(self): From patchwork Fri Mar 31 10:40:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22018 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 12C9DC77B6F for ; Fri, 31 Mar 2023 10:40:48 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web11.51473.1680259240364668679 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002IG-EK; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBQ-007yU1-TU; Fri, 31 Mar 2023 12:40:36 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006Dmh-HP; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 8/9] oeqa/selftest/cases: add barebox tests Date: Fri, 31 Mar 2023 12:40:24 +0200 Message-Id: <20230331104025.1478393-9-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179422 Signed-off-by: Enrico Jorns --- meta/lib/oeqa/selftest/cases/barebox.py | 72 +++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 meta/lib/oeqa/selftest/cases/barebox.py diff --git a/meta/lib/oeqa/selftest/cases/barebox.py b/meta/lib/oeqa/selftest/cases/barebox.py new file mode 100644 index 0000000000..497cd6e8dd --- /dev/null +++ b/meta/lib/oeqa/selftest/cases/barebox.py @@ -0,0 +1,72 @@ +# Qemu-based barebox bootloader integration testing +# +# Copyright OpenEmbedded Contributors +# +# SPDX-License-Identifier: MIT +# + +from oeqa.selftest.case import OESelftestTestCase +from oeqa.utils.commands import bitbake, runqemu +from oeqa.core.decorator.data import skipIfNotArch +from oeqa.core.decorator import OETestTag + +barebox_boot_patterns = { + 'search_reached_prompt': r"stop autoboot", + 'search_login_succeeded': r"barebox@[^:]+:[^ ]+ ", + 'search_cmd_finished': r"barebox@[a-zA-Z0-9\-\s]+:/" + } + + +class BareboxTest(OESelftestTestCase): + + @skipIfNotArch(['arm', 'aarch64']) + @OETestTag("runqemu") + def test_boot_barebox(self): + """ + Tests building barebox and booting it with QEMU + """ + + self.write_config(""" +QB_DEFAULT_KERNEL = "barebox-dt-2nd.img" +PREFERRED_PROVIDER_virtual/bootloader = "barebox" +""") + + bitbake("virtual/bootloader core-image-minimal") + + with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic', + boot_patterns=barebox_boot_patterns) as qemu: + + # test if barebox console works + cmd = "version" + status, output = qemu.run_serial(cmd) + self.assertEqual(status, 1, msg=output) + self.assertTrue("barebox" in output, msg=output) + + @skipIfNotArch(['x86_64']) + @OETestTag("runqemu") + def test_boot_barebox_efi(self): + """ + Tests building barebox for UEFI and booting it as EFI payload + with QEMU + OVMF + """ + image = "core-image-minimal" + + self.write_config(""" +IMAGE_INSTALL:append = " barebox" +MACHINE_FEATURES:append = " pcbios efi" +EXTRA_IMAGEDEPENDS += "ovmf" +EFI_PROVIDER = "barebox" +IMAGE_FSTYPES += "wic" +WKS_FILE = "efi-bootdisk.wks.in" +""") + + bitbake(image) + + with runqemu(image, ssh=False, runqemuparams='nographic ovmf', + boot_patterns=barebox_boot_patterns, image_fstype='wic') as qemu: + + # test if barebox console works + cmd = "version" + status, output = qemu.run_serial(cmd) + self.assertEqual(status, 1, msg=output) + self.assertTrue("barebox" in output, msg=output) From patchwork Fri Mar 31 10:40:25 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Enrico_J=C3=B6rns?= X-Patchwork-Id: 22020 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2E69EC77B71 for ; Fri, 31 Mar 2023 10:40:48 +0000 (UTC) Received: from metis.ext.pengutronix.de (metis.ext.pengutronix.de [85.220.165.71]) by mx.groups.io with SMTP id smtpd.web11.51479.1680259240443224338 for ; Fri, 31 Mar 2023 03:40:40 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: pengutronix.de, ip: 85.220.165.71, mailfrom: ejo@pengutronix.de) Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piCBS-0002IV-H0; Fri, 31 Mar 2023 12:40:38 +0200 Received: from [2a0a:edc0:0:1101:1d::ac] (helo=dude04.red.stw.pengutronix.de) by drehscheibe.grey.stw.pengutronix.de with esmtp (Exim 4.94.2) (envelope-from ) id 1piCBR-007yUG-SF; Fri, 31 Mar 2023 12:40:37 +0200 Received: from ejo by dude04.red.stw.pengutronix.de with local (Exim 4.94.2) (envelope-from ) id 1piCBP-006Dml-JD; Fri, 31 Mar 2023 12:40:35 +0200 From: Enrico Jorns To: openembedded-core@lists.openembedded.org Cc: yocto@pengutronix.de, ejo@pengutronix.de, Richard Purdie , Alexander Kanavin , alexandre.belloni@bootlin.com Subject: [PATCH v2 9/9] oeqa/selftest/cases: add basic u-boot test Date: Fri, 31 Mar 2023 12:40:25 +0200 Message-Id: <20230331104025.1478393-10-ejo@pengutronix.de> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230331104025.1478393-1-ejo@pengutronix.de> References: <20230331104025.1478393-1-ejo@pengutronix.de> MIME-Version: 1.0 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ejo@pengutronix.de X-SA-Exim-Scanned: No (on metis.ext.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: openembedded-core@lists.openembedded.org List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Fri, 31 Mar 2023 10:40:48 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/179420 Signed-off-by: Enrico Jorns --- meta/lib/oeqa/selftest/cases/uboot.py | 40 +++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 meta/lib/oeqa/selftest/cases/uboot.py diff --git a/meta/lib/oeqa/selftest/cases/uboot.py b/meta/lib/oeqa/selftest/cases/uboot.py new file mode 100644 index 0000000000..d3c60c3052 --- /dev/null +++ b/meta/lib/oeqa/selftest/cases/uboot.py @@ -0,0 +1,40 @@ +# Qemu-based u-boot bootloader integration testing +# +# Copyright OpenEmbedded Contributors +# +# SPDX-License-Identifier: MIT +# + +from oeqa.selftest.case import OESelftestTestCase +from oeqa.utils.commands import bitbake, runqemu +from oeqa.core.decorator import OETestTag + +uboot_boot_patterns = { + 'search_reached_prompt': "stop autoboot", + 'search_login_succeeded': "=>", + 'search_cmd_finished': "=>" + } + + +class UBootTest(OESelftestTestCase): + + @OETestTag("runqemu") + def test_boot_uboot(self): + """ + Tests building u-boot and booting it with QEMU + """ + + self.write_config(""" +QB_DEFAULT_BIOS = "u-boot.bin" +PREFERRED_PROVIDER_virtual/bootloader = "u-boot" +""") + bitbake("virtual/bootloader core-image-minimal") + + with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic', + boot_patterns=uboot_boot_patterns) as qemu: + + # test if u-boot console works + cmd = "version" + status, output = qemu.run_serial(cmd) + self.assertEqual(status, 1, msg=output) + self.assertTrue("U-Boot" in output, msg=output)