Files
poky/meta/classes-recipe/uboot-sign.bbclass
Jamin Lin 13d83810b8 uboot-sign: Add support for setting firmware property in FIT configuration
Add the ability to set the "firmware" property in the FIT configuration node
by introducing the UBOOT_FIT_CONF_FIRMWARE variable.

This property defines the primary image to be executed during boot. If it is
set, its value will be written into the FIT configuration under the "firmware"
field. If not set, the bootloader will fall back to using the first entry in
the "loadables" list.

Using this property improves control over the boot sequence, especially in
multi-binary boot scenarios.

(From OE-Core rev: 82e1d7cbc855dbe4bec93f9b049851cbe376ea5e)

Signed-off-by: Jamin Lin <jamin_lin@aspeedtech.com>
Signed-off-by: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
2025-05-22 14:36:49 +01:00

618 lines
19 KiB
Plaintext

#
# Copyright OpenEmbedded Contributors
#
# SPDX-License-Identifier: MIT
#
# This file is part of U-Boot verified boot support and is intended to be
# inherited from the u-boot recipe.
#
# The signature procedure requires the user to generate an RSA key and
# certificate in a directory and to define the following variable:
#
# UBOOT_SIGN_KEYDIR = "/keys/directory"
# UBOOT_SIGN_KEYNAME = "dev" # keys name in keydir (eg. "dev.crt", "dev.key")
# UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000"
# UBOOT_SIGN_ENABLE = "1"
#
# As verified boot depends on fitImage generation, following is also required:
#
# KERNEL_CLASSES ?= " kernel-fitimage "
# KERNEL_IMAGETYPE ?= "fitImage"
#
# The signature support is limited to the use of CONFIG_OF_SEPARATE in U-Boot.
#
# For more details on signature process, please refer to U-Boot documentation.
# We need some variables from u-boot-config
inherit uboot-config
require conf/image-fitimage.conf
# Enable use of a U-Boot fitImage
UBOOT_FITIMAGE_ENABLE ?= "0"
# Signature activation - this requires UBOOT_FITIMAGE_ENABLE = "1"
SPL_SIGN_ENABLE ?= "0"
# Default value for deployment filenames.
UBOOT_DTB_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.dtb"
UBOOT_DTB_BINARY ?= "u-boot.dtb"
UBOOT_DTB_SIGNED ?= "${UBOOT_DTB_BINARY}-signed"
UBOOT_DTB_SYMLINK ?= "u-boot-${MACHINE}.dtb"
UBOOT_NODTB_IMAGE ?= "u-boot-nodtb-${MACHINE}-${PV}-${PR}.bin"
UBOOT_NODTB_BINARY ?= "u-boot-nodtb.bin"
UBOOT_NODTB_SYMLINK ?= "u-boot-nodtb-${MACHINE}.bin"
UBOOT_ITS_IMAGE ?= "u-boot-its-${MACHINE}-${PV}-${PR}"
UBOOT_ITS ?= "u-boot.its"
UBOOT_ITS_SYMLINK ?= "u-boot-its-${MACHINE}"
UBOOT_FITIMAGE_IMAGE ?= "u-boot-fitImage-${MACHINE}-${PV}-${PR}"
UBOOT_FITIMAGE_BINARY ?= "u-boot-fitImage"
UBOOT_FITIMAGE_SYMLINK ?= "u-boot-fitImage-${MACHINE}"
SPL_DIR ?= "spl"
SPL_DTB_IMAGE ?= "u-boot-spl-${MACHINE}-${PV}-${PR}.dtb"
SPL_DTB_BINARY ?= "u-boot-spl.dtb"
SPL_DTB_SIGNED ?= "${SPL_DTB_BINARY}-signed"
SPL_DTB_SYMLINK ?= "u-boot-spl-${MACHINE}.dtb"
SPL_NODTB_IMAGE ?= "u-boot-spl-nodtb-${MACHINE}-${PV}-${PR}.bin"
SPL_NODTB_BINARY ?= "u-boot-spl-nodtb.bin"
SPL_NODTB_SYMLINK ?= "u-boot-spl-nodtb-${MACHINE}.bin"
# U-Boot fitImage description
UBOOT_FIT_DESC ?= "U-Boot fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}"
# U-Boot fitImage Hash Algo
UBOOT_FIT_HASH_ALG ?= "sha256"
# U-Boot fitImage Signature Algo
UBOOT_FIT_SIGN_ALG ?= "rsa2048"
# Generate keys for signing U-Boot fitImage
UBOOT_FIT_GENERATE_KEYS ?= "0"
# Size of private keys in number of bits
UBOOT_FIT_SIGN_NUMBITS ?= "2048"
# args to openssl genrsa (Default is just the public exponent)
UBOOT_FIT_KEY_GENRSA_ARGS ?= "-F4"
# args to openssl req (Default is -batch for non interactive mode and
# -new for new certificate)
UBOOT_FIT_KEY_REQ_ARGS ?= "-batch -new"
# Standard format for public key certificate
UBOOT_FIT_KEY_SIGN_PKCS ?= "-x509"
# length of address in number of <u32> cells
# ex: 1 32bits address, 2 64bits address
UBOOT_FIT_ADDRESS_CELLS ?= "1"
# ARM Trusted Firmware(ATF) is a reference implementation of secure world
# software for Arm A-Profile architectures, (Armv8-A and Armv7-A), including
# an Exception Level 3 (EL3) Secure Monitor.
UBOOT_FIT_ARM_TRUSTED_FIRMWARE ?= "0"
UBOOT_FIT_ARM_TRUSTED_FIRMWARE_IMAGE ?= "bl31.bin"
# A Trusted Execution Environment(TEE) is an environment for executing code,
# in which those executing the code can have high levels of trust in the asset
# management of that surrounding environment.
UBOOT_FIT_TEE ?= "0"
UBOOT_FIT_TEE_IMAGE ?= "tee-raw.bin"
# User specific settings
UBOOT_FIT_USER_SETTINGS ?= ""
# Sets the firmware property to select the image to boot first.
# If not set, the first entry in "loadables" is used instead.
UBOOT_FIT_CONF_FIRMWARE ?= ""
# Unit name containing a list of users additional binaries to be loaded.
# It is a comma-separated list of strings.
UBOOT_FIT_CONF_USER_LOADABLES ?= ''
UBOOT_FIT_UBOOT_LOADADDRESS ?= "${UBOOT_LOADADDRESS}"
UBOOT_FIT_UBOOT_ENTRYPOINT ?= "${UBOOT_ENTRYPOINT}"
python() {
# We need u-boot-tools-native if we're creating a U-Boot fitImage
sign = d.getVar('UBOOT_SIGN_ENABLE') == '1'
if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' or sign:
d.appendVar('DEPENDS', " u-boot-tools-native dtc-native")
if d.getVar('FIT_GENERATE_KEYS') == '1' and sign:
d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' virtual/kernel:do_kernel_generate_rsa_keys')
}
concat_dtb() {
type="$1"
binary="$2"
if [ -e "${UBOOT_DTB_BINARY}" ]; then
# Signing individual images is not recommended as that
# makes fitImage susceptible to mix-and-match attack.
#
# OE FIT_SIGN_INDIVIDUAL is implemented in an unusual manner,
# where the resulting signed fitImage contains both signed
# images and signed configurations. This is redundant. In
# order to prevent mix-and-match attack, it is sufficient
# to sign configurations. The FIT_SIGN_INDIVIDUAL = "1"
# support is kept to avoid breakage of existing layers, but
# it is highly recommended to avoid FIT_SIGN_INDIVIDUAL = "1",
# i.e. set FIT_SIGN_INDIVIDUAL = "0" .
if [ "${FIT_SIGN_INDIVIDUAL}" = "1" ] ; then
# Sign dummy image images in order to
# add the image signing keys to our dtb
${UBOOT_MKIMAGE_SIGN} \
${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
-f auto \
-k "${UBOOT_SIGN_KEYDIR}" \
-o "${FIT_HASH_ALG},${FIT_SIGN_ALG}" \
-g "${UBOOT_SIGN_IMG_KEYNAME}" \
-K "${UBOOT_DTB_BINARY}" \
-d /dev/null \
-r ${B}/unused.itb \
${UBOOT_MKIMAGE_SIGN_ARGS}
fi
# Sign dummy image configurations in order to
# add the configuration signing keys to our dtb
${UBOOT_MKIMAGE_SIGN} \
${@'-D "${UBOOT_MKIMAGE_DTCOPTS}"' if len('${UBOOT_MKIMAGE_DTCOPTS}') else ''} \
-f auto-conf \
-k "${UBOOT_SIGN_KEYDIR}" \
-o "${FIT_HASH_ALG},${FIT_SIGN_ALG}" \
-g "${UBOOT_SIGN_KEYNAME}" \
-K "${UBOOT_DTB_BINARY}" \
-d /dev/null \
-r ${B}/unused.itb \
${UBOOT_MKIMAGE_SIGN_ARGS}
# Verify the dummy fitImage signature against u-boot.dtb
# augmented using public key material.
#
# This only works for FIT_SIGN_INDIVIDUAL = "0", because
# mkimage -f auto-conf does not support -F to extend the
# existing unused.itb , and instead rewrites unused.itb
# from scratch.
#
# Using two separate unused.itb for mkimage -f auto and
# mkimage -f auto-conf invocation above would not help, as
# the signature verification process below checks whether
# all keys inserted into u-boot.dtb /signature node pass
# the verification. Separate unused.itb would each miss one
# of the signatures.
#
# The FIT_SIGN_INDIVIDUAL = "1" support is kept to avoid
# breakage of existing layers, but it is highly recommended
# to not use FIT_SIGN_INDIVIDUAL = "1", i.e. set
# FIT_SIGN_INDIVIDUAL = "0" .
if [ "${FIT_SIGN_INDIVIDUAL}" != "1" ] ; then
${UBOOT_FIT_CHECK_SIGN} \
-k "${UBOOT_DTB_BINARY}" \
-f ${B}/unused.itb
fi
cp ${UBOOT_DTB_BINARY} ${UBOOT_DTB_SIGNED}
fi
# If we're not using a signed u-boot fit, concatenate SPL w/o DTB & U-Boot DTB
# with public key (otherwise U-Boot will be packaged by uboot_fitimage_assemble)
if [ "${SPL_SIGN_ENABLE}" != "1" ] ; then
if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \
[ -e "${UBOOT_DTB_BINARY}" ]; then
oe_runmake EXT_DTB="${UBOOT_DTB_SIGNED}" ${UBOOT_MAKE_TARGET}
if [ -n "${binary}" ]; then
cp ${binary} ${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
fi
elif [ -e "${UBOOT_NODTB_BINARY}" -a -e "${UBOOT_DTB_BINARY}" ]; then
if [ -n "${binary}" ]; then
cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} | tee ${binary} > \
${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX}
else
cat ${UBOOT_NODTB_BINARY} ${UBOOT_DTB_SIGNED} > ${UBOOT_BINARY}
fi
else
bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available."
fi
fi
}
deploy_dtb() {
type="$1"
if [ -n "${type}" ]; then
uboot_dtb_binary="u-boot-${type}-${PV}-${PR}.dtb"
uboot_nodtb_binary="u-boot-nodtb-${type}-${PV}-${PR}.bin"
else
uboot_dtb_binary="${UBOOT_DTB_IMAGE}"
uboot_nodtb_binary="${UBOOT_NODTB_IMAGE}"
fi
if [ -e "${UBOOT_DTB_SIGNED}" ]; then
install -Dm644 ${UBOOT_DTB_SIGNED} ${DEPLOYDIR}/${uboot_dtb_binary}
if [ -n "${type}" ]; then
ln -sf ${uboot_dtb_binary} ${DEPLOYDIR}/${UBOOT_DTB_IMAGE}
fi
fi
if [ -f "${UBOOT_NODTB_BINARY}" ]; then
install -Dm644 ${UBOOT_NODTB_BINARY} ${DEPLOYDIR}/${uboot_nodtb_binary}
if [ -n "${type}" ]; then
ln -sf ${uboot_nodtb_binary} ${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}
fi
fi
}
concat_spl_dtb() {
if [ -e "${SPL_DIR}/${SPL_NODTB_BINARY}" -a -e "${SPL_DIR}/${SPL_DTB_BINARY}" ] ; then
cat ${SPL_DIR}/${SPL_NODTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED} > "${SPL_BINARY}"
else
bbwarn "Failure while adding public key to spl binary. Verified U-Boot boot won't be available."
fi
}
deploy_spl_dtb() {
type="$1"
if [ -n "${type}" ]; then
spl_dtb_binary="u-boot-spl-${type}-${PV}-${PR}.dtb"
spl_nodtb_binary="u-boot-spl-nodtb-${type}-${PV}-${PR}.bin"
else
spl_dtb_binary="${SPL_DTB_IMAGE}"
spl_nodtb_binary="${SPL_NODTB_IMAGE}"
fi
if [ -e "${SPL_DIR}/${SPL_DTB_SIGNED}" ] ; then
install -Dm644 ${SPL_DIR}/${SPL_DTB_SIGNED} ${DEPLOYDIR}/${spl_dtb_binary}
if [ -n "${type}" ]; then
ln -sf ${spl_dtb_binary} ${DEPLOYDIR}/${SPL_DTB_IMAGE}
fi
fi
if [ -f "${SPL_DIR}/${SPL_NODTB_BINARY}" ] ; then
install -Dm644 ${SPL_DIR}/${SPL_NODTB_BINARY} ${DEPLOYDIR}/${spl_nodtb_binary}
if [ -n "${type}" ]; then
ln -sf ${spl_nodtb_binary} ${DEPLOYDIR}/${SPL_NODTB_IMAGE}
fi
fi
# For backwards compatibility...
install -Dm644 ${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE}
}
do_uboot_generate_rsa_keys() {
if [ "${SPL_SIGN_ENABLE}" = "0" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then
bbwarn "UBOOT_FIT_GENERATE_KEYS is set to 1 eventhough SPL_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used."
fi
if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then
# Generate keys only if they don't already exist
if [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key ] || \
[ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt ]; then
# make directory if it does not already exist
mkdir -p "${SPL_SIGN_KEYDIR}"
echo "Generating RSA private key for signing U-Boot fitImage"
openssl genrsa ${UBOOT_FIT_KEY_GENRSA_ARGS} -out \
"${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \
"${UBOOT_FIT_SIGN_NUMBITS}"
echo "Generating certificate for signing U-Boot fitImage"
openssl req ${UBOOT_FIT_KEY_REQ_ARGS} "${UBOOT_FIT_KEY_SIGN_PKCS}" \
-key "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \
-out "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt
fi
fi
}
addtask uboot_generate_rsa_keys before do_uboot_assemble_fitimage after do_compile
# Create a ITS file for the atf
uboot_fitimage_atf() {
cat << EOF >> ${UBOOT_ITS}
atf {
description = "ARM Trusted Firmware";
data = /incbin/("${UBOOT_FIT_ARM_TRUSTED_FIRMWARE_IMAGE}");
type = "firmware";
arch = "${UBOOT_ARCH}";
os = "arm-trusted-firmware";
load = <${UBOOT_FIT_ARM_TRUSTED_FIRMWARE_LOADADDRESS}>;
entry = <${UBOOT_FIT_ARM_TRUSTED_FIRMWARE_ENTRYPOINT}>;
compression = "none";
EOF
if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
cat << EOF >> ${UBOOT_ITS}
signature {
algo = "${UBOOT_FIT_HASH_ALG},${UBOOT_FIT_SIGN_ALG}";
key-name-hint = "${SPL_SIGN_KEYNAME}";
};
EOF
fi
cat << EOF >> ${UBOOT_ITS}
};
EOF
}
# Create a ITS file for the tee
uboot_fitimage_tee() {
cat << EOF >> ${UBOOT_ITS}
tee {
description = "Trusted Execution Environment";
data = /incbin/("${UBOOT_FIT_TEE_IMAGE}");
type = "tee";
arch = "${UBOOT_ARCH}";
os = "tee";
load = <${UBOOT_FIT_TEE_LOADADDRESS}>;
entry = <${UBOOT_FIT_TEE_ENTRYPOINT}>;
compression = "none";
EOF
if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
cat << EOF >> ${UBOOT_ITS}
signature {
algo = "${UBOOT_FIT_HASH_ALG},${UBOOT_FIT_SIGN_ALG}";
key-name-hint = "${SPL_SIGN_KEYNAME}";
};
EOF
fi
cat << EOF >> ${UBOOT_ITS}
};
EOF
}
# Create a ITS file for the U-boot FIT, for use when
# we want to sign it so that the SPL can verify it
uboot_fitimage_assemble() {
conf_loadables="\"uboot\""
conf_firmware=""
rm -f ${UBOOT_ITS} ${UBOOT_FITIMAGE_BINARY}
# First we create the ITS script
cat << EOF >> ${UBOOT_ITS}
/dts-v1/;
/ {
description = "${UBOOT_FIT_DESC}";
#address-cells = <${UBOOT_FIT_ADDRESS_CELLS}>;
images {
uboot {
description = "U-Boot image";
data = /incbin/("${UBOOT_NODTB_BINARY}");
type = "standalone";
os = "u-boot";
arch = "${UBOOT_ARCH}";
compression = "none";
load = <${UBOOT_FIT_UBOOT_LOADADDRESS}>;
entry = <${UBOOT_FIT_UBOOT_ENTRYPOINT}>;
EOF
if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
cat << EOF >> ${UBOOT_ITS}
signature {
algo = "${UBOOT_FIT_HASH_ALG},${UBOOT_FIT_SIGN_ALG}";
key-name-hint = "${SPL_SIGN_KEYNAME}";
};
EOF
fi
cat << EOF >> ${UBOOT_ITS}
};
fdt {
description = "U-Boot FDT";
data = /incbin/("${UBOOT_DTB_BINARY}");
type = "flat_dt";
arch = "${UBOOT_ARCH}";
compression = "none";
EOF
if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
cat << EOF >> ${UBOOT_ITS}
signature {
algo = "${UBOOT_FIT_HASH_ALG},${UBOOT_FIT_SIGN_ALG}";
key-name-hint = "${SPL_SIGN_KEYNAME}";
};
EOF
fi
cat << EOF >> ${UBOOT_ITS}
};
EOF
if [ "${UBOOT_FIT_TEE}" = "1" ] ; then
conf_loadables="\"tee\", ${conf_loadables}"
uboot_fitimage_tee
fi
if [ "${UBOOT_FIT_ARM_TRUSTED_FIRMWARE}" = "1" ] ; then
conf_loadables="\"atf\", ${conf_loadables}"
uboot_fitimage_atf
fi
if [ -n "${UBOOT_FIT_USER_SETTINGS}" ] ; then
printf "%b" "${UBOOT_FIT_USER_SETTINGS}" >> ${UBOOT_ITS}
fi
if [ -n "${UBOOT_FIT_CONF_USER_LOADABLES}" ] ; then
conf_loadables="${conf_loadables}${UBOOT_FIT_CONF_USER_LOADABLES}"
fi
if [ -n "${UBOOT_FIT_CONF_FIRMWARE}" ] ; then
conf_firmware="firmware = \"${UBOOT_FIT_CONF_FIRMWARE}\";"
fi
cat << EOF >> ${UBOOT_ITS}
};
configurations {
default = "conf";
conf {
description = "Boot with signed U-Boot FIT";
${conf_firmware}
loadables = ${conf_loadables};
fdt = "fdt";
};
};
};
EOF
#
# Assemble the U-boot FIT image
#
${UBOOT_MKIMAGE} \
${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \
-f ${UBOOT_ITS} \
${UBOOT_FITIMAGE_BINARY}
if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then
#
# Sign the U-boot FIT image and add public key to SPL dtb
#
${UBOOT_MKIMAGE_SIGN} \
${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \
-F -k "${SPL_SIGN_KEYDIR}" \
-K "${SPL_DIR}/${SPL_DTB_BINARY}" \
-r ${UBOOT_FITIMAGE_BINARY} \
${SPL_MKIMAGE_SIGN_ARGS}
#
# Verify the U-boot FIT image and SPL dtb
#
${UBOOT_FIT_CHECK_SIGN} \
-k "${SPL_DIR}/${SPL_DTB_BINARY}" \
-f ${UBOOT_FITIMAGE_BINARY}
fi
if [ -e "${SPL_DIR}/${SPL_DTB_BINARY}" ]; then
cp ${SPL_DIR}/${SPL_DTB_BINARY} ${SPL_DIR}/${SPL_DTB_SIGNED}
fi
}
uboot_assemble_fitimage_helper() {
type="$1"
binary="$2"
if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then
concat_dtb "$type" "$binary"
fi
if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then
uboot_fitimage_assemble
fi
if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then
concat_spl_dtb
fi
}
do_uboot_assemble_fitimage() {
if [ -n "${UBOOT_CONFIG}" ]; then
unset i
for config in ${UBOOT_MACHINE}; do
unset j k
i=$(expr $i + 1);
for type in ${UBOOT_CONFIG}; do
j=$(expr $j + 1);
if [ $j -eq $i ]; then
break;
fi
done
for binary in ${UBOOT_BINARIES}; do
k=$(expr $k + 1);
if [ $k -eq $i ]; then
break;
fi
done
cd ${B}/${config}
uboot_assemble_fitimage_helper ${type} ${binary}
done
else
cd ${B}
uboot_assemble_fitimage_helper "" ${UBOOT_BINARY}
fi
}
addtask uboot_assemble_fitimage before do_install do_deploy after do_compile
deploy_helper() {
type="$1"
if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_SIGNED}" ] ; then
deploy_dtb $type
fi
if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then
if [ -n "${type}" ]; then
uboot_its_image="u-boot-its-${type}-${PV}-${PR}"
uboot_fitimage_image="u-boot-fitImage-${type}-${PV}-${PR}"
else
uboot_its_image="${UBOOT_ITS_IMAGE}"
uboot_fitimage_image="${UBOOT_FITIMAGE_IMAGE}"
fi
install -Dm644 ${UBOOT_FITIMAGE_BINARY} ${DEPLOYDIR}/$uboot_fitimage_image
install -Dm644 ${UBOOT_ITS} ${DEPLOYDIR}/$uboot_its_image
if [ -n "${type}" ]; then
ln -sf $uboot_its_image ${DEPLOYDIR}/${UBOOT_ITS_IMAGE}
ln -sf $uboot_fitimage_image ${DEPLOYDIR}/${UBOOT_FITIMAGE_IMAGE}
fi
fi
if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_SIGNED}" ] ; then
deploy_spl_dtb $type
fi
}
do_deploy:prepend() {
if [ -n "${UBOOT_CONFIG}" ]; then
unset i j k
for config in ${UBOOT_MACHINE}; do
i=$(expr $i + 1);
for type in ${UBOOT_CONFIG}; do
j=$(expr $j + 1);
if [ $j -eq $i ]; then
cd ${B}/${config}
deploy_helper ${type}
fi
done
unset j
done
unset i
else
cd ${B}
deploy_helper ""
fi
if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then
ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY}
ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK}
ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK}
ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_BINARY}
fi
if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then
ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS}
ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS_SYMLINK}
ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_BINARY}
ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_SYMLINK}
fi
if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then
ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_SYMLINK}
ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_BINARY}
ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_SYMLINK}
ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_BINARY}
fi
}
do_deploy:append() {
# If we're creating a u-boot fitImage, point u-boot.bin
# symlink since it might get used by image recipes
if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then
ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_BINARY}
ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_SYMLINK}
fi
}