]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
binman: Allow the image name to be the data file
authorSimon Glass <sjg@chromium.org>
Sat, 13 Aug 2022 17:40:48 +0000 (11:40 -0600)
committerSimon Glass <sjg@chromium.org>
Sun, 21 Aug 2022 00:07:32 +0000 (18:07 -0600)
Some image types use the -n parameter to pass in the data file. Add
support for this, with a new property.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/entries.rst
tools/binman/etype/mkimage.py
tools/binman/ftest.py
tools/binman/test/235_mkimage_name.dts [new file with mode: 0644]

index fc15c45d29ea054a64857e8b78e7d1b0a0194792..9844b2efff9be9033868a679ba9c86033d486101 100644 (file)
@@ -1167,6 +1167,8 @@ Entry: mkimage: Binary produced by mkimage
 
 Properties / Entry arguments:
     - args: Arguments to pass
+    - data-to-imagename: Indicates that the -d data should be passed in as
+      the image name also (-n)
 
 The data passed to mkimage via the -d flag is collected from subnodes of the
 mkimage node, e.g.::
@@ -1207,6 +1209,19 @@ this example which also produces four arguments::
         };
     };
 
+If you need to pass the input data in with the -n argument as well, then use
+the 'data-to-imagename' property::
+
+    mkimage {
+        args = "-T imximage";
+        data-to-imagename';
+
+        u-boot-spl {
+        };
+    };
+
+That will pass the data to mkimage both as the data file (with -d) and as
+the image name (with -n).
 
 
 
index a5d94da6a915a818dd8b4f332bc9938286955140..53622546dc087f18dcd168dbde3d861d6efd201d 100644 (file)
@@ -16,6 +16,8 @@ class Entry_mkimage(Entry):
 
     Properties / Entry arguments:
         - args: Arguments to pass
+        - data-to-imagename: Indicates that the -d data should be passed in as
+          the image name also (-n)
 
     The data passed to mkimage via the -d flag is collected from subnodes of the
     mkimage node, e.g.::
@@ -59,6 +61,20 @@ class Entry_mkimage(Entry):
             };
         };
 
+    If you need to pass the input data in with the -n argument as well, then use
+    the 'data-to-imagename' property::
+
+        mkimage {
+            args = "-T imximage";
+            data-to-imagename;
+
+            u-boot-spl {
+            };
+        };
+
+    That will pass the data to mkimage both as the data file (with -d) and as
+    the image name (with -n). In both cases, a filename is passed as the
+    argument, with the actual data being in that file.
     """
     def __init__(self, section, etype, node):
         super().__init__(section, etype, node)
@@ -68,6 +84,8 @@ class Entry_mkimage(Entry):
     def ReadNode(self):
         super().ReadNode()
         self._args = fdt_util.GetArgs(self._node, 'args')
+        self._data_to_imagename = fdt_util.GetBool(self._node,
+                                                   'data-to-imagename')
         self.ReadEntries()
 
     def ReadEntries(self):
@@ -79,13 +97,18 @@ class Entry_mkimage(Entry):
 
     def ObtainContents(self):
         # Use a non-zero size for any fake files to keep mkimage happy
+        # Note that testMkimageImagename() relies on this 'mkimage' parameter
         data, input_fname, uniq = self.collect_contents_to_file(
             self._mkimage_entries.values(), 'mkimage', 1024)
         if data is None:
             return False
         output_fname = tools.get_output_filename('mkimage-out.%s' % uniq)
-        if self.mkimage.run_cmd('-d', input_fname, *self._args,
-                                output_fname) is not None:
+
+        args = ['-d', input_fname]
+        if self._data_to_imagename:
+            args += ['-n', input_fname]
+        args += self._args + [output_fname]
+        if self.mkimage.run_cmd(*args) is not None:
             self.SetContents(tools.read_file(output_fname))
         else:
             # Bintool is missing; just use the input data as the output
index ac54183c399062d7a40320ab74a217fb055e6816..e88eedff51b37697bfb36c2cef5d0522b18db8be 100644 (file)
@@ -5722,6 +5722,23 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
             "Node '/section': Replacing sections is not implemented yet",
             str(exc.exception))
 
+    def testMkimageImagename(self):
+        """Test using mkimage with -n holding the data too"""
+        data = self._DoReadFile('235_mkimage_name.dts')
+
+        # Check that the data appears in the file somewhere
+        self.assertIn(U_BOOT_SPL_DATA, data)
+
+        # Get struct image_header -> ih_name
+        name = data[0x20:0x40]
+
+        # Build the filename that we expect to be placed in there, by virtue of
+        # the -n paraameter
+        expect = os.path.join(tools.get_output_dir(), 'mkimage.mkimage')
+
+        # Check that the image name is set to the temporary filename used
+        self.assertEqual(expect.encode('utf-8')[:0x20], name)
+
 
 if __name__ == "__main__":
     unittest.main()
diff --git a/tools/binman/test/235_mkimage_name.dts b/tools/binman/test/235_mkimage_name.dts
new file mode 100644 (file)
index 0000000..fbc82f1
--- /dev/null
@@ -0,0 +1,18 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+       #address-cells = <1>;
+       #size-cells = <1>;
+
+       binman {
+               mkimage {
+                       args = "-T script";
+                       data-to-imagename;
+
+                       u-boot-spl {
+                       };
+               };
+       };
+};