swupdate: add u-boot swupdate support

This commit adds u-boot swupdate support for all platforms.
Now u-boot can be updated with all our supported update
options. Currently it will only update first partition
u-boot partition.

https://onedigi.atlassian.net/browse/DEL-8749

Signed-off-by: Mike Engel <Mike.Engel@digi.com>
This commit is contained in:
Mike Engel 2023-11-06 15:43:16 +01:00
parent fd70bf2fce
commit e4bb4d69af
12 changed files with 176 additions and 118 deletions

View File

@ -80,3 +80,6 @@ UBOOT_ENV = "${@bb.utils.contains('TRUSTFENCE_FIT_IMG', '1', 'boot', '', d)}"
# Partitions to blacklist for swupdate:
# fsbl1, fsbl2, metadata1, metadata2, fip-a, fip-b
SWUPDATE_MTD_BLACKLIST = "0 1 2 3 4 5"
# Bootloader Flash offset
BOOTLOADER_SEEK_BOOT = "0"

View File

@ -88,10 +88,29 @@ SWUPDATE_IS_IMAGES_UPDATE = "${@update_based_on_images(d)}"
# Determine the correct UBoot update script file to use depending on storage type.
SWUPDATE_UBOOT_SCRIPT = "${@oe.utils.conditional('STORAGE_MEDIA', 'mmc', 'swupdate_uboot_mmc.sh', 'swupdate_uboot_nand.sh', d)}"
SWUPDATE_UBOOT_SCRIPT_NAME = "${@os.path.basename(d.getVar('SWUPDATE_UBOOT_SCRIPT'))}"
UBOOT_EXT ?= ".${UBOOT_SUFFIX}"
SWUPDATE_UBOOT_PREFIX ?= "${UBOOT_PREFIX}"
SWUPDATE_UBOOT_PREFIX:ccmp1 ?= "fip"
SWUPDATE_UBOOT_PREFIX_TFA ?= "tf-a"
UBOOTIMG_OFFSET ?= "${BOOTLOADER_SEEK_BOOT}"
SWUPDATE_UBOOT_EXT ?= ".${UBOOT_SUFFIX}"
SWUPDATE_UBOOT_EXT_TFA ?= ".stm32"
SWUPDATE_UBOOT_NAME ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME:ccmp1 ?= "${SWUPDATE_UBOOT_PREFIX}-${MACHINE}-optee${SWUPDATE_UBOOT_EXT}"
SWUPDATE_UBOOT_NAME_TFA ?= "${@oe.utils.conditional('DEY_SOC_VENDOR', 'STM', '${SWUPDATE_UBOOT_PREFIX_TFA}-${MACHINE}-nand${SWUPDATE_UBOOT_EXT_TFA}', '', d)}"
SWUPDATE_UBOOT_OFFSET ?= "0"
SWUPDATE_UBOOT_OFFSET:ccimx6 ?= "1"
# Retrieve the correct encryption type.
def get_swupdate_uboot_enc(d):
if d.getVar('TRUSTFENCE_DEK_PATH') and d.getVar('TRUSTFENCE_DEK_PATH') != "0" :
return "enc"
return "normal"
SWUPDATE_UBOOT_ENC ?= "${@get_swupdate_uboot_enc(d)}"
#######################################
########## SWU Update Script ##########

View File

