[meta-xilinx] [meta-xilinx-tools][RFC][patch 3/3] xilinx-bootbin: add multiple images support
Jean-Francois Dagenais
jeff.dagenais at gmail.com
Tue Jul 9 08:44:40 PDT 2019
In certain scenarios, it might be desirable to produce multiple boot.bin
files. For example, a boot.bin which bundles kernel and dts, and another
which loads u-boot.
The default behaviour is kept and the produced image, named
boot-default.bin, will get the symlink named just "boot.bin".
Signed-off-by: Jean-Francois Dagenais <jeff.dagenais at gmail.com>
---
recipes-bsp/bootbin/xilinx-bootbin_1.0.bb | 78 ++++++++++++++++++++++---------
1 file changed, 55 insertions(+), 23 deletions(-)
diff --git a/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb b/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
index 41e5f1e..f4dca7f 100644
--- a/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
+++ b/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
@@ -5,12 +5,16 @@ the image."
LICENSE = "BSD"
+PR = "r2"
+
include machine-xilinx-${SOC_FAMILY}.inc
inherit deploy
PROVIDES = "virtual/boot-bin"
+B = "${WORKDIR}/build"
+
do_configure[depends] += "${@get_bootbin_depends(d)}"
PACKAGE_ARCH = "${MACHINE_ARCH}"
@@ -21,15 +25,24 @@ BOOTGEN_EXTRA_ARGS ?= ""
BIF_PARTITIONS_zynqmp = "${@'fsbl pmu atf u-boot' if d.getVar('FPGA_MNGR_RECONFIG_ENABLE') == '1' else 'fsbl bitstream pmu atf u-boot'}"
+XILINX_BOOTBIN_IMAGES ??= "default"
+
inherit nopackages
deltask do_fetch
deltask do_patch
deltask do_unpack
deltask do_install
+python () {
+ if not d.getVar("BIF_PARTITIONS_default"):
+ d.setVar("BIF_PARTITIONS_default", d.getVar("BIF_PARTITIONS"))
+}
+
def get_bootbin_depends(d):
bootbindeps = ""
- bifpartitions = (d.getVar("BIF_PARTITIONS", True) or "").split()
+ bifpartitions = set()
+ for image in d.getVar("XILINX_BOOTBIN_IMAGES").split():
+ bifpartitions |= set((d.getVar("BIF_PARTITIONS_%s" % image) or "").split())
attrdepends = d.getVarFlags("BIF_PARTITION_DEPENDS") or {}
for partition in bifpartitions:
if partition in attrdepends:
@@ -37,7 +50,7 @@ def get_bootbin_depends(d):
return bootbindeps
-def create_bif(config, attrflags, attrimage, common_attr, biffd, d):
+def create_bif_partitions(config, attrflags, attrimage, common_attr, biffd, d):
import re, os
for cfg in config:
if cfg not in attrflags and common_attr:
@@ -64,9 +77,7 @@ def create_bif(config, attrflags, attrimage, common_attr, biffd, d):
return
-python do_configure() {
-
- fp = d.getVar("BIF_FILE_PATH", True)
+def create_bif_file(d, fp, bifpartitions):
biffd = open(fp, 'w')
biffd.write("the_ROM_image:\n")
biffd.write("{\n")
@@ -74,32 +85,47 @@ python do_configure() {
bifattr = (d.getVar("BIF_COMMON_ATTR", True) or "").split()
if bifattr:
attrflags = d.getVarFlags("BIF_COMMON_ATTR") or {}
- create_bif(bifattr, attrflags,'', 1, biffd, d)
+ create_bif_partitions(bifattr, attrflags,'', 1, biffd, d)
- bifpartition = (d.getVar("BIF_PARTITIONS", True) or "").split()
- if bifpartition:
- attrflags = d.getVarFlags("BIF_PARTITION_ATTR") or {}
- attrimage = d.getVarFlags("BIF_PARTITION_IMAGE") or {}
- create_bif(bifpartition, attrflags, attrimage, 0, biffd, d)
+ attrflags = d.getVarFlags("BIF_PARTITION_ATTR") or {}
+ attrimage = d.getVarFlags("BIF_PARTITION_IMAGE") or {}
+ create_bif_partitions(bifpartitions, attrflags, attrimage, 0, biffd, d)
biffd.write("}")
biffd.close()
-}
-do_configure[vardeps] += "BIF_PARTITIONS BIF_PARTITION_ATTR BIF_PARTITION_IMAGE BIF_COMMON_ATTR"
+python do_configure() {
+ for image in d.getVar("XILINX_BOOTBIN_IMAGES").split():
+ bifpartitions = d.getVar("BIF_PARTITIONS_" + image)
+ if not bifpartitions:
+ continue
+ create_bif_file(d, "bootgen-%s.bif" % image, bifpartitions.split())
+}
+do_configure[vardeps] += "\
+ XILINX_BOOTBIN_IMAGES \
+ BIF_PARTITIONS \
+ BIF_PARTITION_ATTR \
+ BIF_PARTITION_IMAGE \
+ BIF_COMMON_ATTR \
+"
do_compile() {
- cd ${WORKDIR}
- rm -f ${B}/BOOT.bin
- bootgen -image ${BIF_FILE_PATH} -arch ${SOC_FAMILY} ${BOOTGEN_EXTRA_ARGS} -w -o ${B}/BOOT.bin
- if [ ! -e ${B}/BOOT.bin ]; then
- bbfatal "bootgen failed. See log"
- fi
+ pwd
+ ls -la
+ rm -f boot*.bin BOOT.bin
+ for image in ${XILINX_BOOTBIN_IMAGES}
+ do
+ bootbin=boot-${image}.bin
+ bootgen -image bootgen-${image}.bif -arch ${SOC_FAMILY} ${BOOTGEN_EXTRA_ARGS} -w -o boot-${image}.bin
+ if [ ! -e ${bootbin} ]; then
+ bbfatal "bootgen ${bootbin} failed. See log"
+ fi
+ done
}
do_compile_append_versal() {
dd if=/dev/zero bs=256M count=1 > ${B}/QEMU_qspi.bin
- dd if=${B}/BOOT.bin of=${B}/QEMU_qspi.bin bs=1 seek=0 conv=notrunc
+ dd if=${B}/boot-default.bin of=${B}/QEMU_qspi.bin bs=1 seek=0 conv=notrunc
dd if=${DEPLOY_DIR_IMAGE}/boot.scr of=${B}/QEMU_qspi.bin bs=1 seek=66584576 conv=notrunc
}
@@ -111,9 +137,15 @@ BOOTBIN_BASE_NAME[vardepsexclude] = "DATETIME"
do_deploy() {
install -d ${DEPLOYDIR}
- install -m 0644 ${B}/BOOT.bin ${DEPLOYDIR}/${BOOTBIN_BASE_NAME}.bin
- ln -sf ${BOOTBIN_BASE_NAME}.bin ${DEPLOYDIR}/BOOT-${MACHINE}.bin
- ln -sf ${BOOTBIN_BASE_NAME}.bin ${DEPLOYDIR}/boot.bin
+
+ for image in ${XILINX_BOOTBIN_IMAGES}
+ do
+ bootbin=boot-${image}.bin
+ install -m 0644 ${B}/${bootbin} ${DEPLOYDIR}/${BOOTBIN_BASE_NAME}-${image}.bin
+ ln -sf ${BOOTBIN_BASE_NAME}-${image}.bin ${DEPLOYDIR}/BOOT-${MACHINE}-${image}.bin
+ done
+
+ ln -sf ${BOOTBIN_BASE_NAME}-default.bin ${DEPLOYDIR}/boot.bin
}
do_deploy_append_versal () {
--
2.11.0
More information about the meta-xilinx
mailing list