[meta-xilinx] [meta-xilinx-tools][PATCH] xilinx-bootbin: Convert to recipe instead of bbclass

Jean-Francois Dagenais jeff.dagenais at gmail.com
Thu Jan 4 06:21:51 PST 2018


Hi Manju!

It's great to hear back about this topic. FYI I have been running my version of the patch
since the day I sent it without a hitch.

See my comments below...

> On Jan 3, 2018, at 19:15, Manjukumar Matha <manjukumar.harthikote-matha at xilinx.com> wrote:
> 
> From: Cyril Chemparathy <cyril.chemparathy at xilinx.com>
> 
> boot.bin should be deployed either using SPL methodology or using
> bootgen. Change the bbclass to recipe so that it can be used as recipe
> with a provider setting.
> 
> This patch is based of the inital patch sent to mailing list by
> Jean-Francois Dagenais
> 
> https://lists.yoctoproject.org/pipermail/meta-xilinx/2017-July/003029.html
> 
> Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha at xilinx.com>
> ---
> classes/xilinx-bootbin.bbclass                 |  83 --------------------
> conf/machine/include/machine-xilinx-zynq.inc   |  19 -----
> conf/machine/include/machine-xilinx-zynqmp.inc |  39 ----------
> recipes-bsp/bootbin/machine-xilinx-zynq.inc    |  17 ++++
> recipes-bsp/bootbin/machine-xilinx-zynqmp.inc  |  35 +++++++++
> recipes-bsp/bootbin/xilinx-bootbin_1.0.bb      | 103 +++++++++++++++++++++++++
> 6 files changed, 155 insertions(+), 141 deletions(-)
> delete mode 100644 classes/xilinx-bootbin.bbclass
> delete mode 100644 conf/machine/include/machine-xilinx-zynq.inc
> delete mode 100644 conf/machine/include/machine-xilinx-zynqmp.inc
> create mode 100644 recipes-bsp/bootbin/machine-xilinx-zynq.inc
> create mode 100644 recipes-bsp/bootbin/machine-xilinx-zynqmp.inc
> create mode 100644 recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
> 
> diff --git a/classes/xilinx-bootbin.bbclass b/classes/xilinx-bootbin.bbclass
> deleted file mode 100644
> index 31a38a6..0000000
> --- a/classes/xilinx-bootbin.bbclass
> +++ /dev/null
> @@ -1,83 +0,0 @@
> -inherit xsct-tc
> -
> -BIF_COMMON_ATTR ?= ''
> -BIF_PARTITION_ATTR ?= ''
> -BIF_PARTITION_IMAGE ?= ''
> -BIF_PARTITION_DEPENDS ?= ''
> -BIF_FILE_PATH = "${WORKDIR}/bootgen.bif"
> -
> -def create_bif(config, attrflags, attrimage, common_attr, biffd, d):
> -    import re, os
> -    for cfg in config:
> -        if cfg not in attrflags and common_attr:
> -            error_msg = "%s: invalid ATTRIBUTE" % (cfg)
> -            bb.error("BIF attribute Error: %s " % (error_msg))
> -        else:
> -            if common_attr:
> -                cfgval = attrflags[cfg].split(',')
> -                cfgstr = "\t [%s] %s\n" % (cfg,', '.join(cfgval))
> -            else:
> -                if cfg not in attrimage:
> -                    error_msg = "%s: invalid or missing elf or image" % (cfg)
> -                    bb.error("BIF atrribute Error: %s " % (error_msg))
> -                imagestr = d.expand(attrimage[cfg])
> -                if os.stat(imagestr).st_size == 0:
> -                    bb.warn("Empty file %s, excluding from bif file" %(imagestr))
> -                    continue
> -                if cfg in attrflags:
> -                    cfgval = attrflags[cfg].split(',')
> -                    cfgstr = "\t [%s] %s\n" % (', '.join(cfgval), imagestr)
> -                else:
> -                    cfgstr = "\t %s\n" % (imagestr)
> -            biffd.write(cfgstr)
> -
> -    return
> -
> -python do_create_bif() {
> -
> -    fp = d.getVar("BIF_FILE_PATH", True)
> -    biffd = open(fp, 'w')
> -    biffd.write("the_ROM_image:\n")
> -    biffd.write("{\n")
> -
> -    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)
> -
> -    bifpartition = (d.getVar("BIF_PARTITION_ATTR", 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)
> -
> -    biffd.write("}")
> -    biffd.close()
> -}
> -addtask do_create_bif before do_xilinx_bootbin
> -
> -do_create_bif[vardeps] += "BIF_PARTITION_ATTR BIF_PARTITION_IMAGE BIF_COMMON_ATTR"
> -do_create_bif[depends] += "${@get_bootbin_depends(d)}"
> -
> -def get_bootbin_depends(d):
> -    bootbindeps = ""
> -    bifpartition = (d.getVar("BIF_PARTITION_ATTR", True) or "").split()
> -    attrdepends = d.getVarFlags("BIF_PARTITION_DEPENDS") or {}
> -    for cfg in bifpartition:
> -        if cfg in attrdepends:
> -            bootbindeps = bootbindeps + " " + attrdepends[cfg] + ":do_deploy"
> -
> -    return bootbindeps
> -
> -do_xilinx_bootbin[depends] += "${@get_bootbin_depends(d)}"
> -
> -do_xilinx_bootbin () {
> -    cd ${WORKDIR}
> -    rm -f BOOT.bin
> -    bootgen -image ${BIF_FILE_PATH} -arch ${KMACHINE} -w -o BOOT.bin
> -    if [ ! -e BOOT.bin ]; then
> -        bbfatal "bootgen failed. See log"
> -    fi
> -    install -m 0644 BOOT.bin  ${DEPLOY_DIR_IMAGE}/BOOT.bin
> -}
> -addtask do_xilinx_bootbin before do_image
> diff --git a/conf/machine/include/machine-xilinx-zynq.inc b/conf/machine/include/machine-xilinx-zynq.inc
> deleted file mode 100644
> index 1955748..0000000
> --- a/conf/machine/include/machine-xilinx-zynq.inc
> +++ /dev/null
> @@ -1,19 +0,0 @@
> -IMAGE_CLASSES_append ?= " xilinx-bootbin"
> -
> -#specify BIF partition attributes required for BOOT.bin
> -BIF_PARTITION_ATTR ?= "fsbl bitstream u-boot"
> -
> -#specify BIF partition attributes for FSBL
> -#bootloader is FSBL. Location where FSBL binary is present and dependency to build FSBL
> -BIF_PARTITION_ATTR[fsbl] ?= "bootloader"
> -BIF_PARTITION_IMAGE[fsbl] ?= "${DEPLOY_DIR_IMAGE}/fsbl-${MACHINE}.elf"
> -BIF_PARTITION_DEPENDS[fsbl] ?= "virtual/fsbl"
> -
> -#specify BIF partition attributes for u-boot
> -#Location where u-boot binary is present
> -BIF_PARTITION_IMAGE[u-boot] ?= "${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.elf"
> -BIF_PARTITION_DEPENDS[u-boot] ?= "virtual/bootloader"
> -
> -# enable bitstream-Note this is not enabled by default (missing in BIF_PARTITION_ATTR)
> -BIF_PARTITION_IMAGE[bitstream] ?= "${DEPLOY_DIR_IMAGE}/download-${MACHINE}.bit"
> -BIF_PARTITION_DEPENDS[bitstream] ?= "virtual/bitstream"
> diff --git a/conf/machine/include/machine-xilinx-zynqmp.inc b/conf/machine/include/machine-xilinx-zynqmp.inc
> deleted file mode 100644
> index c620813..0000000
> --- a/conf/machine/include/machine-xilinx-zynqmp.inc
> +++ /dev/null
> @@ -1,39 +0,0 @@
> -# add Boot.bin dependency
> -IMAGE_CLASSES_append ?= " xilinx-bootbin"
> -
> -# specify BIF common attribute for FSBL
> -BIF_COMMON_ATTR ?= "fsbl_config"
> -BIF_COMMON_ATTR[fsbl_config] ?= "a53_x64"
> -
> -
> -# specify BIF partition attributes required for BOOT.bin
> -BIF_PARTITION_ATTR ?= "fsbl bitstream pmu atf u-boot"
> -
> -# specify BIF partition attributes for FSBL
> -# bootloader is FSBL. Location where FSBL binary is present and dependency to build FSBL
> -BIF_PARTITION_ATTR[fsbl] ?= "bootloader"
> -BIF_PARTITION_IMAGE[fsbl] ?= "${DEPLOY_DIR_IMAGE}/fsbl-${MACHINE}.elf"
> -BIF_PARTITION_DEPENDS[fsbl] ?= "virtual/fsbl"
> -
> -# specify BIF partition attributes for PMU Firmware
> -# destination cpu for PMU. Location where PMU binary is present and dependency to build PMU Firmware
> -BIF_PARTITION_ATTR[pmu] ?= "destination_cpu=pmu"
> -BIF_PARTITION_IMAGE[pmu] ?= "${DEPLOY_DIR_IMAGE}/pmu-firmware-${MACHINE}.elf"
> -BIF_PARTITION_DEPENDS[pmu] ?= "virtual/pmufw"
> -
> -# specify BIF partition attributes for ATF
> -# destination cpu for ATF, security levels. Location where ATF binary is present (dependency is not required as ATF is always built for ZU+, see zcu102-zynqmp.conf)
> -BIF_PARTITION_ATTR[atf] ?= "destination_cpu=a53-0,exception_level=el-3,trustzone"
> -BIF_PARTITION_IMAGE[atf] ?= "${DEPLOY_DIR_IMAGE}/arm-trusted-firmware.elf"
> -BIF_PARTITION_DEPENDS[atf] ?= "arm-trusted-firmware"
> -
> -# specify BIF partition attributes for u-boot
> -# destination cpu for u-boot, security levels. Location where u-boot binary is present (dependency is not required as u-boot is always built for ZU+, see zcu102-zynqmp.conf)
> -BIF_PARTITION_ATTR[u-boot] ?= "destination_cpu=a53-0,exception_level=el-2"
> -BIF_PARTITION_IMAGE[u-boot] ?= "${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.elf"
> -BIF_PARTITION_DEPENDS[u-boot] ?= "virtual/bootloader"
> -
> -# enable bitstream-Note this is not enabled by default (missing in BIF_PARTITION_ATTR)
> -BIF_PARTITION_ATTR[bitstream] ?= "destination_device=pl"
> -BIF_PARTITION_IMAGE[bitstream] ?= "${DEPLOY_DIR_IMAGE}/download-${MACHINE}.bit"
> -BIF_PARTITION_DEPENDS[bitstream] ?= "virtual/bitstream"
> diff --git a/recipes-bsp/bootbin/machine-xilinx-zynq.inc b/recipes-bsp/bootbin/machine-xilinx-zynq.inc
> new file mode 100644
> index 0000000..aa537d6
> --- /dev/null
> +++ b/recipes-bsp/bootbin/machine-xilinx-zynq.inc
> @@ -0,0 +1,17 @@
> +#specify BIF partition attributes required for BOOT.bin
> +BIF_PARTITION_ATTR ?= "fsbl bitstream u-boot"
> +
> +#specify BIF partition attributes for FSBL
> +#bootloader is FSBL. Location where FSBL binary is present and dependency to build FSBL
> +BIF_PARTITION_ATTR[fsbl] ?= "bootloader"
> +BIF_PARTITION_IMAGE[fsbl] ?= "${DEPLOY_DIR_IMAGE}/fsbl-${MACHINE}.elf"
> +BIF_PARTITION_DEPENDS[fsbl] ?= "virtual/fsbl"
> +
> +#specify BIF partition attributes for u-boot
> +#Location where u-boot binary is present
> +BIF_PARTITION_IMAGE[u-boot] ?= "${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.elf"
> +BIF_PARTITION_DEPENDS[u-boot] ?= "virtual/bootloader"
> +
> +# enable bitstream-Note this is not enabled by default (missing in BIF_PARTITION_ATTR)
> +BIF_PARTITION_IMAGE[bitstream] ?= "${DEPLOY_DIR_IMAGE}/download-${MACHINE}.bit"
> +BIF_PARTITION_DEPENDS[bitstream] ?= "virtual/bitstream"
> diff --git a/recipes-bsp/bootbin/machine-xilinx-zynqmp.inc b/recipes-bsp/bootbin/machine-xilinx-zynqmp.inc
> new file mode 100644
> index 0000000..7ee4cc1
> --- /dev/null
> +++ b/recipes-bsp/bootbin/machine-xilinx-zynqmp.inc
> @@ -0,0 +1,35 @@
> +# specify BIF common attribute for FSBL
> +BIF_COMMON_ATTR ?= "fsbl_config"
> +BIF_COMMON_ATTR[fsbl_config] ?= "a53_x64"
> +
> +# specify BIF partition attributes required for BOOT.bin
> +BIF_PARTITION_ATTR ?= "fsbl bitstream pmu atf u-boot"
> +
> +# specify BIF partition attributes for FSBL
> +# bootloader is FSBL. Location where FSBL binary is present and dependency to build FSBL
> +BIF_PARTITION_ATTR[fsbl] ?= "bootloader"
> +BIF_PARTITION_IMAGE[fsbl] ?= "${DEPLOY_DIR_IMAGE}/fsbl-${MACHINE}.elf"
> +BIF_PARTITION_DEPENDS[fsbl] ?= "virtual/fsbl"
> +
> +# specify BIF partition attributes for PMU Firmware
> +# destination cpu for PMU. Location where PMU binary is present and dependency to build PMU Firmware
> +BIF_PARTITION_ATTR[pmu] ?= "destination_cpu=pmu"
> +BIF_PARTITION_IMAGE[pmu] ?= "${DEPLOY_DIR_IMAGE}/pmu-firmware-${MACHINE}.elf"
> +BIF_PARTITION_DEPENDS[pmu] ?= "virtual/pmu-firmware"
> +
> +# specify BIF partition attributes for ATF
> +# destination cpu for ATF, security levels. Location where ATF binary is present (dependency is not required as ATF is always built for ZU+, see zcu102-zynqmp.conf)
> +BIF_PARTITION_ATTR[atf] ?= "destination_cpu=a53-0,exception_level=el-3,trustzone"
> +BIF_PARTITION_IMAGE[atf] ?= "${DEPLOY_DIR_IMAGE}/arm-trusted-firmware.elf"
> +BIF_PARTITION_DEPENDS[atf] ?= "arm-trusted-firmware"
> +
> +# specify BIF partition attributes for u-boot
> +# destination cpu for u-boot, security levels. Location where u-boot binary is present (dependency is not required as u-boot is always built for ZU+, see zcu102-zynqmp.conf)
> +BIF_PARTITION_ATTR[u-boot] ?= "destination_cpu=a53-0,exception_level=el-2"
> +BIF_PARTITION_IMAGE[u-boot] ?= "${DEPLOY_DIR_IMAGE}/u-boot-${MACHINE}.elf"
> +BIF_PARTITION_DEPENDS[u-boot] ?= "virtual/bootloader"
> +
> +# enable bitstream-Note this is not enabled by default (missing in BIF_PARTITION_ATTR)
> +BIF_PARTITION_ATTR[bitstream] ?= "destination_device=pl"
> +BIF_PARTITION_IMAGE[bitstream] ?= "${DEPLOY_DIR_IMAGE}/download-${MACHINE}.bit"
> +BIF_PARTITION_DEPENDS[bitstream] ?= "virtual/bitstream"
> diff --git a/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb b/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
> new file mode 100644
> index 0000000..b18c924
> --- /dev/null
> +++ b/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
> @@ -0,0 +1,103 @@
> +SUMMARY = "Generates boot.bin using bootgen tool"
> +DESCRIPTION = "Manages task dependencies and creation of boot.bin. Use the \
> +BIF_PARTITION_xyz global variables and flags to determine what makes it into \
> +the image."
> +
> +LICENSE = "BSD"
> +
> +include machine-xilinx-${SOC_FAMILY}.inc

