Openembedded Core Discussions
 help / color / mirror / Atom feed
* [PATCH v3 0/9] Add barebox bootloader support (and testing)
@ 2023-04-25 18:47 Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 1/9] barebox: add initial support Enrico Jorns
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

This adds support for the barebox bootloader (and tools) to oe-core.

In order to have proper testing, this extends oe-selftest to allow
basic testing of bootloaders. While at it, cover both barebox and u-boot.

v3:

* bump to barebox 2023.04.0
* add anonymous python to not act as provider when no config is set
* reasoning for default BAREBOX_CONFIGs in patch description
  and set PREFERRED_PROVIDER_virtual/bootloader to u-boot to avoid
  conflicts
* extend patch description and add comment for vt100 regex
* set CC=${CC} and LD=${LD} in barebox-tools to fix musl builds

Enrico Jorns (7):
  barebox: set default BAREBOX_CONFIG for qemu machines
  oeqa/utils/qemurunner: support ignoring vt100 escape sequences
  oeqa/utils/qemurunner: simplify output parsing and make crlf-compatible
  oeqa/utils/commands: document runqemu context manager
  oeqa: support passing custom boot patterns to runqemu
  oeqa/selftest/cases: add barebox tests
  oeqa/selftest/cases: add basic u-boot test

Marco Felsch (2):
  barebox: add initial support
  barebox-tools: add initial barebox tools support

 meta/conf/distro/include/maintainers.inc      |   2 +
 meta/conf/machine/qemuarm.conf                |   1 +
 meta/conf/machine/qemuarm64.conf              |   1 +
 meta/conf/machine/qemux86-64.conf             |   1 +
 meta/lib/oeqa/selftest/cases/barebox.py       |  72 +++++++++
 meta/lib/oeqa/selftest/cases/uboot.py         |  40 +++++
 meta/lib/oeqa/targetcontrol.py                |   5 +-
 meta/lib/oeqa/utils/commands.py               |  22 ++-
 meta/lib/oeqa/utils/qemurunner.py             |  38 ++---
 .../barebox/barebox-tools_2023.04.0.bb        |  58 +++++++
 meta/recipes-bsp/barebox/barebox.inc          | 149 ++++++++++++++++++
 meta/recipes-bsp/barebox/barebox_2023.04.0.bb |   3 +
 12 files changed, 368 insertions(+), 24 deletions(-)
 create mode 100644 meta/lib/oeqa/selftest/cases/barebox.py
 create mode 100644 meta/lib/oeqa/selftest/cases/uboot.py
 create mode 100644 meta/recipes-bsp/barebox/barebox-tools_2023.04.0.bb
 create mode 100644 meta/recipes-bsp/barebox/barebox.inc
 create mode 100644 meta/recipes-bsp/barebox/barebox_2023.04.0.bb

-- 
2.39.2



^ permalink raw reply	[flat|nested] 15+ messages in thread

* [PATCH v3 1/9] barebox: add initial support
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-26 21:00   ` [OE-core] " Luca Ceresoli
  2023-04-25 18:47 ` [PATCH v3 2/9] barebox-tools: add initial barebox tools support Enrico Jorns
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

From: Marco Felsch <m.felsch@pengutronix.de>

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 <m.felsch@pengutronix.de>
Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 meta/conf/distro/include/maintainers.inc      |   1 +
 meta/recipes-bsp/barebox/barebox.inc          | 144 ++++++++++++++++++
 meta/recipes-bsp/barebox/barebox_2023.04.0.bb |   3 +
 3 files changed, 148 insertions(+)
 create mode 100644 meta/recipes-bsp/barebox/barebox.inc
 create mode 100644 meta/recipes-bsp/barebox/barebox_2023.04.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 <liezhi.yang@windriver.com>"
 RECIPE_MAINTAINER:pn-avahi = "Yi Zhao <yi.zhao@windriver.com>"
 RECIPE_MAINTAINER:pn-babeltrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
 RECIPE_MAINTAINER:pn-babeltrace2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
+RECIPE_MAINTAINER:pn-barebox = "Enrico Jörns <yocto@pengutronix.de>"
 RECIPE_MAINTAINER:pn-baremetal-helloworld = "Alejandro Hernandez <alejandro@enedino.org>"
 RECIPE_MAINTAINER:pn-base-files = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER:pn-base-passwd = "Anuj Mittal <anuj.mittal@intel.com>"
