summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2018-09-14 04:57:35 -0600
committerSimon Glass <sjg@chromium.org>2018-09-29 11:49:35 -0600
commitfe1ae3ecc3a2203babd7837bd2d5cf514a374c1f (patch)
tree8a6ebd631bb6fe83a419ae23b136680e81f435e8
parentf8f8df6eb870b53e025aa447f8d40cd2ce2a77f6 (diff)
downloadu-boot-fe1ae3ecc3a2203babd7837bd2d5cf514a374c1f.tar.gz
binman: Support ELF files for U-Boot and SPL
For sandbox we want to put ELF files in the image since that is what we need to execute. Add support for this. Signed-off-by: Simon Glass <sjg@chromium.org>
-rw-r--r--tools/binman/README.entries22
-rw-r--r--tools/binman/etype/u_boot_elf.py39
-rw-r--r--tools/binman/etype/u_boot_spl_elf.py24
-rw-r--r--tools/binman/ftest.py16
-rw-r--r--tools/binman/test/96_elf.dts14
-rw-r--r--tools/binman/test/97_elf_strip.dts15
6 files changed, 130 insertions, 0 deletions
diff --git a/tools/binman/README.entries b/tools/binman/README.entries
index 4dd67d64fa..69b435f96e 100644
--- a/tools/binman/README.entries
+++ b/tools/binman/README.entries
@@ -361,6 +361,17 @@ it available to u_boot_ucode.
+Entry: u-boot-elf: U-Boot ELF image
+-----------------------------------
+
+Properties / Entry arguments:
+ - filename: Filename of u-boot (default 'u-boot')
+
+This is the U-Boot ELF image. It does not include a device tree but can be
+relocated to any address for execution.
+
+
+
Entry: u-boot-img: U-Boot legacy image
--------------------------------------
@@ -444,6 +455,17 @@ to activate.
+Entry: u-boot-spl-elf: U-Boot SPL ELF image
+-------------------------------------------
+
+Properties / Entry arguments:
+ - filename: Filename of SPL u-boot (default 'spl/u-boot')
+
+This is the U-Boot SPL ELF image. It does not include a device tree but can
+be relocated to any address for execution.
+
+
+
Entry: u-boot-spl-nodtb: SPL binary without device tree appended
----------------------------------------------------------------
diff --git a/tools/binman/etype/u_boot_elf.py b/tools/binman/etype/u_boot_elf.py
new file mode 100644
index 0000000000..134b6cc15b
--- /dev/null
+++ b/tools/binman/etype/u_boot_elf.py
@@ -0,0 +1,39 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2018 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+# Entry-type module for U-Boot ELF image
+#
+
+from entry import Entry
+from blob import Entry_blob
+
+import fdt_util
+import tools
+
+class Entry_u_boot_elf(Entry_blob):
+ """U-Boot ELF image
+
+ Properties / Entry arguments:
+ - filename: Filename of u-boot (default 'u-boot')
+
+ This is the U-Boot ELF image. It does not include a device tree but can be
+ relocated to any address for execution.
+ """
+ def __init__(self, section, etype, node):
+ Entry_blob.__init__(self, section, etype, node)
+ self._strip = fdt_util.GetBool(self._node, 'strip')
+
+ def ReadBlobContents(self):
+ if self._strip:
+ uniq = self.GetUniqueName()
+ out_fname = tools.GetOutputFilename('%s.stripped' % uniq)
+ tools.WriteFile(out_fname, tools.ReadFile(self._pathname))
+ tools.Run('strip', out_fname)
+ self.SetContents(tools.ReadFile(out_fname))
+ else:
+ self.SetContents(tools.ReadFile(self._pathname))
+ return True
+
+ def GetDefaultFilename(self):
+ return 'u-boot'
diff --git a/tools/binman/etype/u_boot_spl_elf.py b/tools/binman/etype/u_boot_spl_elf.py
new file mode 100644
index 0000000000..da328ae15e
--- /dev/null
+++ b/tools/binman/etype/u_boot_spl_elf.py
@@ -0,0 +1,24 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright (c) 2018 Google, Inc
+# Written by Simon Glass <sjg@chromium.org>
+#
+# Entry-type module for U-Boot SPL ELF image
+#
+
+from entry import Entry
+from blob import Entry_blob
+
+class Entry_u_boot_spl_elf(Entry_blob):
+ """U-Boot SPL ELF image
+
+ Properties / Entry arguments:
+ - filename: Filename of SPL u-boot (default 'spl/u-boot')
+
+ This is the U-Boot SPL ELF image. It does not include a device tree but can
+ be relocated to any address for execution.
+ """
+ def __init__(self, section, etype, node):
+ Entry_blob.__init__(self, section, etype, node)
+
+ def GetDefaultFilename(self):
+ return 'spl/u-boot-spl'
diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
index 1abb768e64..27dca3a2a7 100644
--- a/tools/binman/ftest.py
+++ b/tools/binman/ftest.py
@@ -1708,6 +1708,22 @@ class TestFunctional(unittest.TestCase):
fmap_util.FMAP_AREA_LEN * 3, fentries[2].size)
self.assertEqual('FMAP', fentries[2].name)
+ def testElf(self):
+ """Basic test of ELF entries"""
+ with open(self.TestFile('bss_data')) as fd:
+ TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ with open(self.TestFile('bss_data')) as fd:
+ TestFunctional._MakeInputFile('-boot', fd.read())
+ data = self._DoReadFile('96_elf.dts')
+
+ def testElfStripg(self):
+ """Basic test of ELF entries"""
+ with open(self.TestFile('bss_data')) as fd:
+ TestFunctional._MakeInputFile('spl/u-boot-spl', fd.read())
+ with open(self.TestFile('bss_data')) as fd:
+ TestFunctional._MakeInputFile('-boot', fd.read())
+ data = self._DoReadFile('97_elf_strip.dts')
+
if __name__ == "__main__":
unittest.main()
diff --git a/tools/binman/test/96_elf.dts b/tools/binman/test/96_elf.dts
new file mode 100644
index 0000000000..df3440c319
--- /dev/null
+++ b/tools/binman/test/96_elf.dts
@@ -0,0 +1,14 @@
+// SPDX-License-Identifier: GPL-2.0+
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ u-boot-elf {
+ };
+ u-boot-spl-elf {
+ };
+ };
+};
diff --git a/tools/binman/test/97_elf_strip.dts b/tools/binman/test/97_elf_strip.dts
new file mode 100644
index 0000000000..6f3c66fd70
--- /dev/null
+++ b/tools/binman/test/97_elf_strip.dts
@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0+
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ u-boot-elf {
+ strip;
+ };
+ u-boot-spl-elf {
+ };
+ };
+};