From 5c044ff52362f379b5a9296e724df9546ae98b34 Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Tue, 8 Feb 2022 11:49:58 -0700 Subject: [PATCH] binman: Support a list of strings with the mkimage etype At present the 'args' property of the mkimage entry type is a string. This makes it difficult to include CONFIG options in that property. In particular, this does not work: args = "-n CONFIG_SYS_SOC -E" since the preprocessor does not operate within strings, nor does this: args = "-n" CONFIG_SYS_SOC" "-E" since the device tree compiler does not understand string concatenation. With this new feature, we can do: args = "-n", CONFIG_SYS_SOC, "-E"; Signed-off-by: Simon Glass --- tools/binman/elf_test.py | 6 +++--- tools/binman/entries.rst | 11 +++++++++++ tools/binman/etype/mkimage.py | 13 ++++++++++++- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/tools/binman/elf_test.py b/tools/binman/elf_test.py index f92352d54f..a67915bda6 100644 --- a/tools/binman/elf_test.py +++ b/tools/binman/elf_test.py @@ -263,7 +263,7 @@ class TestElf(unittest.TestCase): if not elf.ELF_TOOLS: self.skipTest('Python elftools not available') fname = self.ElfTestFile('embed_data') - segments, entry = elf.read_segments(tools.ReadFile(fname)) + segments, entry = elf.read_segments(tools.read_file(fname)) def test_read_segments_fail(self): """Test for read_segments() without elftools""" @@ -272,7 +272,7 @@ class TestElf(unittest.TestCase): elf.ELF_TOOLS = False fname = self.ElfTestFile('embed_data') with self.assertRaises(ValueError) as e: - elf.read_segments(tools.ReadFile(fname)) + elf.read_segments(tools.read_file(fname)) self.assertIn('Python elftools package is not available', str(e.exception)) finally: @@ -282,7 +282,7 @@ class TestElf(unittest.TestCase): """Test for read_segments() with an invalid ELF file""" fname = self.ElfTestFile('embed_data') with self.assertRaises(ValueError) as e: - elf.read_segments(tools.GetBytes(100, 100)) + elf.read_segments(tools.get_bytes(100, 100)) self.assertIn('Magic number does not match', str(e.exception)) diff --git a/tools/binman/entries.rst b/tools/binman/entries.rst index 88230a69d4..c4aa5fffe8 100644 --- a/tools/binman/entries.rst +++ b/tools/binman/entries.rst @@ -931,6 +931,17 @@ This calls mkimage to create an imximage with u-boot-spl.bin as the input file. The output from mkimage then becomes part of the image produced by binman. +To use CONFIG options in the arguments, use a string list instead, as in +this example which also produces four arguments:: + + mkimage { + args = "-n", CONFIG_SYS_SOC, "-T imximage"; + + u-boot-spl { + }; + }; + + Entry: opensbi: RISC-V OpenSBI fw_dynamic blob diff --git a/tools/binman/etype/mkimage.py b/tools/binman/etype/mkimage.py index baa16f36f3..ba4fb25de8 100644 --- a/tools/binman/etype/mkimage.py +++ b/tools/binman/etype/mkimage.py @@ -31,10 +31,21 @@ class Entry_mkimage(Entry): This calls mkimage to create an imximage with u-boot-spl.bin as the input file. The output from mkimage then becomes part of the image produced by binman. + + To use CONFIG options in the arguments, use a string list instead, as in + this example which also produces four arguments:: + + mkimage { + args = "-n", CONFIG_SYS_SOC, "-T imximage"; + + u-boot-spl { + }; + }; + """ def __init__(self, section, etype, node): super().__init__(section, etype, node) - self._args = fdt_util.GetString(self._node, 'args').split(' ') + self._args = fdt_util.GetArgs(self._node, 'args') self._mkimage_entries = OrderedDict() self.align_default = None self.ReadEntries() -- 2.39.5