diff --git a/meta/recipes-bsp/barebox/barebox.inc b/meta/recipes-bsp/barebox/barebox.inc
new file mode 100644
index 0000000000..5609980a64
--- /dev/null
+++ b/meta/recipes-bsp/barebox/barebox.inc
@@ -0,0 +1,144 @@
+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 ?= ""
+
+# prevent from acting as non-buildable provider
+python () {
+    bareboxconfig = d.getVar('BAREBOX_CONFIG')
+    bareboxdefconfig = 'file://defconfig' in d.getVar('SRC_URI')
+
+    if not bareboxconfig and not bareboxdefconfig:
+        PN = d.getVar("PN")
+        FILE = os.path.basename(d.getVar("FILE"))
+        raise bb.parse.SkipRecipe("BAREBOX_CONFIG must be set in the %s machine configuration or file://defconfig must be given in SRC_URI." % d.getVar("MACHINE"))
+}
+
+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.04.0.bb b/meta/recipes-bsp/barebox/barebox_2023.04.0.bb
new file mode 100644
index 0000000000..250682b693
--- /dev/null
+++ b/meta/recipes-bsp/barebox/barebox_2023.04.0.bb
@@ -0,0 +1,3 @@
+require barebox.inc
+
+SRC_URI[sha256sum] = "c11386b2b72f7ab16c7aa21216e2119a6661d0f51420d14ab71bc9b0afc418ab"
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 2/9] barebox-tools: add initial barebox tools support
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 1/9] barebox: add initial support Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 3/9] barebox: set default BAREBOX_CONFIG for qemu machines Enrico Jorns
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

From: Marco Felsch <m.felsch@pengutronix.de>

Add initial support to build the barebox tools for the host and the
target.

Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 meta/conf/distro/include/maintainers.inc      |  1 +
 .../barebox/barebox-tools_2023.04.0.bb        | 58 +++++++++++++++++++
 2 files changed, 59 insertions(+)
 create mode 100644 meta/recipes-bsp/barebox/barebox-tools_2023.04.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 <yi.zhao@windriver.com>"
 RECIPE_MAINTAINER:pn-babeltrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
 RECIPE_MAINTAINER:pn-babeltrace2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
 RECIPE_MAINTAINER:pn-barebox = "Enrico Jörns <yocto@pengutronix.de>"
+RECIPE_MAINTAINER:pn-barebox-tools = "Enrico Jörns <yocto@pengutronix.de>"
 RECIPE_MAINTAINER:pn-baremetal-helloworld = "Alejandro Hernandez <alejandro@enedino.org>"
 RECIPE_MAINTAINER:pn-base-files = "Anuj Mittal <anuj.mittal@intel.com>"
 RECIPE_MAINTAINER:pn-base-passwd = "Anuj Mittal <anuj.mittal@intel.com>"
diff --git a/meta/recipes-bsp/barebox/barebox-tools_2023.04.0.bb b/meta/recipes-bsp/barebox/barebox-tools_2023.04.0.bb
new file mode 100644
index 0000000000..d409e75bcb
--- /dev/null
+++ b/meta/recipes-bsp/barebox/barebox-tools_2023.04.0.bb
@@ -0,0 +1,58 @@
+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] = "c11386b2b72f7ab16c7aa21216e2119a6661d0f51420d14ab71bc9b0afc418ab"
+
+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 \
+  CC='${CC}' \
+  LD='${LD}' \
+  "
+
+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"
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 3/9] barebox: set default BAREBOX_CONFIG for qemu machines
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 1/9] barebox: add initial support Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 2/9] barebox-tools: add initial barebox tools support Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences Enrico Jorns
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

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.

"multi_v7_defconfig" is used for qemuarm since this is the default
barebox armv7 config that just enables all platforms.

"qemu_virt64_defconfig" is used for qemuarm64 sine this is a dedicated
config for the standard QEMU armv8 'virt64' machine.

"efi_defconfig" is used for qemux86-64 which is the primary platform
where barebox will not be the first stage bootloader but an EFI payload.

Since these changes make barebox a provider for virtual/bootloader,
explicitly default to u-boot in the corresponding MACHINE configs to not
unnecessarily surprise users.

Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 meta/conf/machine/qemuarm.conf       | 1 +
 meta/conf/machine/qemuarm64.conf     | 1 +
 meta/conf/machine/qemux86-64.conf    | 1 +
 meta/recipes-bsp/barebox/barebox.inc | 5 +++++
 4 files changed, 8 insertions(+)

diff --git a/meta/conf/machine/qemuarm.conf b/meta/conf/machine/qemuarm.conf
index aa9ce88203..1394cce9ef 100644
--- a/meta/conf/machine/qemuarm.conf
+++ b/meta/conf/machine/qemuarm.conf
@@ -7,6 +7,7 @@ require conf/machine/include/qemu.inc
 
 KERNEL_IMAGETYPE = "zImage"
 
+PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
 UBOOT_MACHINE ?= "qemu_arm_defconfig"
 
 SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
diff --git a/meta/conf/machine/qemuarm64.conf b/meta/conf/machine/qemuarm64.conf
index 2f0f0e4f84..f289f7aa7d 100644
--- a/meta/conf/machine/qemuarm64.conf
+++ b/meta/conf/machine/qemuarm64.conf
@@ -7,6 +7,7 @@ require conf/machine/include/qemu.inc
 
 KERNEL_IMAGETYPE = "Image"
 
+PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
 UBOOT_MACHINE ?= "qemu_arm64_defconfig"
 
 SERIAL_CONSOLES ?= "115200;ttyAMA0 115200;hvc0"
diff --git a/meta/conf/machine/qemux86-64.conf b/meta/conf/machine/qemux86-64.conf
index 14873a3b4f..4a9c6d364b 100644
--- a/meta/conf/machine/qemux86-64.conf
+++ b/meta/conf/machine/qemux86-64.conf
@@ -13,6 +13,7 @@ DEFAULTTUNE ?= "core2-64"
 require conf/machine/include/x86/tune-x86-64-v3.inc
 require conf/machine/include/x86/qemuboot-x86.inc
 
+PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
 UBOOT_MACHINE ?= "qemu-x86_64_defconfig"
 
 KERNEL_IMAGETYPE = "bzImage"
diff --git a/meta/recipes-bsp/barebox/barebox.inc b/meta/recipes-bsp/barebox/barebox.inc
index 5609980a64..c5afb75f49 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 sensible default configs for some of oe-core's QEMU MACHINEs
+BAREBOX_CONFIG:qemuarm = "multi_v7_defconfig"
+BAREBOX_CONFIG:qemuarm64 = "qemu_virt64_defconfig"
+BAREBOX_CONFIG:qemux86-64 = "efi_defconfig"
+
 # prevent from acting as non-buildable provider
 python () {
     bareboxconfig = d.getVar('BAREBOX_CONFIG')
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (2 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 3/9] barebox: set default BAREBOX_CONFIG for qemu machines Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-26  8:52   ` [OE-core] " Luca Ceresoli
  2023-04-25 18:47 ` [PATCH v3 5/9] oeqa/utils/qemurunner: simplify output parsing and make crlf-compatible Enrico Jorns
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

If we talk to terminals that like colors, we need to ignore the vt100
escape sequences when matching strings.

An unprocessed barebox console prompt would e.g. look like:

  ESC[1;32mbarebox@ESC[1;36mARM QEMU virt64:/ESC[0m

where we cannot match for something like "barebox@ARM QEMU virt64:/".
The same applies to colored Linux terminal output of course.

The "\x1b\[" from the regex catches the standard start of ansii escape
sequence while the rest catches the actual command code executed.

Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 meta/lib/oeqa/utils/qemurunner.py | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
index 6734cee48d..c3d8e9e815 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -30,6 +30,8 @@ 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)))
+# Regex to remove the ansii (color) control codes from console strings in order to match the text only
+re_vt100 = re.compile(r'(\x1b\[|\x9b)[^@-_a-z]*[@-_a-z]|\x1b[@-_a-z]')
 
 class QemuRunner:
 
@@ -662,7 +664,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
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 5/9] oeqa/utils/qemurunner: simplify output parsing and make crlf-compatible
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (3 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 6/9] oeqa/utils/commands: document runqemu context manager Enrico Jorns
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

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 <ejo@pengutronix.de>
---
 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 c3d8e9e815..b08226f05a 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -673,23 +673,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")
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 6/9] oeqa/utils/commands: document runqemu context manager
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (4 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 5/9] oeqa/utils/qemurunner: simplify output parsing and make crlf-compatible Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 7/9] oeqa: support passing custom boot patterns to runqemu Enrico Jorns
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

Usage and arguments are not necessarily self-explaining.

Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 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 c1f533802e..21e0265c9d 100644
--- a/meta/lib/oeqa/utils/commands.py
+++ b/meta/lib/oeqa/utils/commands.py
@@ -312,7 +312,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 "'<bitbake-variable>': value" pairs that allows overriding bitbake variables
+        discard_writes (boolean): enables qemu -snapshot feature to prevent modifying original image
     """
 
     import bb.tinfoil
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 7/9] oeqa: support passing custom boot patterns to runqemu
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (5 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 6/9] oeqa/utils/commands: document runqemu context manager Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 8/9] oeqa/selftest/cases: add barebox tests Enrico Jorns
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

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 <ejo@pengutronix.de>
---
 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 d686fe07ec..842a16624f 100644
--- a/meta/lib/oeqa/targetcontrol.py
+++ b/meta/lib/oeqa/targetcontrol.py
@@ -88,7 +88,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
 
@@ -144,7 +144,8 @@ class QemuTarget(BaseTarget):
                             dump_host_cmds = dump_host_cmds,
                             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 21e0265c9d..ad61a035e2 100644
--- a/meta/lib/oeqa/utils/commands.py
+++ b/meta/lib/oeqa/utils/commands.py
@@ -310,7 +310,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.
@@ -327,6 +327,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 "'<bitbake-variable>': value" pairs that allows overriding bitbake variables
+        boot_patterns (dict): dict of "'<pattern-name>': 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
     """
 
