diff options
author | Tom Rini <trini@konsulko.com> | 2023-07-20 21:31:31 -0400 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2023-07-20 21:31:31 -0400 |
commit | e896279ac39ebb97f23e6132bf7668a61e1cd86b (patch) | |
tree | 24e035ebd13dbd272da4b3845a1dfcac66e4a86f /tools/binman/control.py | |
parent | 7fe5accb4516144b7abb8f183640cdf50423121e (diff) | |
parent | 24142ead21ed5e4d2d6f39dd410d91d815ea1ae2 (diff) |
Merge tag 'dm-pull-20jul23' of https://source.denx.de/u-boot/custodians/u-boot-dm
binman mkimage and template enhancements
misc fixes
Diffstat (limited to 'tools/binman/control.py')
-rw-r--r-- | tools/binman/control.py | 32 |
1 files changed, 30 insertions, 2 deletions
diff --git a/tools/binman/control.py b/tools/binman/control.py index 7e2dd3541b..25e6681483 100644 --- a/tools/binman/control.py +++ b/tools/binman/control.py @@ -22,6 +22,7 @@ from binman import bintool from binman import cbfs_util from binman import elf from binman import entry +from dtoc import fdt_util from u_boot_pylib import command from u_boot_pylib import tools from u_boot_pylib import tout @@ -56,8 +57,9 @@ def _ReadImageDesc(binman_node, use_expanded): images = OrderedDict() if 'multiple-images' in binman_node.props: for node in binman_node.subnodes: - images[node.name] = Image(node.name, node, - use_expanded=use_expanded) + if 'template' not in node.name: + images[node.name] = Image(node.name, node, + use_expanded=use_expanded) else: images['image'] = Image('image', binman_node, use_expanded=use_expanded) return images @@ -478,6 +480,30 @@ def SignEntries(image_fname, input_fname, privatekey_fname, algo, entry_paths, AfterReplace(image, allow_resize=True, write_map=write_map) +def _ProcessTemplates(parent): + """Handle any templates in the binman description + + Args: + parent: Binman node to process (typically /binman) + + Search though each target node looking for those with an 'insert-template' + property. Use that as a list of references to template nodes to use to + adjust the target node. + + Processing involves copying each subnode of the template node into the + target node. + + This is done recursively, so templates can be at any level of the binman + image, e.g. inside a section. + + See 'Templates' in the Binman documnentation for details. + """ + for node in parent.subnodes: + tmpl = fdt_util.GetPhandleList(node, 'insert-template') + if tmpl: + node.copy_subnodes_from_phandles(tmpl) + _ProcessTemplates(node) + def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt, use_expanded): """Prepare the images to be processed and select the device tree @@ -520,6 +546,8 @@ def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt, use_expanded): raise ValueError("Device tree '%s' does not have a 'binman' " "node" % dtb_fname) + _ProcessTemplates(node) + images = _ReadImageDesc(node, use_expanded) if select_images: |