[meta-xilinx] [meta-xilinx-tools][PATCH] xilinx-bootbin: Convert to recipe instead of bbclass
Manjukumar Matha
manjukumar.harthikote-matha at xilinx.com
Mon Jan 29 22:33:40 PST 2018
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>
---
Changelog
1) Remove unnecessary tasks which are not used in bootbin recipe
classes/xilinx-bootbin.bbclass | 83 -------------------
conf/machine/include/machine-xilinx-zynq.inc | 19 -----
conf/machine/include/machine-xilinx-zynqmp.inc | 41 ----------
recipes-bsp/bootbin/machine-xilinx-zynq.inc | 17 ++++
recipes-bsp/bootbin/machine-xilinx-zynqmp.inc | 35 ++++++++
recipes-bsp/bootbin/xilinx-bootbin_1.0.bb | 107 +++++++++++++++++++++++++
6 files changed, 159 insertions(+), 143 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 de3f895..0000000
--- a/conf/machine/include/machine-xilinx-zynqmp.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-# add Boot.bin dependency
-IMAGE_CLASSES_append = " xilinx-bootbin"
-
-# Override to use pmu-firmware built via xsct
-PREFERRED_PROVIDER_virtual/pmu-firmware = "pmu-firmware"
-
-# 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/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..ecaee00
--- /dev/null
+++ b/recipes-bsp/bootbin/xilinx-bootbin_1.0.bb
@@ -0,0 +1,107 @@
+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
+
+inherit xsct-tc deploy
+
+PROVIDES = "virtual/boot-bin"
+
+DEPENDS += "${@get_bootbin_depends(d)}"
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+BIF_FILE_PATH ?= "${B}/bootgen.bif"
+
+do_fetch[noexec] = "1"
+do_unpack[noexec] = "1"
+do_patch[noexec] = "1"
+
+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]
+
+ return bootbindeps
+
+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_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
This email and any attachments are intended for the sole use of the named recipient(s) and contain(s) confidential information that may be proprietary, privileged or copyrighted under applicable law. If you are not the intended recipient, do not read, copy, or forward this email message or any attachments. Delete this email message and any attachments immediately.
More information about the meta-xilinx
mailing list