@@ -328,6 +328,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}"
@@ -351,17 +356,6 @@ do_copy_boot_files() {
cp -f "$initrd" '${DEPLOYDIR}/${INITRD_DEPLOY_FILE}'
fi
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
new file mode 100644
@@ -0,0 +1,45 @@
+# This software is a part of Isar.
+# Copyright (C) 2024 ilbers GmbH
+
+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}"
+
+do_prepare_build:prepend() {
+ mkdir -p ${D}/usr/lib/${PN}
+}
+
+do_prepare_build:append() {
+ cat <<EOF >> ${S}/debian/rules
+
+override_dh_auto_build:
+EOF
+ for dtb in ${DTB_FILES}; do
+ mkdir -p ${D}/usr/lib/${PN}/$(dirname ${dtb})
+ ppdir=${PP}/image/usr/lib/${PN}/$(dirname ${dtb})
+ cat <<EOF >> ${S}/debian/rules
+ find /usr/lib/linux-image* -path "*${dtb}" -print -exec cp {} ${ppdir} \;
+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
Task do_copy_boot_files deploys DTB files into the same location for different images (e.g. -base or -debug). This causes build issue. Introduce `dtb-files` recipe responcible for extraction DTBs from linux-image package (distro or self-built) and their deployment. Different images for the same machine now depend on this recipe and don't cause parallell execution issue. Signed-off-by: Uladzimir Bely <ubely@ilbers.de> --- meta/classes/image.bbclass | 16 +++----- meta/recipes-kernel/dtb-files/dtb-files.bb | 45 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 11 deletions(-) create mode 100644 meta/recipes-kernel/dtb-files/dtb-files.bb