From 897edbbba3e444cca93ea9a76870fd1b8fa7272d Mon Sep 17 00:00:00 2001 From: Nathan Rossi Date: Thu, 1 Feb 2018 02:20:19 +1000 Subject: u-boot-zynq-uenv.bb: Handle IMAGE_BOOT_FILES wildcard patterns Handle IMAGE_BOOT_FILES having wildcard patterns for dtbs. This requires that the recipe depend on the deployment of the dtbs in order for the correct file names to be expanded. This change also improves the parsing of the IMAGE_BOOT_FILES variable and splits out the python functions for doing this into a separate image-wic-utils.bbclass file. Signed-off-by: Nathan Rossi Signed-off-by: Manjukumar Matha --- meta-xilinx-bsp/classes/image-wic-utils.bbclass | 51 ++++++++++++++++++++ .../recipes-bsp/u-boot/u-boot-zynq-uenv.bb | 55 ++++++++-------------- 2 files changed, 71 insertions(+), 35 deletions(-) create mode 100644 meta-xilinx-bsp/classes/image-wic-utils.bbclass (limited to 'meta-xilinx-bsp') diff --git a/meta-xilinx-bsp/classes/image-wic-utils.bbclass b/meta-xilinx-bsp/classes/image-wic-utils.bbclass new file mode 100644 index 00000000..6f66d553 --- /dev/null +++ b/meta-xilinx-bsp/classes/image-wic-utils.bbclass @@ -0,0 +1,51 @@ +# Helper/utility functions to work with the IMAGE_BOOT_FILES variable and its +# expected behvaior with regards to the contents of the DEPLOY_DIR_IMAGE. +# +# The use of these functions assume that the deploy directory is populated with +# any dependent files/etc. Such that the recipe using these functions depends +# on the recipe that provides the files being used/queried. + +def boot_files_split_expand(d): + # IMAGE_BOOT_FILES has extra renaming info in the format ';' + for f in (d.getVar("IMAGE_BOOT_FILES") or "").split(" "): + parts = f.split(";", 1) + sources = [parts[0]] + if "*" in parts[0]: + # has glob part + import glob + deployroot = d.getVar("DEPLOY_DIR_IMAGE") + sources = [] + for i in glob.glob(os.path.join(deployroot, parts[0])): + sources.append(os.path.basename(i)) + + # for all sources, yield an entry + for s in sources: + if len(parts) == 2: + yield s, parts[1] + yield s, s + +def boot_files_bitstream(d): + expectedfiles = [("bitstream", True)] + expectedexts = [(".bit", True), (".bin", False)] + # search for bitstream paths, use the renamed file. First matching is used + for source, target in boot_files_split_expand(d): + # skip boot.bin and u-boot.bin, it is not a bitstream + skip = ["boot.bin", "u-boot.bin"] + if source in skip or target in skip: + continue + + for e, t in expectedfiles: + if source == e or target == e: + return target, t + for e, t in expectedexts: + if source.endswith(e) or target.endswith(e): + return target, t + return "", False + +def boot_files_dtb_filepath(d): + dtbs = (d.getVar("IMAGE_BOOT_FILES") or "").split(" ") + for source, target in boot_files_split_expand(d): + if target.endswith(".dtb"): + return target + return "" + diff --git a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-uenv.bb b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-uenv.bb index f6c2a00d..952077d1 100644 --- a/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-uenv.bb +++ b/meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-uenv.bb @@ -5,43 +5,28 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda INHIBIT_DEFAULT_DEPS = "1" PACKAGE_ARCH = "${MACHINE_ARCH}" +python () { + # The device trees must be populated in the deploy directory to correctly + # detect them and their names. This means that this recipe needs to depend + # on those deployables just like the image recipe does. + deploydeps = ["virtual/kernel"] + for i in (d.getVar("MACHINE_ESSENTIAL_EXTRA_RDEPENDS") or "").split(): + if i != d.getVar("BPN"): + deploydeps.append(i) + for i in (d.getVar("EXTRA_IMAGEDEPENDS") or "").split(): + if i != d.getVar("BPN"): + deploydeps.append(i) + + # add as DEPENDS since the targets might not have do_deploy tasks + if len(deploydeps) != 0: + d.appendVar("DEPENDS", " " + " ".join(deploydeps)) +} + COMPATIBLE_MACHINE = "^$" COMPATIBLE_MACHINE_zynq = ".*" COMPATIBLE_MACHINE_zynqmp = ".*" -inherit deploy - -def bootfiles_bitstream(d): - expectedfiles = [("bitstream", True)] - expectedexts = [(".bit", True), (".bin", False)] - # search for bitstream paths, use the renamed file. First matching is used - for f in (d.getVar("IMAGE_BOOT_FILES") or "").split(): - sf, rf = f, f - if ';' in f: - sf, rf = f.split(';') - - # skip boot.bin and u-boot.bin, it is not a bitstream - skip = ["boot.bin", "u-boot.bin"] - if sf in skip or rf in skip: - continue - - for e, t in expectedfiles: - if sf == e or rf == e: - return rf, t - for e, t in expectedexts: - if sf.endswith(e) or rf.endswith(e): - return rf, t - return "", False - -def bootfiles_dtb_filepath(d): - if d.getVar("IMAGE_BOOT_FILES"): - dtbs = d.getVar("IMAGE_BOOT_FILES").split(" ") - # IMAGE_BOOT_FILES has extra renaming info in the format ';' - dtbs = [f.split(";")[0] for f in dtbs] - dtbs = [f for f in dtbs if f.endswith(".dtb")] - if len(dtbs) != 0: - return dtbs[0] - return "" +inherit deploy image-wic-utils def uboot_boot_cmd(d): if d.getVar("KERNEL_IMAGETYPE") in ["uImage", "fitImage"]: @@ -61,7 +46,7 @@ def uenv_populate(d): env["kernel_image"] = d.getVar("KERNEL_IMAGETYPE") env["kernel_load_address"] = d.getVar("KERNEL_LOAD_ADDRESS") - env["devicetree_image"] = bootfiles_dtb_filepath(d) + env["devicetree_image"] = boot_files_dtb_filepath(d) env["devicetree_load_address"] = d.getVar("DEVICETREE_LOAD_ADDRESS") env["bootargs"] = d.getVar("KERNEL_BOOTARGS") @@ -73,7 +58,7 @@ def uenv_populate(d): # default uenvcmd does not load bitstream env["uenvcmd"] = "run bootkernel" - bitstream, bitstreamtype = bootfiles_bitstream(d) + bitstream, bitstreamtype = boot_files_bitstream(d) if bitstream: env["bitstream_image"] = bitstream env["bitstream_load_address"] = "0x100000" -- cgit v1.2.3-54-g00ecf