@@ -358,7 +359,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 b08226f05a..b60166ca80 100644
--- a/meta/lib/oeqa/utils/qemurunner.py
+++ b/meta/lib/oeqa/utils/qemurunner.py
@@ -94,7 +94,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):
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 8/9] oeqa/selftest/cases: add barebox tests
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (6 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 7/9] oeqa: support passing custom boot patterns to runqemu Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-25 18:47 ` [PATCH v3 9/9] oeqa/selftest/cases: add basic u-boot test Enrico Jorns
  2023-04-26 12:12 ` [OE-core] [PATCH v3 0/9] Add barebox bootloader support (and testing) Luca Ceresoli
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 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)
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* [PATCH v3 9/9] oeqa/selftest/cases: add basic u-boot test
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (7 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 8/9] oeqa/selftest/cases: add barebox tests Enrico Jorns
@ 2023-04-25 18:47 ` Enrico Jorns
  2023-04-26 12:12 ` [OE-core] [PATCH v3 0/9] Add barebox bootloader support (and testing) Luca Ceresoli
  9 siblings, 0 replies; 15+ messages in thread
From: Enrico Jorns @ 2023-04-25 18:47 UTC (permalink / raw)
  To: openembedded-core
  Cc: yocto, ejo, Richard Purdie, Alexander Kanavin, alexandre.belloni

Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
---
 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)
-- 
2.39.2



^ permalink raw reply related	[flat|nested] 15+ messages in thread

