[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