binman: allow user-defined filenames for mkimage entry

mkimage entry currently creates a file whose name is derived from the
section name containing said entry.

Let's allow the user to define a filename for the mkimage-generated
binary by using the 'filename' DT property.

Cc: Quentin Schulz <foss+uboot@0leil.net>
Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Quentin Schulz
2022-09-02 15:10:49 +02:00
committed by Kever Yang
parent 4d91df0548
commit 6cc29dc854
3 changed files with 33 additions and 3 deletions

View File

@@ -21,11 +21,13 @@ class Entry_mkimage(Entry):
- multiple-data-files: boolean to tell binman to pass all files as - multiple-data-files: boolean to tell binman to pass all files as
datafiles to mkimage instead of creating a temporary file the result datafiles to mkimage instead of creating a temporary file the result
of datafiles concatenation of datafiles concatenation
- filename: filename of output binary generated by mkimage
The data passed to mkimage via the -d flag is collected from subnodes of the The data passed to mkimage via the -d flag is collected from subnodes of the
mkimage node, e.g.:: mkimage node, e.g.::
mkimage { mkimage {
filename = "imximage.bin";
args = "-n test -T imximage"; args = "-n test -T imximage";
u-boot-spl { u-boot-spl {
@@ -38,8 +40,9 @@ class Entry_mkimage(Entry):
mkimage -d <data_file> -n test -T imximage <output_file> mkimage -d <data_file> -n test -T imximage <output_file>
The output from mkimage then becomes part of the image produced by The output from mkimage then becomes part of the image produced by
binman. If you need to put multiple things in the data file, you can use binman but also is written into `imximage.bin` file. If you need to put
a section, or just multiple subnodes like this:: multiple things in the data file, you can use a section, or just multiple
subnodes like this::
mkimage { mkimage {
args = "-n test -T imximage"; args = "-n test -T imximage";
@@ -121,6 +124,7 @@ class Entry_mkimage(Entry):
self._multiple_data_files = fdt_util.GetBool(self._node, 'multiple-data-files') self._multiple_data_files = fdt_util.GetBool(self._node, 'multiple-data-files')
self._mkimage_entries = OrderedDict() self._mkimage_entries = OrderedDict()
self._imagename = None self._imagename = None
self._filename = fdt_util.GetString(self._node, 'filename')
self.align_default = None self.align_default = None
def ReadNode(self): def ReadNode(self):
@@ -164,7 +168,8 @@ class Entry_mkimage(Entry):
[self._imagename], 'mkimage-n', 1024) [self._imagename], 'mkimage-n', 1024)
if image_data is None: if image_data is None:
return False return False
output_fname = tools.get_output_filename('mkimage-out.%s' % uniq) outfile = self._filename if self._filename else 'mkimage-out.%s' % uniq
output_fname = tools.get_output_filename(outfile)
args = ['-d', input_fname] args = ['-d', input_fname]
if self._data_to_imagename: if self._data_to_imagename:

View File

@@ -5921,6 +5921,13 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertIn('Could not complete processing of contents', self.assertIn('Could not complete processing of contents',
str(exc.exception)) str(exc.exception))
def testMkimageFilename(self):
"""Test using mkimage to build a binary with a filename"""
retcode = self._DoTestFile('254_mkimage_filename.dts')
self.assertEqual(0, retcode)
fname = tools.get_output_filename('mkimage-test.bin')
self.assertTrue(os.path.exists(fname))
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@@ -0,0 +1,18 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
mkimage {
filename = "mkimage-test.bin";
args = "-T script";
u-boot-spl {
};
};
};
};