* [PATCH v5 1/3] meta: Fix do_copy_boot_files error for different distros of same machine
2026-02-06 12:27 [PATCH v5 0/3] Deploy DTBs with separate recipe Anton Mikanovich
@ 2026-02-06 12:27 ` Anton Mikanovich
2026-02-06 12:27 ` [PATCH v5 2/3] testsuite: Add test to check dtb deployment Anton Mikanovich
2026-02-06 12:27 ` [PATCH v5 3/3] meta: Move DTB deployment to a separate dtb-files recipe Anton Mikanovich
2 siblings, 0 replies; 5+ messages in thread
From: Anton Mikanovich @ 2026-02-06 12:27 UTC (permalink / raw)
To: isar-users
Cc: Ilia Skochilov, Uladzimir Bely, Badrikesh Prusty, Anton Mikanovich
From: Ilia Skochilov <iskochilov@ilbers.de>
When building different distros with the same machine (e.g.,
phyboard-mira-bullseye and phyboard-mira-bookworm) it happens that
some files with the same name (e.g, DTB files) are deployed
to the same location and this causes build error.
Use DISTRO- and KERNEL- dependent deploy directory.
Also fix paths in installer and testsuite.
Signed-off-by: Ilia Skochilov <iskochilov@ilbers.de>
Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
Signed-off-by: Badrikesh Prusty <badrikesh.prusty@siemens.com>
Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
RECIPE-API-CHANGELOG.md | 15 +++++++++++++++
.../classes-recipe/installer-add-rootfs.bbclass | 4 +++-
meta/conf/bitbake.conf | 2 +-
testsuite/citest.py | 7 ++++---
4 files changed, 23 insertions(+), 5 deletions(-)
diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index 0bad8a44..6d7f12b2 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -962,3 +962,18 @@ INSTALLER_UNATTENDED_ABORT_ENABLE = "1"
# Optional: set countdown timeout in seconds (default 5)
INSTALLER_UNATTENDED_ABORT_TIMEOUT = "5"
```
+
+### Change DEPLOY_DIR_IMAGE path
+
+Change DEPLOY_DIR_IMAGE from ${DEPLOY_DIR}/images/${MACHINE} to
+${DEPLOY_DIR}/images/${MACHINE}-${DISTRO}-${KERNEL_NAME}. When building
+different distros with the same machine the following error occurs:
+
+do_copy_boot_files: The recipe isar-image-base is trying to install files
+into a shared area when those files already exists. It happens when some
+files have the same names (e.g., dtb files) for different distros.
+
+To prevent this new path is separated also by distro and kernel values.
+
+This change will influence on build artifacts location and should be taken
+into account by downstreams.
diff --git a/meta-isar/classes-recipe/installer-add-rootfs.bbclass b/meta-isar/classes-recipe/installer-add-rootfs.bbclass
index 2fa551bd..b79c2357 100644
--- a/meta-isar/classes-recipe/installer-add-rootfs.bbclass
+++ b/meta-isar/classes-recipe/installer-add-rootfs.bbclass
@@ -13,7 +13,9 @@ INSTALLER_TARGET_IMAGES ??= "${INSTALLER_TARGET_IMAGE}"
INSTALLER_TARGET_MC ??= "installer-target"
INSTALLER_TARGET_DISTRO ??= "${DISTRO}"
INSTALLER_TARGET_MACHINE ??= "${MACHINE}"
-INSTALLER_TARGET_DEPLOY_DIR_IMAGE ??= "${DEPLOY_DIR}/images/${INSTALLER_TARGET_MACHINE}"
+INSTALLER_TARGET_KERNEL_NAME ??= "${KERNEL_NAME}"
+INSTALLER_TARGET_DEPLOY_DIR_POSTFIX ??= "${@ ('-'+d.getVar('INSTALLER_TARGET_KERNEL_NAME')) if d.getVar('INSTALLER_TARGET_KERNEL_NAME') else ''}"
+INSTALLER_TARGET_DEPLOY_DIR_IMAGE ??= "${DEPLOY_DIR}/images/${INSTALLER_TARGET_MACHINE}-${INSTALLER_TARGET_DISTRO}${INSTALLER_TARGET_DEPLOY_DIR_POSTFIX}"
IMAGE_DATA_FILE ??= "${INSTALLER_TARGET_IMAGE}-${INSTALLER_TARGET_DISTRO}-${INSTALLER_TARGET_MACHINE}"
IMAGE_DATA_POSTFIX ??= "wic.zst"
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 0f84e715..ad3d6b53 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -57,7 +57,7 @@ WORKDIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}/${PN}/${PV}-${PR}"
GIT_DL_LINK_DIR = "${TMPDIR}/work/${DISTRO}-${DISTRO_ARCH}"
DEPLOY_DIR_BOOTSTRAP = "${DEPLOY_DIR}/bootstrap"
DEPLOY_DIR_SDKCHROOT = "${DEPLOY_DIR}/sdkchroot"
-DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}"
+DEPLOY_DIR_IMAGE = "${DEPLOY_DIR}/images/${MACHINE}-${DISTRO}${@ ('-'+d.getVar('KERNEL_NAME')) if d.getVar('KERNEL_NAME') else ''}"
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
SSTATE_MANIFESTS = "${TMPDIR}/sstate-control/${DISTRO}-${DISTRO_ARCH}"
diff --git a/testsuite/citest.py b/testsuite/citest.py
index f11cd5af..8047c42c 100755
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -496,8 +496,9 @@ class InitRdBaseTest(CIBaseTest):
super().init()
self.deploy_dir = os.path.join(self.build_dir, 'tmp', 'deploy')
- def deploy_dir_image(self, machine):
- return os.path.join(self.deploy_dir, 'images', machine)
+ def deploy_dir_image(self, mc, image):
+ multiconfig = f"{mc}:{image}"
+ return CIUtils.getVars('DEPLOY_DIR_IMAGE', target=multiconfig)
def dracut_in_image(self, targets):
machine = 'qemuamd64'
@@ -526,7 +527,7 @@ class InitRdBaseTest(CIBaseTest):
bb_should_fail=False):
mc = f'mc:{machine}-{distro.removeprefix("debian-")}'
initrd_image = f'{initrd}-{distro}-{machine}-initrd.img'
- initrd_path = os.path.join(self.deploy_dir_image(machine), initrd_image)
+ initrd_path = os.path.join(self.deploy_dir_image(mc, initrd), initrd_image)
# cleansstate if the initrd image was already built/deployed to verify
# that a new build does result in the image being deployed
--
2.43.0
--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/20260206122910.248334-2-amikan%40ilbers.de.
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v5 2/3] testsuite: Add test to check dtb deployment
2026-02-06 12:27 [PATCH v5 0/3] Deploy DTBs with separate recipe Anton Mikanovich
2026-02-06 12:27 ` [PATCH v5 1/3] meta: Fix do_copy_boot_files error for different distros of same machine Anton Mikanovich
@ 2026-02-06 12:27 ` Anton Mikanovich
2026-02-06 12:27 ` [PATCH v5 3/3] meta: Move DTB deployment to a separate dtb-files recipe Anton Mikanovich
2 siblings, 0 replies; 5+ messages in thread
From: Anton Mikanovich @ 2026-02-06 12:27 UTC (permalink / raw)
To: isar-users; +Cc: Anton Mikanovich
Build several images in parallel to catch all possible conflicts
between deployed DTB files:
- Same distro/machine, different images.
- Same machine, different distros.
Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
testsuite/citest.py | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/testsuite/citest.py b/testsuite/citest.py
index 8047c42c..bed0505b 100755
--- a/testsuite/citest.py
+++ b/testsuite/citest.py
@@ -678,6 +678,29 @@ class WicTest(CIBaseTest):
)
+class DtbDeployTest(CIBaseTest):
+
+ """
+ Build some targets potentially causing DTB deploy issues.
+ Cover cases:
+ - Same machine, different distros
+ - Same machine/distro, different images
+
+ :avocado: tags=dtbdeploy,full
+ """
+
+ def test_dtb_deploy(self):
+ targets = [
+ 'mc:phyboard-mira-bullseye:isar-image-base',
+ 'mc:phyboard-mira-bullseye:isar-image-ci',
+ 'mc:phyboard-mira-bookworm:isar-image-base',
+ 'mc:phyboard-mira-bookworm:isar-image-ci',
+ ]
+
+ self.init()
+ self.perform_build_test(targets)
+
+
class NoCrossTest(CIBaseTest):
"""
--
2.43.0
--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/20260206122910.248334-3-amikan%40ilbers.de.
^ permalink raw reply [flat|nested] 5+ messages in thread* [PATCH v5 3/3] meta: Move DTB deployment to a separate dtb-files recipe
2026-02-06 12:27 [PATCH v5 0/3] Deploy DTBs with separate recipe Anton Mikanovich
2026-02-06 12:27 ` [PATCH v5 1/3] meta: Fix do_copy_boot_files error for different distros of same machine Anton Mikanovich
2026-02-06 12:27 ` [PATCH v5 2/3] testsuite: Add test to check dtb deployment Anton Mikanovich
@ 2026-02-06 12:27 ` Anton Mikanovich
2026-02-06 13:39 ` 'Jan Kiszka' via isar-users
2 siblings, 1 reply; 5+ messages in thread
From: Anton Mikanovich @ 2026-02-06 12:27 UTC (permalink / raw)
To: isar-users; +Cc: Uladzimir Bely, Anton Mikanovich
From: Uladzimir Bely <ubely@ilbers.de>
Task do_copy_boot_files was deploying DTB files into the same location
for different images (e.g. -base or -debug). This causes build issue.
Introduce `dtb-files` recipe responsible for the extraction of DTBs
from linux-image package (distro or self-built) and their deployment.
Different images for the same machine now depend on this recipe and
shouldn't cause parallel execution issues.
Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
---
meta/classes-recipe/image.bbclass | 15 +++-----
meta/recipes-kernel/dtb-files/dtb-files.bb | 41 ++++++++++++++++++++++
2 files changed, 46 insertions(+), 10 deletions(-)
create mode 100644 meta/recipes-kernel/dtb-files/dtb-files.bb
diff --git a/meta/classes-recipe/image.bbclass b/meta/classes-recipe/image.bbclass
index e605bc80..dc599535 100644
--- a/meta/classes-recipe/image.bbclass
+++ b/meta/classes-recipe/image.bbclass
@@ -372,6 +372,11 @@ INITRD_IMG = "${PP_DEPLOY}/${INITRD_DEPLOY_FILE}"
# only one dtb file supported, pick the first
DTB_IMG = "${PP_DEPLOY}/${@(d.getVar('DTB_FILES').split() or [''])[0]}"
+python() {
+ if d.getVar('DTB_FILES'):
+ d.appendVarFlag("do_copy_boot_files", "depends", "dtb-files-${MACHINE}:do_deploy")
+}
+
do_copy_boot_files[cleandirs] += "${DEPLOYDIR}"
do_copy_boot_files[sstate-inputdirs] = "${DEPLOYDIR}"
do_copy_boot_files[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
@@ -385,16 +390,6 @@ do_copy_boot_files() {
sudo cat "$kernel" > "${DEPLOYDIR}/${KERNEL_IMAGE}"
fi
- for file in ${DTB_FILES}; do
- dtb="$(find '${IMAGE_ROOTFS}/usr/lib' -type f \
- -iwholename '*linux-image-*/'${file} | head -1)"
-
- if [ -z "$dtb" -o ! -e "$dtb" ]; then
- die "${file} not found"
- fi
-
- cp -f "$dtb" "${DEPLOYDIR}/"
- done
}
addtask copy_boot_files before do_rootfs_postprocess after do_rootfs_install
diff --git a/meta/recipes-kernel/dtb-files/dtb-files.bb b/meta/recipes-kernel/dtb-files/dtb-files.bb
new file mode 100644
index 00000000..f64b4845
--- /dev/null
+++ b/meta/recipes-kernel/dtb-files/dtb-files.bb
@@ -0,0 +1,41 @@
+# This software is a part of Isar.
+# Copyright (C) ilbers GmbH, 2025
+#
+# SPDX-License-Identifier: MIT
+
+inherit dpkg-raw
+
+PN:append = "-${MACHINE}"
+
+KERNEL_IMAGE_PKG ??= "${@ ("linux-image-" + d.getVar("KERNEL_NAME")) if d.getVar("KERNEL_NAME") else ""}"
+
+DEPENDS = "${KERNEL_IMAGE_PKG}"
+DEBIAN_BUILD_DEPENDS = "${KERNEL_IMAGE_PKG}"
+
+DPKG_ARCH = "${PACKAGE_ARCH}"
+
+do_prepare_build:append() {
+ for dtb in ${DTB_FILES}; do
+ dir=debian/${PN}/usr/lib/${PN}/$(dirname ${dtb})
+ cat <<EOF >> ${S}/debian/rules
+ mkdir -p ${dir}
+ find /usr/lib/linux-image* -path "*${dtb}" -print -exec cp {} ${dir} \;
+EOF
+ done
+}
+
+DTB_PACKAGE ??= "${PN}_${CHANGELOG_V}_${DISTRO_ARCH}.deb"
+
+do_deploy[dirs] = "${DEPLOY_DIR_IMAGE}"
+do_deploy[cleandirs] = "${WORKDIR}/deploy"
+do_deploy() {
+ dpkg --fsys-tarfile ${WORKDIR}/${DTB_PACKAGE} | \
+ tar --wildcards --extract --directory ${WORKDIR}/deploy ./usr/lib/${PN}
+ for dtb in ${DTB_FILES}; do
+ mkdir -p ${DEPLOY_DIR_IMAGE}/$(dirname ${dtb})
+ find ${WORKDIR}/deploy/usr/lib/${PN} -path "*${dtb}" -print \
+ -exec cp {} ${DEPLOY_DIR_IMAGE}/${dtb} \;
+ done
+}
+
+addtask deploy before do_deploy_deb after do_dpkg_build
--
2.43.0
--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/20260206122910.248334-4-amikan%40ilbers.de.
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [PATCH v5 3/3] meta: Move DTB deployment to a separate dtb-files recipe
2026-02-06 12:27 ` [PATCH v5 3/3] meta: Move DTB deployment to a separate dtb-files recipe Anton Mikanovich
@ 2026-02-06 13:39 ` 'Jan Kiszka' via isar-users
0 siblings, 0 replies; 5+ messages in thread
From: 'Jan Kiszka' via isar-users @ 2026-02-06 13:39 UTC (permalink / raw)
To: Anton Mikanovich, isar-users; +Cc: Uladzimir Bely
On 06.02.26 13:27, Anton Mikanovich wrote:
> From: Uladzimir Bely <ubely@ilbers.de>
>
> Task do_copy_boot_files was deploying DTB files into the same location
> for different images (e.g. -base or -debug). This causes build issue.
>
But this still doesn't justify this redundant extraction. Adjust the
deployment paths and be done.
Jan
> Introduce `dtb-files` recipe responsible for the extraction of DTBs
> from linux-image package (distro or self-built) and their deployment.
>
> Different images for the same machine now depend on this recipe and
> shouldn't cause parallel execution issues.
>
> Signed-off-by: Uladzimir Bely <ubely@ilbers.de>
> Signed-off-by: Anton Mikanovich <amikan@ilbers.de>
> ---
> meta/classes-recipe/image.bbclass | 15 +++-----
> meta/recipes-kernel/dtb-files/dtb-files.bb | 41 ++++++++++++++++++++++
> 2 files changed, 46 insertions(+), 10 deletions(-)
> create mode 100644 meta/recipes-kernel/dtb-files/dtb-files.bb
>
> diff --git a/meta/classes-recipe/image.bbclass b/meta/classes-recipe/image.bbclass
> index e605bc80..dc599535 100644
> --- a/meta/classes-recipe/image.bbclass
> +++ b/meta/classes-recipe/image.bbclass
> @@ -372,6 +372,11 @@ INITRD_IMG = "${PP_DEPLOY}/${INITRD_DEPLOY_FILE}"
> # only one dtb file supported, pick the first
> DTB_IMG = "${PP_DEPLOY}/${@(d.getVar('DTB_FILES').split() or [''])[0]}"
>
> +python() {
> + if d.getVar('DTB_FILES'):
> + d.appendVarFlag("do_copy_boot_files", "depends", "dtb-files-${MACHINE}:do_deploy")
> +}
> +
> do_copy_boot_files[cleandirs] += "${DEPLOYDIR}"
> do_copy_boot_files[sstate-inputdirs] = "${DEPLOYDIR}"
> do_copy_boot_files[sstate-outputdirs] = "${DEPLOY_DIR_IMAGE}"
> @@ -385,16 +390,6 @@ do_copy_boot_files() {
> sudo cat "$kernel" > "${DEPLOYDIR}/${KERNEL_IMAGE}"
> fi
>
> - for file in ${DTB_FILES}; do
> - dtb="$(find '${IMAGE_ROOTFS}/usr/lib' -type f \
> - -iwholename '*linux-image-*/'${file} | head -1)"
> -
> - if [ -z "$dtb" -o ! -e "$dtb" ]; then
> - die "${file} not found"
> - fi
> -
> - cp -f "$dtb" "${DEPLOYDIR}/"
> - done
> }
> addtask copy_boot_files before do_rootfs_postprocess after do_rootfs_install
>
> diff --git a/meta/recipes-kernel/dtb-files/dtb-files.bb b/meta/recipes-kernel/dtb-files/dtb-files.bb
> new file mode 100644
> index 00000000..f64b4845
> --- /dev/null
> +++ b/meta/recipes-kernel/dtb-files/dtb-files.bb
> @@ -0,0 +1,41 @@
> +# This software is a part of Isar.
> +# Copyright (C) ilbers GmbH, 2025
> +#
> +# SPDX-License-Identifier: MIT
> +
> +inherit dpkg-raw
> +
> +PN:append = "-${MACHINE}"
> +
> +KERNEL_IMAGE_PKG ??= "${@ ("linux-image-" + d.getVar("KERNEL_NAME")) if d.getVar("KERNEL_NAME") else ""}"
> +
> +DEPENDS = "${KERNEL_IMAGE_PKG}"
> +DEBIAN_BUILD_DEPENDS = "${KERNEL_IMAGE_PKG}"
> +
> +DPKG_ARCH = "${PACKAGE_ARCH}"
> +
> +do_prepare_build:append() {
> + for dtb in ${DTB_FILES}; do
> + dir=debian/${PN}/usr/lib/${PN}/$(dirname ${dtb})
> + cat <<EOF >> ${S}/debian/rules
> + mkdir -p ${dir}
> + find /usr/lib/linux-image* -path "*${dtb}" -print -exec cp {} ${dir} \;
> +EOF
> + done
> +}
> +
> +DTB_PACKAGE ??= "${PN}_${CHANGELOG_V}_${DISTRO_ARCH}.deb"
> +
> +do_deploy[dirs] = "${DEPLOY_DIR_IMAGE}"
> +do_deploy[cleandirs] = "${WORKDIR}/deploy"
> +do_deploy() {
> + dpkg --fsys-tarfile ${WORKDIR}/${DTB_PACKAGE} | \
> + tar --wildcards --extract --directory ${WORKDIR}/deploy ./usr/lib/${PN}
> + for dtb in ${DTB_FILES}; do
> + mkdir -p ${DEPLOY_DIR_IMAGE}/$(dirname ${dtb})
> + find ${WORKDIR}/deploy/usr/lib/${PN} -path "*${dtb}" -print \
> + -exec cp {} ${DEPLOY_DIR_IMAGE}/${dtb} \;
> + done
> +}
> +
> +addtask deploy before do_deploy_deb after do_dpkg_build
--
Siemens AG, Foundational Technologies
Linux Expert Center
--
You received this message because you are subscribed to the Google Groups "isar-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to isar-users+unsubscribe@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/isar-users/9a13a7a0-0f74-4730-929c-dfdc981ededb%40siemens.com.
^ permalink raw reply [flat|nested] 5+ messages in thread