binman: Support templating with multiple images
authorSimon Glass <sjg@chromium.org>
Tue, 18 Jul 2023 13:24:05 +0000 (07:24 -0600)
committerSimon Glass <sjg@chromium.org>
Thu, 20 Jul 2023 20:10:58 +0000 (14:10 -0600)
Allow a template to appear in the top level description when using
multiple images.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/control.py
tools/binman/ftest.py
tools/binman/test/287_template_multi.dts [new file with mode: 0644]

index e9c4a65..f92c152 100644 (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
index fc5d8a8..dd6075b 100644 (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()
diff --git a/tools/binman/test/287_template_multi.dts b/tools/binman/test/287_template_multi.dts
new file mode 100644 (file)
index 0000000..122bfcc
--- /dev/null
@@ -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";
+                       };
+               };
+       };
+};