Was it intentional to leave out the sections I had near here to remove useless inherited
tasks and add proper deploy task support?

Looked like this:

inherit nopackages base deploy
# this recipe is almost like an image recipe, taken from image.bbclass:
deltask do_fetch
deltask do_unpack
deltask do_patch
do_install[noexec] = "1"


Other than that, and 2 other tweaks, it looks like my original patch, so should be fine.

> +
> +inherit xsct-tc deploy
> +
> +PROVIDES = "virtual/boot-bin"
> +
> +PACKAGE_ARCH = "${MACHINE_ARCH}"
> +
> +BIF_FILE_PATH ?= "${B}/bootgen.bif"
> +
> +def create_bif(config, attrflags, attrimage, common_attr, biffd, d):
> +    import re, os
> +    for cfg in config:
> +        if cfg not in attrflags and common_attr:
> +            error_msg = "%s: invalid ATTRIBUTE" % (cfg)
> +            bb.error("BIF attribute Error: %s " % (error_msg))
> +        else:
> +            if common_attr:
> +                cfgval = attrflags[cfg].split(',')
> +                cfgstr = "\t [%s] %s\n" % (cfg,', '.join(cfgval))
> +            else:
> +                if cfg not in attrimage:
> +                    error_msg = "%s: invalid or missing elf or image" % (cfg)
> +                    bb.error("BIF atrribute Error: %s " % (error_msg))
> +                imagestr = d.expand(attrimage[cfg])
> +                if os.stat(imagestr).st_size == 0:
> +                    bb.warn("Empty file %s, excluding from bif file" %(imagestr))
> +                    continue
> +                if cfg in attrflags:
> +                    cfgval = attrflags[cfg].split(',')
> +                    cfgstr = "\t [%s] %s\n" % (', '.join(cfgval), imagestr)
> +                else:
> +                    cfgstr = "\t %s\n" % (imagestr)
> +            biffd.write(cfgstr)
> +
> +    return
> +
> +python do_configure() {
> +
> +    fp = d.getVar("BIF_FILE_PATH", True)
> +    biffd = open(fp, 'w')
> +    biffd.write("the_ROM_image:\n")
> +    biffd.write("{\n")
> +
> +    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)
> +
> +    bifpartition = (d.getVar("BIF_PARTITION_ATTR", 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)
> +
> +    biffd.write("}")
> +    biffd.close()
> +}
> +
> +do_configure[vardeps] += "BIF_PARTITION_ATTR BIF_PARTITION_IMAGE BIF_COMMON_ATTR"
> +do_configure[depends] += "${@get_bootbin_depends(d)}"
> +
> +def get_bootbin_depends(d):
> +    bootbindeps = ""
> +    bifpartition = (d.getVar("BIF_PARTITION_ATTR", True) or "").split()
> +    attrdepends = d.getVarFlags("BIF_PARTITION_DEPENDS") or {}
> +    for cfg in bifpartition:
> +        if cfg in attrdepends:
> +            bootbindeps = bootbindeps + " " + attrdepends[cfg] + ":do_deploy"
> +
> +    return bootbindeps
> +
> +
> +do_compile() {
> +    cd ${WORKDIR}
> +    rm -f ${B}/BOOT.bin
> +    bootgen -image ${BIF_FILE_PATH} -arch ${SOC_FAMILY} -w -o ${B}/BOOT.bin
> +    if [ ! -e ${B}/BOOT.bin ]; then
> +        bbfatal "bootgen failed. See log"
> +    fi
> +}
> +
> +do_install() {
> +	:
> +}
> +
> +BOOTBIN_BASE_NAME ?= "BOOT-${MACHINE}-${DATETIME}"
> +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
> +}
> +addtask do_deploy before do_build after do_compile
> +
> -- 
> 2.7.4
> 
> -- 
> _______________________________________________
> meta-xilinx mailing list
> meta-xilinx at yoctoproject.org
> https://lists.yoctoproject.org/listinfo/meta-xilinx



More information about the meta-xilinx mailing list