mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-02 09:46:37 +03:00
binman: Produce a template-file after processing
This file aids debugging when binman fails to get far enough to write out the final devicetree file. Write it immediate after template processing. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -1256,6 +1256,10 @@ Properties in the template node are inserted into the destination node if they
|
||||
do not exist there. In the example above, `some-property` is added to each of
|
||||
`spi-image` and `mmc-image`.
|
||||
|
||||
The initial devicetree produced by the templating process is written to the
|
||||
`u-boot.dtb.tmpl1` file. This can be useful to see what is going on if there is
|
||||
a failure before the final `u-boot.dtb.out` file is written.
|
||||
|
||||
Note that template nodes are not removed from the binman description at present.
|
||||
|
||||
|
||||
|
||||
@@ -494,6 +494,9 @@ def _ProcessTemplates(parent):
|
||||
Args:
|
||||
parent: Binman node to process (typically /binman)
|
||||
|
||||
Returns:
|
||||
bool: True if any templates were processed
|
||||
|
||||
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.
|
||||
@@ -506,11 +509,15 @@ def _ProcessTemplates(parent):
|
||||
|
||||
See 'Templates' in the Binman documnentation for details.
|
||||
"""
|
||||
found = False
|
||||
for node in parent.subnodes:
|
||||
tmpl = fdt_util.GetPhandleList(node, 'insert-template')
|
||||
if tmpl:
|
||||
node.copy_subnodes_from_phandles(tmpl)
|
||||
_ProcessTemplates(node)
|
||||
found = True
|
||||
|
||||
found |= _ProcessTemplates(node)
|
||||
return found
|
||||
|
||||
def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt, use_expanded):
|
||||
"""Prepare the images to be processed and select the device tree
|
||||
@@ -554,7 +561,10 @@ 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)
|
||||
if _ProcessTemplates(node):
|
||||
dtb.Sync(True)
|
||||
fname = tools.get_output_filename('u-boot.dtb.tmpl1')
|
||||
tools.write_file(fname, dtb.GetContents())
|
||||
|
||||
images = _ReadImageDesc(node, use_expanded)
|
||||
|
||||
|
||||
@@ -6862,6 +6862,15 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
|
||||
second = U_BOOT_DATA + b'#' + VGA_DATA + U_BOOT_DTB_DATA
|
||||
self.assertEqual(U_BOOT_IMG_DATA + first + second, data)
|
||||
|
||||
dtb_fname1 = tools.get_output_filename('u-boot.dtb.tmpl1')
|
||||
self.assertTrue(os.path.exists(dtb_fname1))
|
||||
dtb = fdt.Fdt.FromData(tools.read_file(dtb_fname1))
|
||||
dtb.Scan()
|
||||
node1 = dtb.GetNode('/binman/template')
|
||||
self.assertTrue(node1)
|
||||
vga = dtb.GetNode('/binman/first/intel-vga')
|
||||
self.assertTrue(vga)
|
||||
|
||||
def testTemplateBlobMulti(self):
|
||||
"""Test using a template with 'multiple-images' enabled"""
|
||||
TestFunctional._MakeInputFile('my-blob.bin', b'blob')
|
||||
|
||||
Reference in New Issue
Block a user