[PATCH 09/11] binman: Allow the image name to be the data file
Simon Glass
sjg at chromium.org
Thu Aug 11 16:04:10 CEST 2022
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 at chromium.org>
---
tools/binman/entries.rst | 15 +++++++++++++++
tools/binman/etype/mkimage.py | 26 ++++++++++++++++++++++++--
tools/binman/ftest.py | 17 +++++++++++++++++
tools/binman/test/235_mkimage_name.dts | 18 ++++++++++++++++++
4 files changed, 74 insertions(+), 2 deletions(-)
create mode 100644 tools/binman/test/235_mkimage_name.dts
diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst
index 8d7cbdc2e75..1d38c513ffa 100644
--- a/tools/binman/entries.rst
+++ b/tools/binman/entries.rst
@@ -1101,6 +1101,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.::
@@ -1141,6 +1143,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).
diff --git a/tools/binman/etype/mkimage.py b/tools/binman/etype/mkimage.py
index 28f7eb31343..3295f451f79 100644
--- a/tools/binman/etype/mkimage.py
+++ b/tools/binman/etype/mkimage.py
@@ -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.::
@@ -56,6 +58,19 @@ 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).
"""
def __init__(self, section, etype, node):
super().__init__(section, etype, node)
@@ -65,6 +80,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):
@@ -76,13 +93,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
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index ac54183c399..e88eedff51b 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -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
index 00000000000..fbc82f1f8d6
--- /dev/null
+++ b/tools/binman/test/235_mkimage_name.dts
@@ -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 {
+ };
+ };
+ };
+};
--
2.37.1.559.g78731f0fdb-goog
More information about the U-Boot
mailing list