@ -8,11 +8,13 @@ software =
images: (
##IMAGES_PRIMARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -25,11 +27,13 @@ software =
images: (
##IMAGES_SECONDARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -42,11 +46,13 @@ software =
images: (
##IMAGES_SINGLE##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{

View File

@ -8,11 +8,13 @@ software =
images: (
##IMAGES_PRIMARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -29,11 +31,13 @@ software =
images: (
##IMAGES_SECONDARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -50,11 +54,13 @@ software =
images: (
##IMAGES_SINGLE##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{

View File

@ -0,0 +1,5 @@
{
filename = "##FILE_NAME##";
path = "##FILE_PATH##";
sha256 = "$swupdate_get_sha256(##FILE_NAME##)";
}

View File

@ -0,0 +1,6 @@
{
filename = "@@SWUPDATE_UBOOT_SCRIPT_NAME@@";
type = "preinstall";
data = "@@SWUPDATE_UBOOT_NAME@@ @@SWUPDATE_UBOOT_ENC@@ @@SWUPDATE_UBOOT_OFFSET@@ @@SWUPDATE_UBOOT_NAME_TFA@@";
sha256 = "$swupdate_get_sha256(@@SWUPDATE_UBOOT_SCRIPT_NAME@@)";
}

View File

@ -13,6 +13,7 @@ software =
path = "/";
sha256 = "$swupdate_get_sha256(@@SWUPDATE_FILES_TARGZ_FILE_NAME@@)";
}
##FILES_UBOOT##
);
scripts: (
{
@ -20,6 +21,7 @@ software =
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -40,6 +42,7 @@ software =
path = "/system/";
sha256 = "$swupdate_get_sha256(@@SWUPDATE_FILES_TARGZ_FILE_NAME@@)";
}
##FILES_UBOOT##
);
scripts: (
{
@ -47,6 +50,7 @@ software =
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
}
platform = {

View File

@ -8,12 +8,14 @@ software =
images: (
##IMAGES_PRIMARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -26,12 +28,14 @@ software =
images: (
##IMAGES_SECONDARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -44,12 +48,14 @@ software =
images: (
##IMAGES_SINGLE##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
type = "shellscript";
}
##SCRIPT_UBOOT##
);
}
platform = {

View File

@ -8,6 +8,7 @@ software =
images: (
##IMAGES_PRIMARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
@ -15,6 +16,7 @@ software =
data = "$swupdate_get_sha256(@@SWUPDATE_RDIFF_ROOTFS_SOURCE_FILE@@)"
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
}
##SCRIPT_UBOOT##
);
uboot: (
{
@ -27,6 +29,7 @@ software =
images: (
##IMAGES_SECONDARY##
);
##FILES_UBOOT##
scripts: (
{
filename = "@@SWUPDATE_SCRIPT_NAME@@";
@ -34,6 +37,7 @@ software =
data = "$swupdate_get_sha256(@@SWUPDATE_RDIFF_ROOTFS_SOURCE_FILE@@)"
sha256 = "$swupdate_get_sha256(@@SWUPDATE_SCRIPT_NAME@@)";
}
##SCRIPT_UBOOT##
);
uboot: (
{

View File

@ -1,77 +0,0 @@
software =
{
version = "##FW_VERSION##";
description = "##DESCRIPTION##";
mmc = {
platform: {
images: (
{
filename = "##BOOTIMG_NAME##";
device = "##BOOT_DEV##";
type = "raw";
sha256 = "$swupdate_get_sha256(##BOOTIMG_NAME##)";
installed-directly = true;
},
{
filename = "##ROOTIMG_NAME##";
device = "##ROOTFS_DEV##";
type = "raw";
sha256 = "$swupdate_get_sha256(##ROOTIMG_NAME##)";
compressed = "zlib";
installed-directly = true;
}
);
files: (
{
filename = "##UBOOTIMG_NAME##";
path = "##UBOOT_IMAGE_PATH##";
sha256 = "$swupdate_get_sha256(##UBOOTIMG_NAME##)";
}
);
scripts: (
{
filename = "##SWUPDATE_UBOOT_SCRIPT##";
type = "preinstall";
data = "##UBOOTIMG_NAME## ##UBOOTIMG_ENC## ##UBOOTIMG_OFFSET##;
sha256 = "$swupdate_get_sha256(##SWUPDATE_UBOOT_SCRIPT##)";
}
);
};
};
mtd = {
platform: {
images: (
{
filename = "##BOOTIMG_NAME##";
volume = "##BOOT_DEV##";
type = "ubivol";
sha256 = "$swupdate_get_sha256(##BOOTIMG_NAME##)";
installed-directly = true;
},
{
filename = "##ROOTIMG_NAME##";
volume = "##ROOTFS_DEV##";
type = "ubivol";
sha256 = "$swupdate_get_sha256(##ROOTIMG_NAME##)";
installed-directly = true;
}
);
files: (
{
filename = "##UBOOTIMG_NAME##";
path = "##UBOOT_IMAGE_PATH##";
sha256 = "$swupdate_get_sha256(##UBOOTIMG_NAME##)";
}
);
scripts: (
{
filename = "##SWUPDATE_UBOOT_SCRIPT##";
type = "postinstall";
data = "##UBOOTIMG_NAME## ##UBOOTIMG_ENC##";
sha256 = "$swupdate_get_sha256(##SWUPDATE_UBOOT_SCRIPT##)";
}
);
};
};
}

View File

@ -1,7 +1,7 @@
#!/bin/sh
#===============================================================================
#
# Copyright (C) 2022 by Digi International Inc.
# Copyright (C) 2022-2023 by Digi International Inc.
# All rights reserved.
#
# This program is free software; you can redistribute it and/or modify it
@ -15,6 +15,7 @@
UBOOT_FILE="$1"
UBOOT_ENC="$2"
TFA_FILE="$4"
echo "**** Start U-Boot update process *****"
@ -70,7 +71,31 @@ dump_dek ()
return 0
}
install_fwu ()
{
FLASH_DEV="$1"
FW_FILE="$2"
flash_eraseall ${FLASH_DEV}
rc=$?
if [ "$rc" -ne 0 ]; then
echo "U-Boot: erasing ${FLASH_DEV} failed"
exit $rc
fi
nandwrite -p ${FLASH_DEV} /tmp/${FW_FILE}
if [ "$rc" -ne 0 ]; then
echo "U-Boot: failed to write firmware to ${FLASH_DEV}"
exit $rc
fi
}
COMP_CCMP1=$(cat /proc/device-tree/compatible | grep "\bdigi,ccmp1\b")
if [ "${UBOOT_ENC}" = "enc" ]; then
if [ "${COMP_CCMP1}" = "digi,ccmp1" ]; then
# Currently not supported for these platforms
echo "*** Encrypted U-boot currently not support for CCMP1 ***"
else
dump_dek
rc=$?
if [ "$rc" -ne 0 ]; then
@ -84,10 +109,22 @@ if [ "${UBOOT_ENC}" = "enc" ]; then
exit $rc
fi
UBOOT_FILE="${ENCRYPTED_UBOOT_DEK}"
fi
fi
# install U-Boot onto the Nand Flash
kobs-ng init -x -v /mnt/update/${UBOOT_FILE}
if [ "${COMP_CCMP1}" = "digi,ccmp1" ]; then
# install TF-A onto fsbl1 partition
mtd_num="$(sed -ne "/fsbl1/s,^mtd\([0-9]\+\).*,\1,g;T;p" /proc/mtd)"
TFA_DEV="/dev/mtd${mtd_num}"
install_fwu ${TFA_DEV} ${TFA_FILE}
# install U-Boot onto FIP-a partition
mtd_num="$(sed -ne "/fip-a/s,^mtd\([0-9]\+\).*,\1,g;T;p" /proc/mtd)"
FIP_DEV="/dev/mtd${mtd_num}"
install_fwu ${FIP_DEV} ${UBOOT_FILE}
else
# install U-Boot onto the Nand Flash
kobs-ng init -x -v /tmp/${UBOOT_FILE}
fi
rc=$?
if [ "$rc" -ne 0 ]; then
echo "u-Boot: Updating U-Boot partition failed"

View File

@ -9,13 +9,14 @@ SRC_URI = " \
file://sw-description-images_template \
file://sw-description-files_template \
file://sw-description-rdiff_template \
file://sw-description-uboot \
file://swupdate_uboot_nand.sh \
file://swupdate_uboot_mmc.sh \
file://image_template_mmc \
file://image_template_nand \
file://image_template_rdiff_mmc \
file://image_template_rdiff_nand \
file://file_template_uboot \
file://script_template_uboot\
file://update_images.sh \
file://update_files.sh \
file://update_rdiff.sh \
@ -31,8 +32,7 @@ SWUPDATE_IMAGES = " \
${@oe.utils.ifelse(d.getVar('SWUPDATE_IS_IMAGES_UPDATE') == 'true', '${IMG_NAME}', '')} \
${@oe.utils.ifelse(d.getVar('SWUPDATE_IS_FILES_UPDATE') == 'true', '${SWUPDATE_FILES_TARGZ_FILE_NAME}', '')} \
${@oe.utils.ifelse(d.getVar('SWUPDATE_IS_RDIFF_UPDATE') == 'true', '${IMG_NAME} ${SWUPDATE_RDIFF_ROOTFS_DELTA_FILE_NAME}', '')} \
${@oe.utils.ifelse(d.getVar('SWUPDATE_UBOOTIMG') == 'true', '${UBOOT_PREFIX}', '')} \
${@oe.utils.ifelse(d.getVar('SWUPDATE_UBOOTIMG') == 'true', '${SWUPDATE_UBOOT_SCRIPT}', '')} \
${@oe.utils.ifelse(d.getVar('SWUPDATE_UBOOTIMG') == 'true', '${SWUPDATE_UBOOT_NAME} ${SWUPDATE_UBOOT_NAME_TFA} ${SWUPDATE_UBOOT_SCRIPT_NAME}', '')} \
${SWUPDATE_SCRIPT_NAME} \
"
@ -43,8 +43,11 @@ python () {
img_fstypes = img_fstypes + " " + d.getVar('ROOTFS_EXT')
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", d.getVar('IMG_NAME'), img_fstypes)
if (d.getVar('SWUPDATE_UBOOTIMG') == "true"):
uboot_fstypes = d.getVar('UBOOT_EXT')
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", d.getVar('UBOOT_PREFIX'), uboot_fstypes)
uboot_fstypes = d.getVar('SWUPDATE_UBOOT_EXT')
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", d.getVar('SWUPDATE_UBOOT_PREFIX'), uboot_fstypes)
if (d.getVar('DEY_SOC_VENDOR') == "STM"):
uboot_tfa_fstypes = d.getVar('SWUPDATE_UBOOT_EXT_TFA')
d.setVarFlag("SWUPDATE_IMAGES_FSTYPES", d.getVar('SWUPDATE_UBOOT_PREFIX_TFA'), uboot_tfa_fstypes)
}
# Execute extra tasks before creating SWU update package.
@ -65,6 +68,15 @@ python do_swuimage:prepend() {
updatescript = os.path.join(workdir, updatescript)
if os.path.isfile(updatescript):
shutil.copyfile(updatescript, os.path.join(imgdeploydir, os.path.basename(updatescript)))
# Copy U-Boot script file.
if d.getVar('SWUPDATE_UBOOTIMG') == "true":
uboot_updatescript = d.getVar('SWUPDATE_UBOOT_SCRIPT_NAME', True)
if "/" not in uboot_updatescript:
workdir = d.getVar('WORKDIR', True)
uboot_updatescript = os.path.join(workdir, uboot_updatescript)
if os.path.isfile(uboot_updatescript):
shutil.copyfile(uboot_updatescript, os.path.join(imgdeploydir, os.path.basename(uboot_updatescript)))
}
# Upgrade available.
@ -73,18 +85,7 @@ UPGRADE_AVAILABLE:ccimx6 = "1"
# Create and fill 'sw-description' file.
fill_description() {
if [ "${SWUPDATE_UBOOTIMG}" = "true" ]; then
cp ${WORKDIR}/sw-description-uboot ${WORKDIR}/sw-description
cp ${WORKDIR}/${SWUPDATE_UBOOT_SCRIPT} ${DEPLOY_DIR_IMAGE}/${SWUPDATE_UBOOT_SCRIPT}
if [ "${TRUSTFENCE_DEK_PATH}" != "0" ] && [ "${TRUSTFENCE_DEK_PATH}" != "default" ]; then
sed -i -e "s,##UBOOTIMG_ENC##,enc,g" "${WORKDIR}/sw-description"
else
sed -i -e "s,##UBOOTIMG_ENC##,normal,g" "${WORKDIR}/sw-description"
fi
sed -i -e "s,##UBOOTIMG_NAME##,${UBOOT_PREFIX}-${MACHINE}${UBOOT_EXT},g" "${WORKDIR}/sw-description"
sed -i -e "s,##SWUPDATE_UBOOT_SCRIPT##,${SWUPDATE_UBOOT_SCRIPT},g" "${WORKDIR}/sw-description"
sed -i -e "s,##UBOOTIMG_OFFSET##,${UBOOTIMG_OFFSET},g" "${WORKDIR}/sw-description"
elif [ "${SWUPDATE_IS_FILES_UPDATE}" = "true" ]; then
if [ "${SWUPDATE_IS_FILES_UPDATE}" = "true" ]; then
cp ${WORKDIR}/sw-description-files_template ${WORKDIR}/sw-description
elif [ "${SWUPDATE_IS_RDIFF_UPDATE}" = "true" ]; then
cp ${WORKDIR}/sw-description-rdiff_template ${WORKDIR}/sw-description
@ -92,7 +93,45 @@ fill_description() {
cp ${WORKDIR}/sw-description-images_template ${WORKDIR}/sw-description
fi
# Add U-Boot sections if required.
if [ "${SWUPDATE_UBOOTIMG}" = "true" ]; then
# Add U-Boot files section.
UBOOT_FILE_TEMPLATE="file_template_uboot"
FILES_TEMPLATE="%s\n"
if [ "${DEY_SOC_VENDOR}" = "STM" ]; then
FILES_TEMPLATE="%s,\n%s\n"
fi
if [ "${SWUPDATE_IS_FILES_UPDATE}" != "true" ]; then
FILES_TEMPLATE=" files: (\n${FILES_TEMPLATE} );\n"
else
FILES_TEMPLATE=" ,\n${FILES_TEMPLATE}"
fi
if [ "${DEY_SOC_VENDOR}" = "STM" ]; then
printf "${FILES_TEMPLATE}" \
"$(sed -e "s,##FILE_NAME##,${SWUPDATE_UBOOT_NAME},g" -e "s,##FILE_PATH##,/tmp/${SWUPDATE_UBOOT_NAME},g" "${UBOOT_FILE_TEMPLATE}")" \
"$(sed -e "s,##FILE_NAME##,${SWUPDATE_UBOOT_NAME_TFA},g" -e "s,##FILE_PATH##,/tmp/${SWUPDATE_UBOOT_NAME_TFA},g" "${UBOOT_FILE_TEMPLATE}")" \
> template_out.txt
else
printf "${FILES_TEMPLATE}" \
"$(sed -e "s,##FILE_NAME##,${SWUPDATE_UBOOT_NAME},g" -e "s,##FILE_PATH##,/tmp/${SWUPDATE_UBOOT_NAME},g" "${UBOOT_FILE_TEMPLATE}")" \
> template_out.txt
fi
sed -i -e "/##FILES_UBOOT##/r template_out.txt" -e "/##FILES_UBOOT##/d" "${WORKDIR}/sw-description"
# Add U-Boot script section.
UBOOT_SCRIPT_TEMPLATE="script_template_uboot"
printf " ,\n%s\n" \
"$(cat "${UBOOT_SCRIPT_TEMPLATE}")" \
> template_out.txt
sed -i -e "/##SCRIPT_UBOOT##/r template_out.txt" -e "/##SCRIPT_UBOOT##/d" "${WORKDIR}/sw-description"
else
# Remove U-Boot entries if U-Boot is not being updated.
sed -i -e "s,##FILES_UBOOT##,,g" "${WORKDIR}/sw-description"
sed -i -e "s,##SCRIPT_UBOOT##,,g" "${WORKDIR}/sw-description"
fi
if [ "${SWUPDATE_IS_FILES_UPDATE}" = "true" ]; then
rm -f template_out.txt
return 0
fi
@ -111,23 +150,23 @@ fill_description() {
printf "%s,\n%s\n" \
"$(sed -e "s,##IMG_NAME##,${BOOT_IMAGE_NAME},g" -e "s,##DEV##,${BOOT_DEV_NAME_A},g" -e "/compressed/d" "${BOOT_IMAGE_TEMPLATE}")" \
"$(sed -e "s,##IMG_NAME##,${ROOTFS_IMAGE_NAME},g" -e "s,##DEV##,${ROOTFS_DEV_NAME_A},g" "${ROOTFS_IMAGE_TEMPLATE}")" \
> images_temp.txt
sed -i -e "/##IMAGES_PRIMARY##/r images_temp.txt" -e "/##IMAGES_PRIMARY##/d" "${WORKDIR}/sw-description"
> template_out.txt
sed -i -e "/##IMAGES_PRIMARY##/r template_out.txt" -e "/##IMAGES_PRIMARY##/d" "${WORKDIR}/sw-description"
# Add secondary bank images section for dual boot systems.
printf "%s,\n%s\n" \
"$(sed -e "s,##IMG_NAME##,${BOOT_IMAGE_NAME},g" -e "s,##DEV##,${BOOT_DEV_NAME_B},g" -e "/compressed/d" "${BOOT_IMAGE_TEMPLATE}")" \
"$(sed -e "s,##IMG_NAME##,${ROOTFS_IMAGE_NAME},g" -e "s,##DEV##,${ROOTFS_DEV_NAME_B},g" "${ROOTFS_IMAGE_TEMPLATE}")" \
> images_temp.txt
sed -i -e "/##IMAGES_SECONDARY##/r images_temp.txt" -e "/##IMAGES_SECONDARY##/d" "${WORKDIR}/sw-description"
> template_out.txt
sed -i -e "/##IMAGES_SECONDARY##/r template_out.txt" -e "/##IMAGES_SECONDARY##/d" "${WORKDIR}/sw-description"
# Add images section for single boot systems.
if [ "${SWUPDATE_IS_RDIFF_UPDATE}" != "true" ]; then
printf "%s,\n%s\n" \
"$(sed -e "s,##IMG_NAME##,${BOOT_IMAGE_NAME},g" -e "s,##DEV##,${BOOT_DEV_NAME},g" -e "/compressed/d" "${BOOT_IMAGE_TEMPLATE}")" \
"$(sed -e "s,##IMG_NAME##,${ROOTFS_IMAGE_NAME},g" -e "s,##DEV##,${ROOTFS_DEV_NAME_FINAL},g" "${ROOTFS_IMAGE_TEMPLATE}")" \
> images_temp.txt
sed -i -e "/##IMAGES_SINGLE##/r images_temp.txt" -e "/##IMAGES_SINGLE##/d" "${WORKDIR}/sw-description"
> template_out.txt
sed -i -e "/##IMAGES_SINGLE##/r template_out.txt" -e "/##IMAGES_SINGLE##/d" "${WORKDIR}/sw-description"
fi
# Remove 'compressed' flag for read-only file systems as they use 'squashfs' images.
@ -136,7 +175,7 @@ fill_description() {
fi
# Clean dir.
rm -f images_temp.txt
rm -f template_out.txt
}
fill_description[dirs] = "${DEPLOY_DIR_IMAGE} ${WORKDIR}"
do_unpack[postfuncs] += "fill_description"