提交 fe1ae3ec 编写于 作者: S Simon Glass

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: NSimon Glass <sjg@chromium.org>
上级 f8f8df6e
......@@ -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
----------------------------------------------------------------
......
# 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'
# 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'
......@@ -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()
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
u-boot-elf {
};
u-boot-spl-elf {
};
};
};
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
u-boot-elf {
strip;
};
u-boot-spl-elf {
};
};
};
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册