binman: Support templating with multiple images

Allow a template to appear in the top level description when using
multiple images.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-07-18 07:24:05 -06:00
parent f6abd5227a
commit 35f72fb55a
3 changed files with 42 additions and 2 deletions

View file

@ -57,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

View file

@ -6793,6 +6793,18 @@ 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)
def testTemplateBlobMulti(self):
"""Test using a template with 'multiple-images' enabled"""
TestFunctional._MakeInputFile('my-blob.bin', b'blob')
TestFunctional._MakeInputFile('my-blob2.bin', b'other')
retcode = self._DoTestFile('287_template_multi.dts')
self.assertEqual(0, retcode)
image = control.images['image']
image_fname = tools.get_output_filename('my-image.bin')
data = tools.read_file(image_fname)
self.assertEqual(b'blob@@@@other', data)
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1,27 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
binman: binman {
multiple-images;
my_template: template {
blob-ext@0 {
filename = "my-blob.bin";
offset = <0>;
};
blob-ext@8 {
offset = <8>;
};
};
image {
pad-byte = <0x40>;
filename = "my-image.bin";
insert-template = <&my_template>;
blob-ext@8 {
filename = "my-blob2.bin";
};
};
};
};