| # 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 "" |
| |