mirror of
git://git.yoctoproject.org/meta-freescale.git
synced 2025-10-22 23:02:20 +02:00
classes: imx-boot-container: add class to provide boot container
Add a class which extends the u-boot build mechanism with providing a separate "flash.bin" binary that replaces the imx-boot in the WIC file. This class is inherited in u-boot-fslc recipe and extends it only to those machines that have a corresponding "imx-boot-container" machine override set. Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
This commit is contained in:
parent
badc0f6a1b
commit
2bc347d473
107
classes/imx-boot-container.bbclass
Normal file
107
classes/imx-boot-container.bbclass
Normal file
|
@ -0,0 +1,107 @@
|
|||
#
|
||||
# This class provides a support to build the boot container for
|
||||
# i.MX8M derivatives
|
||||
#
|
||||
# imx8m machines require a separate build target to be executed
|
||||
# due to the fact that final boot image is constructed using flash.bin
|
||||
# taget. It produces a boot binary image, which is constructed from
|
||||
# various binary components (u-boot with separate dtb, atf, DDR
|
||||
# firmware and optional op-tee) into a single image using FIT format.
|
||||
# This flash.bin file is then parsed and loaded either via
|
||||
# SPL directly (imx8mm), or using bootrom code (imx8mn and imx8mp).
|
||||
#
|
||||
# In order to use flash.bin binary boot image, it is required that
|
||||
# the U-Boot build is to be invoked for an additional build target.
|
||||
# This class extendes the U-Boot build targets with the "flash.bin",
|
||||
# which effectively serves as a boot container. It replaces the boot
|
||||
# container `imx-boot` provided by NXP.
|
||||
#
|
||||
# Class inheritance is performed in u-boot-fslc recipe, and is controlled
|
||||
# by variable UBOOT_PROVIDES_BOOT_CONTAINER, which is defined in the
|
||||
# base machine include file (imx-base.inc), and is set to "1" when the
|
||||
# 'imx-boot-container' is present in MACHINEOVERRIDES.
|
||||
|
||||
# Extend the UBOOT_MAKE_TARGET with additional target for U-Boot build
|
||||
# system to produce the boot container
|
||||
UBOOT_MAKE_TARGET += "flash.bin"
|
||||
|
||||
# Define ATF binary file to be deployed to the U-Boot build folder
|
||||
ATF_MACHINE_NAME = "bl31-${ATF_PLATFORM}.bin"
|
||||
ATF_MACHINE_NAME_append = "${@bb.utils.contains('MACHINE_FEATURES', 'optee', '-optee', '', d)}"
|
||||
|
||||
# This package aggregates output deployed by other packages, so set the
|
||||
# appropriate dependencies for populate binaries task
|
||||
do_resolve_and_populate_binaries[depends] += " \
|
||||
${@' '.join('%s:do_deploy' % r for r in '${IMX_EXTRA_FIRMWARE}'.split() )} \
|
||||
imx-atf:do_deploy \
|
||||
${@bb.utils.contains('MACHINE_FEATURES', 'optee', 'optee-os:do_deploy', '', d)} \
|
||||
"
|
||||
|
||||
# Append make flags to include ATF load address
|
||||
EXTRA_OEMAKE += "ATF_LOAD_ADDR=${ATF_LOAD_ADDR}"
|
||||
|
||||
# Define an additional task that collects binary output from dependent packages
|
||||
# and deploys them into the U-Boot build folder
|
||||
do_resolve_and_populate_binaries() {
|
||||
if [ ! -n "${ATF_LOAD_ADDR}" ]; then
|
||||
bberror "ATF_LOAD_ADDR is undefined, result binary would be unusable!"
|
||||
fi
|
||||
|
||||
if [ -n "${UBOOT_CONFIG}" ]; then
|
||||
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
|
||||
for ddr_firmware in ${DDR_FIRMWARE_NAME}; do
|
||||
# Sanitize the FW name as U-Boot expects it to be without version
|
||||
if [ -n "${DDR_FIRMWARE_VERSION}" ]; then
|
||||
ddr_firmware_name=$(echo $ddr_firmware | sed s/_${DDR_FIRMWARE_VERSION}//)
|
||||
else
|
||||
ddr_firmware_name="$ddr_firmware"
|
||||
fi
|
||||
bbnote "Copy ddr_firmware: ${ddr_firmware} from ${DEPLOY_DIR_IMAGE} -> ${B}/${config}/${ddr_firmware_name}"
|
||||
cp ${DEPLOY_DIR_IMAGE}/${ddr_firmware} ${B}/${config}/${ddr_firmware_name}
|
||||
done
|
||||
if [ -n "${ATF_MACHINE_NAME}" ]; then
|
||||
cp ${DEPLOY_DIR_IMAGE}/${BOOT_TOOLS}/${ATF_MACHINE_NAME} ${B}/${config}/bl31.bin
|
||||
else
|
||||
bberror "ATF binary is undefined, result binary would be unusable!"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
unset j
|
||||
done
|
||||
unset i
|
||||
fi
|
||||
}
|
||||
addtask do_resolve_and_populate_binaries before do_compile after do_configure
|
||||
|
||||
# Append the u-boot do_deploy task to deploy also the result flash.bin
|
||||
# boot container as a replacement for the one provided by NXP BSP.
|
||||
#
|
||||
# Deploy task renames the target file from flash.bin to imx-boot to match
|
||||
# the name WKS file requires.
|
||||
#
|
||||
# This effectively would allow the usage of the same WKS file for those
|
||||
# derivatives that are using the boot container from U-Boot and those
|
||||
# that are not yet have support for it enabled.
|
||||
do_deploy_append() {
|
||||
# Deploy the resulted flash.bin for WIC to pick it up
|
||||
if [ -n "${UBOOT_CONFIG}" ]; then
|
||||
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
|
||||
install -m 0644 ${B}/${config}/flash.bin ${DEPLOYDIR}/flash.bin-${MACHINE}-${UBOOT_CONFIG}
|
||||
ln -sf flash.bin-${MACHINE}-${UBOOT_CONFIG} imx-boot
|
||||
ln -sf flash.bin-${MACHINE}-${UBOOT_CONFIG} flash.bin
|
||||
fi
|
||||
done
|
||||
unset j
|
||||
done
|
||||
unset i
|
||||
fi
|
||||
}
|
Loading…
Reference in New Issue
Block a user