[PATCH] Fix do_copy_boot_files error

65 views
Skip to first unread message

Ilia Skochilov

unread,
Jan 31, 2024, 9:45:48 AM1/31/24
to isar-...@googlegroups.com, Ilia Skochilov
When building different distros with the same machine
(e.g., phyboard-mira-bullseye and phyboard-mira-bookworm) 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.

Signed-off-by: Ilia Skochilov <iskoc...@ilbers.de>
---
RECIPE-API-CHANGELOG.md | 8 ++++++++
meta/conf/bitbake.conf | 2 +-
2 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/RECIPE-API-CHANGELOG.md b/RECIPE-API-CHANGELOG.md
index bea1287..c9c1eae 100644
--- a/RECIPE-API-CHANGELOG.md
+++ b/RECIPE-API-CHANGELOG.md
@@ -566,3 +566,11 @@ supported, but a warning is issued when it is used. Future versions will drop
When building a custom kernel module, the `KBuild` file might be located in
a subdirectory. To support this use-case, set `MODULE_DIR=$(PWD)/subdir` in
the module build recipe.
+
+### Change DEPLOY_DIR_IMAGE
+Change DEPLOY_DIR_IMAGE from ${DEPLOY_DIR}/images/${MACHINE} to
+${DEPLOY_DIR}/images/${MACHINE}-${DISTRO}. 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.
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 80dc01c..006ac14 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -56,7 +56,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}"
DL_DIR ?= "${TOPDIR}/downloads"
SSTATE_DIR ?= "${TOPDIR}/sstate-cache"
SSTATE_MANIFESTS = "${TMPDIR}/sstate-control/${DISTRO}-${DISTRO_ARCH}"
--
2.39.2

Nicu Liviu Huhulea

unread,
Feb 10, 2024, 9:16:07 AM2/10/24
to isar-users
Hello,

It seems that I get the same behavior, but with other steps: having 2 images that uses the same dtbs for booting. First image will complete the build fine and the dtbs are in the deploydir.
The 2nd image does not complete the build because the dtbs are already in the deploydir.
This happens because of the introduction of the do_copy_boot_files_setscene() where this verification takes place. From my perspective a possible solution would be to copy those files
only if they don't exist.

diff --git a/meta/classes/image.bbclass b/meta/classes/image.bbclass
index d9fc04eb..070a14dd 100644
--- a/meta/classes/image.bbclass
+++ b/meta/classes/image.bbclass
@@ -393,7 +393,10 @@ do_copy_boot_files() {
             die "${file} not found"
         fi
 
-        cp -f "$dtb" "${DEPLOYDIR}/"
+        dtb_name=$(basename "${file}")
+        if [ ! -f "${DEPLOY_DIR_IMAGE}/${dtb_name}" ]; then
+            cp -f "$dtb" "${DEPLOYDIR}/"
+        fi
     done
 }
 addtask copy_boot_files before do_rootfs_postprocess after do_rootfs_install

Anton Mikanovich

unread,
Feb 12, 2024, 2:58:20 AM2/12/24
to Nicu Liviu Huhulea, isar-users, Ilia Skochilov
09/02/2024 14:21, Nicu Liviu Huhulea wrote:
> Hello,
>
> It seems that I get the same behavior, but with other steps: having 2
> images that uses the same dtbs for booting. First image will complete
> the build fine and the dtbs are in the deploydir.
> The 2nd image does not complete the build because the dtbs are already
> in the deploydir.
> This happens because of the introduction of the
> do_copy_boot_files_setscene() where this verification takes place.
> From my perspective a possible solution would be to copy those files
> only if they don't exist.

Hello,
This approach will not work if two dtbs with the same name will have any
changes.
Two different distro versions (with different kernel versions) may have
different dtbs but with the same name.
That's why we need to separate them any in case.

Jan Kiszka

unread,
Feb 12, 2024, 4:20:55 AM2/12/24
to Anton Mikanovich, Nicu Liviu Huhulea, isar-users, Ilia Skochilov
Separation is not wrong but also does not solve the issue when
rebuilding into a dirty deploy dir with a different config for the same
machine/distro.

Jan

--
Siemens AG, Technology
Linux Expert Center

Reply all
Reply to author
Forward
0 new messages