diff --git a/README.md b/README.md index dda0ee0c6..3fc61d3a9 100644 --- a/README.md +++ b/README.md @@ -21,18 +21,24 @@ OS versions: Software for the following hardware platforms is in production support: +## ConnectCore 93 +* ConnectCore 93 System-on-Module (SOM) + * [CC-WMX-YC7D-KN](https://www.digi.com/products/models/cc-wmx-yc7d-kn) +* ConnectCore 93 Development Kit (DVK) + * [CC-WMX93-KIT](https://www.digi.com/products/models/cc-wmx93-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc93/yocto-gs_index)) + ## ConnectCore MP13 * ConnectCore MP13 System-on-Module (SOM) * [CC-WST-DX58-NK](https://www.digi.com/products/models/cc-wst-dx58-nk) * [CC-ST-DX58-ZK](https://www.digi.com/products/models/cc-st-dx58-zk) -* ConnectCore MP13 DVK +* ConnectCore MP13 Development Kit (DVK) * [CC-WMP133-KIT](https://www.digi.com/products/models/cc-wmp133-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/ccmp13/yocto-gs_index)) ## ConnectCore MP15 * ConnectCore MP15 System-on-Module (SOM) * [CC-WST-DW69-NM](https://www.digi.com/products/models/cc-wst-dw69-nm) * [CC-ST-DW69-ZM](https://www.digi.com/products/models/cc-st-dw69-zm) -* ConnectCore MP15 DVK +* ConnectCore MP15 Development Kit (DVK) * [CC-WMP157-KIT](https://www.digi.com/products/models/cc-wmp157-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/ccmp15/yocto-gs_index)) ## ConnectCore 8M Mini @@ -41,7 +47,7 @@ Software for the following hardware platforms is in production support: * [CC-WMX-ET7D-NN](https://www.digi.com/products/models/cc-wmx-et7d-nn) * [CC-MX-ET8D-ZN](https://www.digi.com/products/models/cc-mx-et8d-zn) * [CC-MX-ET7D-ZN](https://www.digi.com/products/models/cc-mx-et7d-zn) -* ConnectCore 8M Mini Development Kit +* ConnectCore 8M Mini Development Kit (DVK) * [CC-WMX8MM-KIT](https://www.digi.com/products/models/cc-wmx8mm-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc8mmini/yocto-gs_index)) ## ConnectCore 8M Nano @@ -50,7 +56,7 @@ Software for the following hardware platforms is in production support: * [CC-WMX-FR6D-NN](https://www.digi.com/products/models/cc-wmx-fr6d-nn) * [CC-MX-FS7D-ZN](https://www.digi.com/products/models/cc-mx-fs7d-zn) * [CC-MX-FR6D-ZN](https://www.digi.com/products/models/cc-mx-fr6d-zn) -* ConnectCore 8M Nano Development Kit +* ConnectCore 8M Nano Development Kit (DVK) * [CC-WMX8MN-KIT](https://www.digi.com/products/models/cc-wmx8mn-kit) ([Get Started](https://www.digi.com/resources/documentation/digidocs/embedded/dey/4.0/cc8mnano/yocto-gs_index)) ## ConnectCore 6UL @@ -81,11 +87,31 @@ Documentation is available online at https://www.digi.com/resources/documentatio # Downloads -* Demo images: https://ftp1.digi.com/support/digiembeddedyocto/4.0/r2/images/ -* Software Development Kit (SDK): https://ftp1.digi.com/support/digiembeddedyocto/4.0/r2/sdk/ +* Demo images: https://ftp1.digi.com/support/digiembeddedyocto/4.0/r3/images/ +* Software Development Kit (SDK): https://ftp1.digi.com/support/digiembeddedyocto/4.0/r3/sdk/ # Release Changelog +## 4.0-r3 + +* ST-based platforms + * Added initial TrustFence support + * Fixed Ethernet PHY pinctrl resuming from deep sleep + * Adjust CAN bus parent clock to achieve more accurate baudrates + * Add DT overlay for Bluetooth raw test mode + * Adjust NAND lines speed settings + * Add specific kernel driver for Marvell Ethernet PHY on DVK + * Fix race condition on bringup of LAN87xx Ethernet PHY + * Disable auto-mount of microSD card to avoid race condition on kernel boot +* NXP-based platforms + * Added support to ConnectCore 93 + * U-Boot v2022.04 (based on tag 'lf-5.15.71-2.2.0' by NXP) + * Linux kernel v5.15.71 (based on tag 'lf-5.15.71-2.2.0' by NXP) + * QT6 6.3.2 + * Fix PMIC regulators suspend state on ConnectCore 8M Nano + * Fix clock initialization issue on LAN8710/20 PHY on ConnectCore 6UL +* General bug fixing and improvements + ## 4.0-r2 * Added webkit support @@ -153,9 +179,8 @@ updated list can be found on the online documentation. * Wireless * P2P on the ConnectCore MP1 doesn't currently work in concurrency with other modes (station or SoftAP). - - * The following features are not yet supported: - * TrustFence + * Connecting to a 802.11r network throws an unexpected error with the latest + CYW4373E wireless firmware. ## ConnectCore 6UL diff --git a/meta-digi-arm/conf/machine/ccimx8mn-dvk.conf b/meta-digi-arm/conf/machine/ccimx8mn-dvk.conf index dc3a97a43..c3c620819 100644 --- a/meta-digi-arm/conf/machine/ccimx8mn-dvk.conf +++ b/meta-digi-arm/conf/machine/ccimx8mn-dvk.conf @@ -3,7 +3,7 @@ #@DESCRIPTION: Machine configuration for Digi's ConnectCore 8M Nano DVK. DIGI_SOM = "ccimx8mn" -MACHINEOVERRIDES =. "mx8:mx8m:mx8mm:${DIGI_FAMILY}:${DIGI_SOM}:" +MACHINEOVERRIDES =. "mx8:mx8m:mx8mn:${DIGI_FAMILY}:${DIGI_SOM}:" # Include the machine configuration for Digi's ConnectCore 8M module. include conf/machine/include/ccimx8m.inc diff --git a/meta-digi-arm/conf/machine/ccmp13-dvk.conf b/meta-digi-arm/conf/machine/ccmp13-dvk.conf index a968f92dc..57d726549 100644 --- a/meta-digi-arm/conf/machine/ccmp13-dvk.conf +++ b/meta-digi-arm/conf/machine/ccmp13-dvk.conf @@ -162,4 +162,4 @@ BOOTABLE_ARTIFACTS = " \ # TRUSTFENCE basic support # Alternatively, uncommment to enable the console with the specified GPIO -# TRUSTFENCE_CONSOLE_GPIO_ENABLE_NAME ?= "GPIOB6" +# TRUSTFENCE_CONSOLE_GPIO_ENABLE_NAME ?= "GPIOA5" diff --git a/meta-digi-arm/conf/machine/ccmp15-dvk.conf b/meta-digi-arm/conf/machine/ccmp15-dvk.conf index 145c857a3..1adbffbcb 100644 --- a/meta-digi-arm/conf/machine/ccmp15-dvk.conf +++ b/meta-digi-arm/conf/machine/ccmp15-dvk.conf @@ -166,4 +166,4 @@ BOOTABLE_ARTIFACTS = " \ # TRUSTFENCE basic support # Alternatively, uncommment to enable the console with the specified GPIO -# TRUSTFENCE_CONSOLE_GPIO_ENABLE_NAME ?= "GPIOA5" +# TRUSTFENCE_CONSOLE_GPIO_ENABLE_NAME ?= "GPIOB6" diff --git a/meta-digi-arm/conf/machine/include/ccimx93.inc b/meta-digi-arm/conf/machine/include/ccimx93.inc index 25e8a2568..4fdc97e6f 100644 --- a/meta-digi-arm/conf/machine/include/ccimx93.inc +++ b/meta-digi-arm/conf/machine/include/ccimx93.inc @@ -67,3 +67,8 @@ MACHINE_DISTRO_FEATURES_REMOVE = "vulkan" # SWUpdate sw-description configuration BOOTFS_EXT ?= ".boot.vfat" ROOTFS_EXT ?= ".ext4.gz" + +BOOT_DEV_NAME ?= "/dev/mmcblk0p1" +ROOTFS_DEV_NAME ?= "/dev/mmcblk0p3" +ROOTFS_ENC_DEV = "/dev/mapper/cryptrootfs" +ROOTFS_DEV_NAME_FINAL = "${@oe.utils.ifelse(d.getVar('TRUSTFENCE_ENCRYPT_ROOTFS') == '1', '${ROOTFS_ENC_DEV}', '${ROOTFS_DEV_NAME}')}" diff --git a/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_%.bbappend b/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_%.bbappend index 0f74e3de7..9b0039a1a 100644 --- a/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_%.bbappend +++ b/meta-digi-arm/dynamic-layers/stm-st-stm32mp/recipes-bsp/trusted-firmware-a/tf-a-stm32mp_%.bbappend @@ -63,6 +63,8 @@ tfa_sign() { TF_A_FILENAME="${tfa_basename}-${dt}-${config}.${TF_A_SUFFIX}" if [ -f "${DEPLOYDIR}/arm-trusted-firmware/${TF_A_FILENAME}" ]; then trustfence-sign-artifact.sh -p "${DIGI_SOM}" -t "${DEPLOYDIR}/arm-trusted-firmware/${TF_A_FILENAME}" "${DEPLOYDIR}/arm-trusted-firmware/${TF_A_FILENAME}_signed" + # the generated artifact lacks 'w' permission which prevents deletion by the build system + chmod u+w "${DEPLOYDIR}/arm-trusted-firmware/${TF_A_FILENAME}_signed" fi esac done # for file_type in ${tfa_file_type} diff --git a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey.inc b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey.inc index 6970a6a3a..893d655b4 100644 --- a/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey.inc +++ b/meta-digi-arm/recipes-bsp/u-boot/u-boot-dey.inc @@ -100,7 +100,7 @@ build_uboot_scripts() { mkimage -T script -n "Alternate bootscript" -C none -d ${WORKDIR}/altboot.txt ${DEPLOYDIR}/altboot.scr # Sign the scripts (TODO signing of artifacts for STM-based platforms) - if [ [ "${TRUSTFENCE_SIGN}" = "1" ] && [ "${DEY_SOC_VENDOR}" != "STM" ] ]; then + if [ "${TRUSTFENCE_SIGN}" = "1" ] && [ "${DEY_SOC_VENDOR}" != "STM" ]; then export CONFIG_SIGN_KEYS_PATH="${TRUSTFENCE_SIGN_KEYS_PATH}" [ -n "${TRUSTFENCE_KEY_INDEX}" ] && export CONFIG_KEY_INDEX="${TRUSTFENCE_KEY_INDEX}" [ -n "${TRUSTFENCE_DEK_PATH}" ] && [ "${TRUSTFENCE_DEK_PATH}" != "0" ] && export CONFIG_DEK_PATH="${TRUSTFENCE_DEK_PATH}" diff --git a/meta-digi-dey/classes/trustfence.bbclass b/meta-digi-dey/classes/trustfence.bbclass index e67f2274e..2e675dd8f 100644 --- a/meta-digi-dey/classes/trustfence.bbclass +++ b/meta-digi-dey/classes/trustfence.bbclass @@ -55,7 +55,7 @@ python () { if (d.getVar("DEY_SOC_VENDOR") == "NXP"): d.appendVar("UBOOT_TF_CONF", "CONFIG_CONSOLE_ENABLE_GPIO=y CONFIG_CONSOLE_ENABLE_GPIO_NR=%s " % d.getVar("TRUSTFENCE_CONSOLE_GPIO_ENABLE")) elif (d.getVar("DEY_SOC_VENDOR") == "STM"): - d.appendVar("UBOOT_TF_CONF", "CONFIG_CONSOLE_ENABLE_GPIO=y CONFIG_CONSOLE_ENABLE_GPIO_NAME=%s " % d.getVar("TRUSTFENCE_CONSOLE_GPIO_ENABLE_NAME")) + d.appendVar("UBOOT_TF_CONF", 'CONFIG_CONSOLE_ENABLE_GPIO=y CONFIG_CONSOLE_ENABLE_GPIO_NAME="%s" ' % d.getVar("TRUSTFENCE_CONSOLE_GPIO_ENABLE_NAME")) # Secure boot configuration if (d.getVar("TRUSTFENCE_SIGN_KEYS_PATH") == "default"): diff --git a/meta-digi-dey/recipes-support/swupdate/swupdate/0001-Makefile-change-Makefile-to-build-swupdate-library-s.patch b/meta-digi-dey/recipes-support/swupdate/swupdate/0001-Makefile-change-Makefile-to-build-swupdate-library-s.patch index ec8caeebc..4ab476c52 100644 --- a/meta-digi-dey/recipes-support/swupdate/swupdate/0001-Makefile-change-Makefile-to-build-swupdate-library-s.patch +++ b/meta-digi-dey/recipes-support/swupdate/swupdate/0001-Makefile-change-Makefile-to-build-swupdate-library-s.patch @@ -17,13 +17,13 @@ Signed-off-by: Mike Engel create mode 120000 ipc-static/progress_ipc.c diff --git a/Makefile b/Makefile -index bf534e110ac3..8b704798501f 100644 +index 09d03a3..080b834 100644 --- a/Makefile +++ b/Makefile @@ -364,6 +364,7 @@ include $(srctree)/Makefile.flags - objs-y := core handlers bootloader - libs-y := corelib mongoose parser suricatta fs + objs-y := core handlers bootloader suricatta + libs-y := corelib mongoose parser fs +libs-y += ipc-static bindings-y := bindings tools-y := tools @@ -47,7 +47,7 @@ index bf534e110ac3..8b704798501f 100644 install -m 0755 ${lua_swupdate} $(DESTDIR)/${LIBDIR}/lua/$(LUAVER); \ diff --git a/ipc-static/Makefile b/ipc-static/Makefile new file mode 100644 -index 000000000000..99cce6cc75da +index 0000000..99cce6c --- /dev/null +++ b/ipc-static/Makefile @@ -0,0 +1,6 @@ @@ -59,7 +59,7 @@ index 000000000000..99cce6cc75da +EXTRA_CFLAGS += -fPIC diff --git a/ipc-static/network_ipc-if.c b/ipc-static/network_ipc-if.c new file mode 120000 -index 000000000000..37894e2f8207 +index 0000000..37894e2 --- /dev/null +++ b/ipc-static/network_ipc-if.c @@ -0,0 +1 @@ @@ -67,7 +67,7 @@ index 000000000000..37894e2f8207 \ No newline at end of file diff --git a/ipc-static/network_ipc.c b/ipc-static/network_ipc.c new file mode 120000 -index 000000000000..0640077ec0fc +index 0000000..0640077 --- /dev/null +++ b/ipc-static/network_ipc.c @@ -0,0 +1 @@ @@ -75,7 +75,7 @@ index 000000000000..0640077ec0fc \ No newline at end of file diff --git a/ipc-static/progress_ipc.c b/ipc-static/progress_ipc.c new file mode 120000 -index 000000000000..7c6622ce0a30 +index 0000000..7c6622c --- /dev/null +++ b/ipc-static/progress_ipc.c @@ -0,0 +1 @@ diff --git a/sdk/build-github.sh b/sdk/build-github.sh index 357f50159..c505a6166 100755 --- a/sdk/build-github.sh +++ b/sdk/build-github.sh @@ -22,19 +22,6 @@ set -e -AVAILABLE_PLATFORMS=" \ - ccimx8mm-dvk \ - ccimx8mn-dvk \ - ccimx8x-sbc-pro \ - ccimx8x-sbc-express \ - ccimx6qpsbc \ - ccimx6sbc \ - ccimx6ulsbc \ - ccimx6ulstarter \ - ccmp15-dvk \ - ccmp13-dvk \ -" - MANIFEST_URL="https://github.com/digi-embedded/dey-manifest.git" RM_WORK_CFG=" @@ -53,14 +40,10 @@ SOURCE_DATE_EPOCH = \"${SOURCE_DATE_EPOCH}\" REPRODUCIBLE_TIMESTAMP_ROOTFS = \"${SOURCE_DATE_EPOCH}\" " -BACKEND_REMOVAL_CFG=" -DISTRO_FEATURES_remove = \"x11 wayland vulkan\" -" - REPO="$(which repo)" error() { - printf "${1}" + printf "%s" "${1}" exit 1 } @@ -73,10 +56,10 @@ copy_images() { # Copy individual packages only for 'release' builds, not for 'daily'. # For 'daily' builds just copy the firmware images (the buildserver # cannot afford such amount of disk space) - if echo ${JOB_NAME} | grep -qs 'dey.*release'; then - cp -r tmp/deploy/* ${1}/ + if echo "${JOB_NAME}" | grep -qs 'dey.*release'; then + cp -r tmp/deploy/* "${1}"/ else - cp -r tmp/deploy/images ${1}/ + cp -r tmp/deploy/images "${1}"/ fi # Images directory post-processing @@ -85,9 +68,9 @@ copy_images() { # files. # - Remove 'README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt' files # - Create MD5SUMS file - find ${1} -type l -delete - find ${1} -type f -name 'README_-_DO_NOT_DELETE*' -delete - find ${1} -type f -not -name MD5SUMS -print0 | xargs -r -0 md5sum | sed -e "s,${1}/,,g" | sort -k2,2 > ${1}/MD5SUMS + find "${1}" -type l -delete + find "${1}" -type f -name 'README_-_DO_NOT_DELETE*' -delete + find "${1}" -type f -not -name MD5SUMS -print0 | xargs -r -0 md5sum | sed -e "s,${1}/,,g" | sort -k2,2 > "${1}"/MD5SUMS } # @@ -112,7 +95,7 @@ purge_sstate() { packagegroup-dey-webkit \ packagegroup-dey-wireless \ " - bitbake -k -c cleansstate ${PURGE_PKGS} >/dev/null 2>&1 || true + bitbake -k -c cleansstate "${PURGE_PKGS}" >/dev/null 2>&1 || true } # @@ -121,8 +104,8 @@ purge_sstate() { # $1: image recipe # swu_recipe_name() { - if [ -n "$(find ${YOCTO_INST_DIR}/sources/meta-digi -type f -name "${1}-swu.bb")" ]; then - printf "${1}-swu" + if [ -n "$(find "${YOCTO_INST_DIR}"/sources/meta-digi -type f -name "${1}-swu.bb")" ]; then + printf "%s-swu" "${1}" fi } @@ -130,11 +113,10 @@ swu_recipe_name() { [ -z "${DY_REVISION}" ] && error "DY_REVISION not specified" [ -z "${WORKSPACE}" ] && error "WORKSPACE not specified" -# Set default values if not provided by Jenkins -[ -z "${DY_PLATFORMS}" ] && DY_PLATFORMS="$(echo ${AVAILABLE_PLATFORMS})" - # Per-platform data -while read _pl _tgt; do +while read -r _pl _tgt; do + AVAILABLE_PLATFORMS="${AVAILABLE_PLATFORMS:+${AVAILABLE_PLATFORMS} }${_pl}" + # shellcheck disable=SC2015 [ -n "${DY_TARGET}" ] && _tgt="${DY_TARGET}" || true # Dashes are not allowed in variables so let's substitute them on # the fly with underscores. @@ -150,74 +132,83 @@ done<<-_EOF_ ccimx6ulstarter core-image-base ccmp15-dvk dey-image-webkit ccmp13-dvk core-image-base + ccimx93-dvk dey-image-qt _EOF_ +# Set default values if not provided by Jenkins +DY_PLATFORMS="${DY_PLATFORMS:-${AVAILABLE_PLATFORMS}}" + YOCTO_IMGS_DIR="${WORKSPACE}/images" -YOCTO_INST_DIR="${WORKSPACE}/dey.$(echo ${DY_REVISION} | tr '/' '_')" +YOCTO_INST_DIR="${WORKSPACE}/dey.$(echo "${DY_REVISION}" | tr '/' '_')" YOCTO_PROJ_DIR="${WORKSPACE}/projects" # If CPUS is unset, set it with the machine cpus if [ -z "${CPUS}" ]; then CPUS="$(grep -c processor /proc/cpuinfo)" fi -[ ${CPUS} -gt 1 ] && MAKE_JOBS="-j${CPUS}" +[ "${CPUS}" -gt 1 ] && MAKE_JOBS="-j${CPUS}" -printf "\n[INFO] Build Yocto \"${DY_REVISION}\" for \"${DY_PLATFORMS}\" (cpus=${CPUS})\n\n" +printf "\n[INFO] Build Yocto \"%s\" for \"%s\" (cpus=%s)\n\n" "${DY_REVISION}" "${DY_PLATFORMS}" "${CPUS}" # Install DEY -rm -rf ${YOCTO_INST_DIR} && mkdir -p ${YOCTO_INST_DIR} -if pushd ${YOCTO_INST_DIR}; then +rm -rf "${YOCTO_INST_DIR}" && mkdir -p "${YOCTO_INST_DIR}" +if pushd "${YOCTO_INST_DIR}"; then # Use git ls-remote to check the revision type if [ "${DY_REVISION}" != "master" ]; then if git ls-remote --tags --exit-code "${MANIFEST_URL}" "${DY_REVISION}"; then - printf "[INFO] Using tag \"${DY_REVISION}\"\n" + printf "[INFO] Using tag \"%s\"\n" "${DY_REVISION}" repo_revision="-b refs/tags/${DY_REVISION}" elif git ls-remote --heads --exit-code "${MANIFEST_URL}" "${DY_REVISION}"; then - printf "[INFO] Using branch \"${DY_REVISION}\"\n" + printf "[INFO] Using branch \"%s\"\n" "${DY_REVISION}" repo_revision="-b ${DY_REVISION}" else error "Revision \"${DY_REVISION}\" not found" fi fi + # shellcheck disable=SC2086 yes "" 2>/dev/null | ${REPO} init --no-repo-verify -u ${MANIFEST_URL} ${repo_revision} - ${REPO} forall -p -c 'git remote prune $(git remote)' + ${REPO} --no-pager forall -j4 -p -c 'git clean -fdx' + # shellcheck disable=SC2016 + ${REPO} --no-pager forall -j4 -p -c 'git remote prune $(git remote)' || true + # shellcheck disable=SC2086 time ${REPO} sync -d ${MAKE_JOBS} popd fi # Create projects and build -rm -rf ${YOCTO_IMGS_DIR} ${YOCTO_PROJ_DIR} +rm -rf "${YOCTO_IMGS_DIR}" "${YOCTO_PROJ_DIR}" for platform in ${DY_PLATFORMS}; do - # The variables _var|tgt got their dashes converted to + # The variable _tgt got its dashes converted to # underscores, so we must convert also the ones in ${platform}. - eval platform_targets=\"\${${platform//-/_}_tgt}\" + eval "platform_targets=\"\${${platform//-/_}_tgt}\"" + _this_prj_dir="${YOCTO_PROJ_DIR}/${platform}" _this_img_dir="${YOCTO_IMGS_DIR}/${platform}" - mkdir -p ${_this_img_dir} ${_this_prj_dir} - if pushd ${_this_prj_dir}; then + mkdir -p "${_this_img_dir}" "${_this_prj_dir}" + if pushd "${_this_prj_dir}"; then # Configure and build the project in a sub-shell to avoid # mixing environments between different platform's projects ( export TEMPLATECONF="${TEMPLATECONF:+${TEMPLATECONF}/${platform}}" - MKP_PAGER="" . ${YOCTO_INST_DIR}/mkproject.sh -p ${platform} <<< "y" + # shellcheck disable=SC1091,SC2086 + MKP_PAGER="" . ${YOCTO_INST_DIR}/mkproject.sh -p "${platform}" <<< "y" # Set a common DL_DIR and SSTATE_DIR for all platforms sed -i -e "/^#DL_DIR ?=/cDL_DIR ?= \"${YOCTO_PROJ_DIR}/downloads\"" \ -e "/^#SSTATE_DIR ?=/cSSTATE_DIR ?= \"${YOCTO_PROJ_DIR}/sstate-cache\"" \ conf/local.conf - printf "${RM_WORK_CFG}" >> conf/local.conf - printf "${ZIP_INSTALLER_CFG}" >> conf/local.conf - printf "${BUILD_TIMESTAMP}" >> conf/local.conf - # Remove all desktop backend distro features if building framebuffer images - if [ "${DY_FB_IMAGE}" = "true" ]; then - printf "${BACKEND_REMOVAL_CFG}" >> conf/local.conf - fi - for target in ${platform_targets}; do - printf "\n[INFO] Building the ${target} target.\n" - time bitbake ${target} $(swu_recipe_name ${target}) + { + printf "%s" "${RM_WORK_CFG}" + printf "%s" "${ZIP_INSTALLER_CFG}" + printf "%s" "${BUILD_TIMESTAMP}" + } >> conf/local.conf + for target in ${platform_targets:?}; do + printf "\n[INFO] Building the %s target.\n" "${target}" + # shellcheck disable=SC2046 + time bitbake "${target}" $(swu_recipe_name "${target}") done purge_sstate ) - copy_images ${_this_img_dir} + copy_images "${_this_img_dir}" popd fi done