[meta-xilinx] [PATCH 4/7] xilinx-bootbin: convert to a normal recipe

Jean-Francois Dagenais jeff.dagenais at gmail.com
Thu Jul 13 09:26:28 PDT 2017


Hey guys,

No one sent any feedback on this one. This is one of the highest priority patches in the
series.


> On Jul 6, 2017, at 13:16, Jean-Francois Dagenais <jeff.dagenais at gmail.com> wrote:
> 
> The BOOT.bin product cannot be made by a task attached to every image
> recipe like it is now because it means that each image recipe built,
> wheather sequencially or in parallel, will compete to overwrite the
> same BOOT.bin file in the DEPLOY_DIR_IMAGE directory.
> 
> Plus, doing the boot.bin while making an initramfs makes no sense.
> 
> Instead, the BOOT.bin product as a recipe on it's own, will behave
> better in the yocto build system.
> 
> The recipe can be triggered through normal depencency at machine level,
> or as part of image_types dependencies, etc.
> 
> For a wic made sdcard image, something like this works well at the:
> machine scope:
> 
> do_image_wic[depends] += "\
> xilinx-bootbin:do_deploy \
> "
> IMAGE_BOOT_FILES = "\
> 	BOOT.bin \
> ...
> "
> 
> Signed-off-by: Jean-Francois Dagenais <jeff.dagenais at gmail.com>
> ---
> classes/xilinx-bootbin.bbclass                 |  83 -------------------
> conf/machine/include/machine-xilinx-zynqmp.inc |   2 -
> recipes-bsp/bootbin/xilinx-bootbin_1.0.bb      | 105 +++++++++++++++++++++++++
> 3 files changed, 105 insertions(+), 85 deletions(-)
> delete mode 100644 classes/xilinx-bootbin.bbclass
> 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 db2235b..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 after do_image_complete 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 after do_image_complete before do_build
> diff --git a/conf/machine/include/machine-xilinx-zynqmp.inc b/conf/machine/include/machine-xilinx-zynqmp.inc
> index c620813..5357741 100644
> --- a/conf/machine/include/machine-xilinx-zynqmp.inc
> +++ b/conf/machine/include/machine-xilinx-zynqmp.inc
> @@ -1,5 +1,3 @@
> -# add Boot.bin dependency
> -IMAGE_CLASSES_append ?= " xilinx-bootbin"
> 
> # specify BIF common attribute for FSBL
> BIF_COMMON_ATTR ?= "fsbl_config"
> 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..2aca94e
> --- /dev/null
> +++ b/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
> @@ -0,0 +1,105 @@
> +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"
> +
> +inherit xsct-tc
> +inherit nopackages base deploy
> +
> +PACKAGE_ARCH = "${MACHINE_ARCH}"
> +
> +BIF_COMMON_ATTR ?= ''
> +BIF_PARTITION_ATTR ?= ''
> +BIF_PARTITION_IMAGE ?= ''
> +BIF_PARTITION_DEPENDS ?= ''
> +BIF_FILE_PATH = "${B}/bootgen.bif"
> +
> +# this recipe is almost like an image recipe, taken from image.bbclass:
> +deltask do_fetch
> +deltask do_unpack
> +deltask do_patch
> +#do_configure[noexec] = "1"
> +#do_compile[noexec] = "1"
> +do_install[noexec] = "1"
> +#deltask do_populate_sysroot
> +
> +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 ${KMACHINE} -w -o ${B}/BOOT.bin
> +    if [ ! -e ${B}/BOOT.bin ]; then
> +        bbfatal "bootgen failed. See log"
> +    fi
> +}
> +
> +do_deploy() {
> +    install -m 0644 ${B}/BOOT.bin ${DEPLOYDIR}/BOOT.bin
> +}
> +addtask do_deploy before do_build after do_compile
> +
> +#do_build[depends] += "${PN}:do_deploy"
> -- 
> 2.1.4
> 




More information about the meta-xilinx mailing list