* Re: [OE-core] [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences
  2023-04-25 18:47 ` [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences Enrico Jorns
@ 2023-04-26  8:52   ` Luca Ceresoli
  2023-04-26  9:17     ` Enrico Jörns
  0 siblings, 1 reply; 15+ messages in thread
From: Luca Ceresoli @ 2023-04-26  8:52 UTC (permalink / raw)
  To: Enrico Jörns
  Cc: openembedded-core, yocto, Richard Purdie, Alexander Kanavin,
	alexandre.belloni

Hello Enrico,

On Tue, 25 Apr 2023 20:47:15 +0200
Enrico Jörns <ejo@pengutronix.de> wrote:

> If we talk to terminals that like colors, we need to ignore the vt100
> escape sequences when matching strings.
> 
> An unprocessed barebox console prompt would e.g. look like:
> 
>   ESC[1;32mbarebox@ESC[1;36mARM QEMU virt64:/ESC[0m
> 
> where we cannot match for something like "barebox@ARM QEMU virt64:/".
> The same applies to colored Linux terminal output of course.
> 
> The "\x1b\[" from the regex catches the standard start of ansii escape
                                                            ^^^^^

I guess you mean "ansi" (single 'i'). I fixed that (and also converted
to uppercase) while applying the patch for testing, no need to resend.

> sequence while the rest catches the actual command code executed.
> 
> Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
> ---
>  meta/lib/oeqa/utils/qemurunner.py | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
> index 6734cee48d..c3d8e9e815 100644
> --- a/meta/lib/oeqa/utils/qemurunner.py
> +++ b/meta/lib/oeqa/utils/qemurunner.py
> @@ -30,6 +30,8 @@ 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)))
> +# Regex to remove the ansii (color) control codes from console strings in order to match the text only
                         ^^^^^

Same here.

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [OE-core] [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences
  2023-04-26  8:52   ` [OE-core] " Luca Ceresoli
@ 2023-04-26  9:17     ` Enrico Jörns
  0 siblings, 0 replies; 15+ messages in thread
From: Enrico Jörns @ 2023-04-26  9:17 UTC (permalink / raw)
  To: Luca Ceresoli
  Cc: openembedded-core, yocto, Richard Purdie, Alexander Kanavin,
	alexandre.belloni

Hello Luca,

Am Mittwoch, dem 26.04.2023 um 10:52 +0200 schrieb Luca Ceresoli:
> Hello Enrico,
> 
> On Tue, 25 Apr 2023 20:47:15 +0200
> Enrico Jörns <ejo@pengutronix.de> wrote:
> 
> > If we talk to terminals that like colors, we need to ignore the vt100
> > escape sequences when matching strings.
> > 
> > An unprocessed barebox console prompt would e.g. look like:
> > 
> >   ESC[1;32mbarebox@ESC[1;36mARM QEMU virt64:/ESC[0m
> > 
> > where we cannot match for something like "barebox@ARM QEMU virt64:/".
> > The same applies to colored Linux terminal output of course.
> > 
> > The "\x1b\[" from the regex catches the standard start of ansii escape
>                                                             ^^^^
> I guess you mean "ansi" (single 'i'). I fixed that (and also converted
> to uppercase) while applying the patch for testing, no need to resend.

indeed, seems as if a part of me had 'ascii' in mind and when writing this.
ANSI is what I meant, yes.


Thanks for fixing it at both places!

Enrico

> > sequence while the rest catches the actual command code executed.
> > 
> > Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
> > ---
> >  meta/lib/oeqa/utils/qemurunner.py | 4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> > 
> > diff --git a/meta/lib/oeqa/utils/qemurunner.py b/meta/lib/oeqa/utils/qemurunner.py
> > index 6734cee48d..c3d8e9e815 100644
> > --- a/meta/lib/oeqa/utils/qemurunner.py
> > +++ b/meta/lib/oeqa/utils/qemurunner.py
> > @@ -30,6 +30,8 @@ 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)))
> > +# Regex to remove the ansii (color) control codes from console strings in order to match the
> > text only
>                          ^^^^^
> 
> Same here.
> 
> Best regards,
> Luca
> 

-- 
Pengutronix e.K.                           | Enrico Jörns                |
Embedded Linux Consulting & Support        | https://www.pengutronix.de/ |
Steuerwalder Str. 21                       | Phone: +49-5121-206917-180  |
31137 Hildesheim, Germany                  | Fax:   +49-5121-206917-9    |



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [OE-core] [PATCH v3 0/9] Add barebox bootloader support (and testing)
  2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
                   ` (8 preceding siblings ...)
  2023-04-25 18:47 ` [PATCH v3 9/9] oeqa/selftest/cases: add basic u-boot test Enrico Jorns
@ 2023-04-26 12:12 ` Luca Ceresoli
  2023-04-26 13:55   ` Enrico Jörns
  9 siblings, 1 reply; 15+ messages in thread
From: Luca Ceresoli @ 2023-04-26 12:12 UTC (permalink / raw)
  To: Enrico Jörns
  Cc: openembedded-core, yocto, Richard Purdie, Alexander Kanavin,
	alexandre.belloni

Hello Enrico,

On Tue, 25 Apr 2023 20:47:11 +0200
Enrico Jörns <ejo@pengutronix.de> wrote:

> This adds support for the barebox bootloader (and tools) to oe-core.
> 
> In order to have proper testing, this extends oe-selftest to allow
> basic testing of bootloaders. While at it, cover both barebox and u-boot.

Some tests are failing with this series applied. Logs looking like:

--------------------------------8<--------------------------------

2023-04-26 02:45:38,232 - oe-selftest - INFO - barebox.BareboxTest.test_boot_barebox (subunit.RemotedTestCase)
2023-04-26 02:45:38,232 - oe-selftest - INFO -  ... skipped 'Test skipped on x86_64\n'
2023-04-26 02:45:38,232 - oe-selftest - INFO - 1: 1/47 2/530 (0.00s) (0 failed) (barebox.BareboxTest.test_boot_barebox)
2023-04-26 02:45:38,232 - oe-selftest - INFO - Test skipped on x86_64
2023-04-26 02:46:47,829 - oe-selftest - INFO - fetch.Dependencies.test_dependencies (subunit.RemotedTestCase)
2023-04-26 02:46:47,829 - oe-selftest - INFO -  ... ok
2023-04-26 02:46:47,829 - oe-selftest - INFO - 12: 2/20 3/530 (70.93s) (0 failed) (fetch.Dependencies.test_dependencies)
2023-04-26 02:46:54,605 - oe-selftest - INFO - barebox.BareboxTest.test_boot_barebox_efi (subunit.RemotedTestCase)
2023-04-26 02:46:54,605 - oe-selftest - INFO -  ... FAIL
Stderr:
2023-04-26 02:45:38,230 - oe-selftest - INFO - Adding: "include selftest.inc" in /home/pokybuild/yocto-worker/oe-selftest-debian/build/build-st-3126928/conf/local.conf
2023-04-26 02:45:38,231 - oe-selftest - INFO - Adding: "include bblayers.inc" in bblayers.conf
2023-04-26 02:46:54,606 - oe-selftest - INFO - 1: 2/47 4/530 (76.37s) (0 failed) (barebox.BareboxTest.test_boot_barebox_efi)
2023-04-26 02:46:54,606 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
    return func(*args, **kwargs)
  File "/home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/lib/oeqa/selftest/cases/barebox.py", line 63, in test_boot_barebox_efi
    bitbake(image)
  File "/home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/lib/oeqa/utils/commands.py", line 234, in bitbake
    return runCmd(cmd, ignore_status, timeout, output_log=output_log, **options)
  File "/home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/lib/oeqa/utils/commands.py", line 212, in runCmd
    raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command, result.status, exc_output))
AssertionError: Command 'bitbake  core-image-minimal' returned non-zero exit status 1:
Loading cache...done.
Loaded 0 entries from dependency cache.
Parsing recipes...done.
Parsing of 955 .bb files complete (0 cached, 955 parsed). 1872 targets, 55 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
ERROR: Nothing RPROVIDES 'barebox' (but /home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/recipes-core/images/core-image-minimal.bb, /home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/recipes-core/packagegroups/packagegroup-core-boot.bb RDEPENDS on or otherwise requires it)
barebox was skipped: PREFERRED_PROVIDER_virtual/bootloader set to u-boot, not barebox
NOTE: Runtime target 'barebox' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['barebox']
ERROR: Required build target 'core-image-minimal' has no buildable providers.
Missing or unbuildable dependency chain was: ['core-image-minimal', 'barebox']
Summary: There were 2 ERROR messages, returning a non-zero exit code.

--------------------------------8<--------------------------------

Some logs are here:

https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/5054/steps/14/logs/stdio
https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/5096/steps/14/logs/stdio

FYI I had to manually solve a trivial conflict on patch 5 due to
another patch in my branch that is touching the same file:
https://lore.kernel.org/openembedded-core/20230411150503.2105880-2-lrannou@baylibre.com/

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [OE-core] [PATCH v3 0/9] Add barebox bootloader support (and testing)
  2023-04-26 12:12 ` [OE-core] [PATCH v3 0/9] Add barebox bootloader support (and testing) Luca Ceresoli
@ 2023-04-26 13:55   ` Enrico Jörns
  0 siblings, 0 replies; 15+ messages in thread
From: Enrico Jörns @ 2023-04-26 13:55 UTC (permalink / raw)
  To: Luca Ceresoli
  Cc: openembedded-core, yocto, Richard Purdie, Alexander Kanavin,
	alexandre.belloni

Hello Luca,

Am Mittwoch, dem 26.04.2023 um 14:12 +0200 schrieb Luca Ceresoli:
> Hello Enrico,
> 
> On Tue, 25 Apr 2023 20:47:11 +0200
> Enrico Jörns <ejo@pengutronix.de> wrote:
> 
> > This adds support for the barebox bootloader (and tools) to oe-core.
> > 
> > In order to have proper testing, this extends oe-selftest to allow
> > basic testing of bootloaders. While at it, cover both barebox and u-boot.
> 
> Some tests are failing with this series applied. Logs looking like:

thank you for the test results.

> --------------------------------8<--------------------------------
> 
> 2023-04-26 02:45:38,232 - oe-selftest - INFO - barebox.BareboxTest.test_boot_barebox
> (subunit.RemotedTestCase)
> 2023-04-26 02:45:38,232 - oe-selftest - INFO -  ... skipped 'Test skipped on x86_64\n'
> 2023-04-26 02:45:38,232 - oe-selftest - INFO - 1: 1/47 2/530 (0.00s) (0 failed)
> (barebox.BareboxTest.test_boot_barebox)
> 2023-04-26 02:45:38,232 - oe-selftest - INFO - Test skipped on x86_64
> 2023-04-26 02:46:47,829 - oe-selftest - INFO - fetch.Dependencies.test_dependencies
> (subunit.RemotedTestCase)
> 2023-04-26 02:46:47,829 - oe-selftest - INFO -  ... ok
> 2023-04-26 02:46:47,829 - oe-selftest - INFO - 12: 2/20 3/530 (70.93s) (0 failed)
> (fetch.Dependencies.test_dependencies)
> 2023-04-26 02:46:54,605 - oe-selftest - INFO - barebox.BareboxTest.test_boot_barebox_efi
> (subunit.RemotedTestCase)
> 2023-04-26 02:46:54,605 - oe-selftest - INFO -  ... FAIL
> Stderr:
> 2023-04-26 02:45:38,230 - oe-selftest - INFO - Adding: "include selftest.inc" in
> /home/pokybuild/yocto-worker/oe-selftest-debian/build/build-st-3126928/conf/local.conf
> 2023-04-26 02:45:38,231 - oe-selftest - INFO - Adding: "include bblayers.inc" in bblayers.conf
> 2023-04-26 02:46:54,606 - oe-selftest - INFO - 1: 2/47 4/530 (76.37s) (0 failed)
> (barebox.BareboxTest.test_boot_barebox_efi)
> 2023-04-26 02:46:54,606 - oe-selftest - INFO - testtools.testresult.real._StringException:
> Traceback (most recent call last):
>   File "/home/pokybuild/yocto-worker/oe-selftest-
> debian/build/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
>     return func(*args, **kwargs)
>   File "/home/pokybuild/yocto-worker/oe-selftest-
> debian/build/meta/lib/oeqa/selftest/cases/barebox.py", line 63, in test_boot_barebox_efi
>     bitbake(image)
>   File "/home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/lib/oeqa/utils/commands.py",
> line 234, in bitbake
>     return runCmd(cmd, ignore_status, timeout, output_log=output_log, **options)
>   File "/home/pokybuild/yocto-worker/oe-selftest-debian/build/meta/lib/oeqa/utils/commands.py",
> line 212, in runCmd
>     raise AssertionError("Command '%s' returned non-zero exit status %d:\n%s" % (command,
> result.status, exc_output))
> AssertionError: Command 'bitbake  core-image-minimal' returned non-zero exit status 1:
> Loading cache...done.
> Loaded 0 entries from dependency cache.
> Parsing recipes...done.
> Parsing of 955 .bb files complete (0 cached, 955 parsed). 1872 targets, 55 skipped, 0 masked, 0
> errors.
> NOTE: Resolving any missing task queue dependencies
> ERROR: Nothing RPROVIDES 'barebox' (but /home/pokybuild/yocto-worker/oe-selftest-
> debian/build/meta/recipes-core/images/core-image-minimal.bb, /home/pokybuild/yocto-worker/oe-
> selftest-debian/build/meta/recipes-core/packagegroups/packagegroup-core-boot.bb RDEPENDS on or
> otherwise requires it)
> barebox was skipped: PREFERRED_PROVIDER_virtual/bootloader set to u-boot, not barebox
> NOTE: Runtime target 'barebox' is unbuildable, removing...
> Missing or unbuildable dependency chain was: ['barebox']
> ERROR: Required build target 'core-image-minimal' has no buildable providers.
> Missing or unbuildable dependency chain was: ['core-image-minimal', 'barebox']
> Summary: There were 2 ERROR messages, returning a non-zero exit code.
> 
> --------------------------------8<--------------------------------

It seems as if I did not re-test the EFI test after having set PREFERRED_PROVIDER_virtual/bootloader
to "u-boot" in the machine conf. I will add a PREFERRED_PROVIDER_virtual/bootloader = "barebox" to
the test case.
> 
> Some logs are here:
> 
> https://autobuilder.yoctoproject.org/typhoon/#/builders/80/builds/5054/steps/14/logs/stdio
> https://autobuilder.yoctoproject.org/typhoon/#/builders/86/builds/5096/steps/14/logs/stdio

There are some wic failures where I am not sure yet if these are caused by my patchset or not.

> FYI I had to manually solve a trivial conflict on patch 5 due to
> another patch in my branch that is touching the same file:
> https://lore.kernel.org/openembedded-core/20230411150503.2105880-2-lrannou@baylibre.com/

I am not really unconvinced that this patch set should be applied as-is.
It copies most of the run_serial() method 'just' to change the return value.
It would also require to duplicate my adaptions.


Thanks and regards

Enrico

> Best regards,
> Luca
> 

-- 
Pengutronix e.K.                           | Enrico Jörns                |
Embedded Linux Consulting & Support        | https://www.pengutronix.de/ |
Steuerwalder Str. 21                       | Phone: +49-5121-206917-180  |
31137 Hildesheim, Germany                  | Fax:   +49-5121-206917-9    |



^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [OE-core] [PATCH v3 1/9] barebox: add initial support
  2023-04-25 18:47 ` [PATCH v3 1/9] barebox: add initial support Enrico Jorns
@ 2023-04-26 21:00   ` Luca Ceresoli
  0 siblings, 0 replies; 15+ messages in thread
From: Luca Ceresoli @ 2023-04-26 21:00 UTC (permalink / raw)
  To: Enrico Jörns
  Cc: openembedded-core, yocto, Richard Purdie, Alexander Kanavin,
	alexandre.belloni

Hello Enrico,

On Tue, 25 Apr 2023 20:47:12 +0200
Enrico Jörns <ejo@pengutronix.de> wrote:

> From: Marco Felsch <m.felsch@pengutronix.de>
> 
> 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 <m.felsch@pengutronix.de>
> Signed-off-by: Enrico Jorns <ejo@pengutronix.de>
> ---
>  meta/conf/distro/include/maintainers.inc      |   1 +
>  meta/recipes-bsp/barebox/barebox.inc          | 144 ++++++++++++++++++
>  meta/recipes-bsp/barebox/barebox_2023.04.0.bb |   3 +
>  3 files changed, 148 insertions(+)
>  create mode 100644 meta/recipes-bsp/barebox/barebox.inc
>  create mode 100644 meta/recipes-bsp/barebox/barebox_2023.04.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 <liezhi.yang@windriver.com>"
>  RECIPE_MAINTAINER:pn-avahi = "Yi Zhao <yi.zhao@windriver.com>"
>  RECIPE_MAINTAINER:pn-babeltrace = "Alexander Kanavin <alex.kanavin@gmail.com>"
>  RECIPE_MAINTAINER:pn-babeltrace2 = "Alexander Kanavin <alex.kanavin@gmail.com>"
> +RECIPE_MAINTAINER:pn-barebox = "Enrico Jörns <yocto@pengutronix.de>"

There's been another build failure, but I must say it looks nonsense to
me -- perhaps others can shed some light on it:

AssertionError: 
Unable to find recipes for the following entries in maintainers.inc:
barebox

https://autobuilder.yoctoproject.org/typhoon/#/builders/127/builds/1321/steps/14/logs/stdio

Some lines later on the same log file, there is a QEMU error in
test_boot_barebox:

2023-04-26 16:37:04,021 - oe-selftest - INFO - barebox.BareboxTest.test_boot_barebox (subunit.RemotedTestCase)
2023-04-26 16:37:04,022 - oe-selftest - INFO -  ... ERROR
2023-04-26 16:37:04,023 - oe-selftest - INFO - 1: 1/47 367/530 (24221.61s) (0 failed) (barebox.BareboxTest.test_boot_barebox)
2023-04-26 16:37:04,023 - oe-selftest - INFO - testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/utils/commands.py", line 372, in runqemu
    qemu.start(params=qemuparams, ssh=ssh, runqemuparams=runqemuparams, launch_cmd=launch_cmd, discard_writes=discard_writes)
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/targetcontrol.py", line 183, in start
    raise RuntimeError("%s - FAILED to start qemu - check the task log and the boot log" % self.pn)
RuntimeError: core-image-minimal - FAILED to start qemu - check the task log and the boot log
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/core/decorator/__init__.py", line 35, in wrapped_f
    return func(*args, **kwargs)
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/selftest/cases/barebox.py", line 36, in test_boot_barebox
    with runqemu('core-image-minimal', ssh=False, runqemuparams='nographic',
  File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
    return next(self.gen)
  File "/home/pokybuild/yocto-worker/oe-selftest-armhost/build/meta/lib/oeqa/utils/commands.py", line 378, in runqemu
    raise Exception(msg)
Exception: core-image-minimal - FAILED to start qemu - check the task log and the boot log

Sadly the work directory for that build has already gone. :-/

Best regards,
Luca

-- 
Luca Ceresoli, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com


^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2023-04-26 21:01 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-25 18:47 [PATCH v3 0/9] Add barebox bootloader support (and testing) Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 1/9] barebox: add initial support Enrico Jorns
2023-04-26 21:00   ` [OE-core] " Luca Ceresoli
2023-04-25 18:47 ` [PATCH v3 2/9] barebox-tools: add initial barebox tools support Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 3/9] barebox: set default BAREBOX_CONFIG for qemu machines Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 4/9] oeqa/utils/qemurunner: support ignoring vt100 escape sequences Enrico Jorns
2023-04-26  8:52   ` [OE-core] " Luca Ceresoli
2023-04-26  9:17     ` Enrico Jörns
2023-04-25 18:47 ` [PATCH v3 5/9] oeqa/utils/qemurunner: simplify output parsing and make crlf-compatible Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 6/9] oeqa/utils/commands: document runqemu context manager Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 7/9] oeqa: support passing custom boot patterns to runqemu Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 8/9] oeqa/selftest/cases: add barebox tests Enrico Jorns
2023-04-25 18:47 ` [PATCH v3 9/9] oeqa/selftest/cases: add basic u-boot test Enrico Jorns
2023-04-26 12:12 ` [OE-core] [PATCH v3 0/9] Add barebox bootloader support (and testing) Luca Ceresoli
2023-04-26 13:55   ` Enrico Jörns

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox