aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNathan Rossi <nathan@nathanrossi.com>2018-02-01 02:20:19 +1000
committerManjukumar Matha <manjukumar.harthikote-matha@xilinx.com>2019-01-01 20:03:46 -0800
commit897edbbba3e444cca93ea9a76870fd1b8fa7272d (patch)
tree28d7712b9e184e9cf0bd6cb763a80ba442ae5019
parent85c9b317f7f7ca3c11a71c8083d83515aa602940 (diff)
downloadmeta-xilinx-897edbbba3e444cca93ea9a76870fd1b8fa7272d.tar.gz
meta-xilinx-897edbbba3e444cca93ea9a76870fd1b8fa7272d.tar.bz2
meta-xilinx-897edbbba3e444cca93ea9a76870fd1b8fa7272d.zip
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 <nathan@nathanrossi.com> Signed-off-by: Manjukumar Matha <manjukumar.harthikote-matha@xilinx.com>
-rw-r--r--meta-xilinx-bsp/classes/image-wic-utils.bbclass51
-rw-r--r--meta-xilinx-bsp/recipes-bsp/u-boot/u-boot-zynq-uenv.bb55
2 files changed, 71 insertions, 35 deletions
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 0000000..6f66d55
--- /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 '<source>;<target>'
+ 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 f6c2a00..952077d 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 '<source>;<target>'
- 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"