mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-18 21:21:37 +00:00
binman: Add support for adding a name prefix to entries
Sometimes we have several sections which repeat the same entries (e.g. for a read-only and read-write version of the same section). It is useful to be able to tell these entries apart by name. Add a new 'name-prefix' property for sections, which causes all entries within that section to have a given name prefix. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
3b0c3821d6
commit
c8d48efb2b
5 changed files with 66 additions and 3 deletions
|
@ -417,11 +417,13 @@ and can be programmed:
|
||||||
binman {
|
binman {
|
||||||
section@0 {
|
section@0 {
|
||||||
read-only;
|
read-only;
|
||||||
|
name-prefix = "ro-";
|
||||||
size = <0x100000>;
|
size = <0x100000>;
|
||||||
u-boot {
|
u-boot {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
section@1 {
|
section@1 {
|
||||||
|
name-prefix = "rw-";
|
||||||
size = <0x100000>;
|
size = <0x100000>;
|
||||||
u-boot {
|
u-boot {
|
||||||
};
|
};
|
||||||
|
@ -437,6 +439,12 @@ read-only:
|
||||||
Indicates that this section is read-only. This has no impact on binman's
|
Indicates that this section is read-only. This has no impact on binman's
|
||||||
operation, but his property can be read at run time.
|
operation, but his property can be read at run time.
|
||||||
|
|
||||||
|
name-prefix:
|
||||||
|
This string is prepended to all the names of the binaries in the
|
||||||
|
section. In the example above, the 'u-boot' binaries which actually be
|
||||||
|
renamed to 'ro-u-boot' and 'rw-u-boot'. This can be useful to
|
||||||
|
distinguish binaries with otherwise identical names.
|
||||||
|
|
||||||
|
|
||||||
Special properties
|
Special properties
|
||||||
------------------
|
------------------
|
||||||
|
|
|
@ -41,6 +41,8 @@ class Section(object):
|
||||||
memory address (like 0xff800000) is the first entry position.
|
memory address (like 0xff800000) is the first entry position.
|
||||||
This causes _skip_at_start to be set to the starting memory
|
This causes _skip_at_start to be set to the starting memory
|
||||||
address.
|
address.
|
||||||
|
_name_prefix: Prefix to add to the name of all entries within this
|
||||||
|
section
|
||||||
_entries: OrderedDict() of entries
|
_entries: OrderedDict() of entries
|
||||||
"""
|
"""
|
||||||
def __init__(self, name, node, test=False):
|
def __init__(self, name, node, test=False):
|
||||||
|
@ -58,6 +60,7 @@ class Section(object):
|
||||||
self._sort = False
|
self._sort = False
|
||||||
self._skip_at_start = 0
|
self._skip_at_start = 0
|
||||||
self._end_4gb = False
|
self._end_4gb = False
|
||||||
|
self._name_prefix = ''
|
||||||
self._entries = OrderedDict()
|
self._entries = OrderedDict()
|
||||||
if not test:
|
if not test:
|
||||||
self._ReadNode()
|
self._ReadNode()
|
||||||
|
@ -79,10 +82,13 @@ class Section(object):
|
||||||
self._Raise("Section size must be provided when using end-at-4gb")
|
self._Raise("Section size must be provided when using end-at-4gb")
|
||||||
if self._end_4gb:
|
if self._end_4gb:
|
||||||
self._skip_at_start = 0x100000000 - self._size
|
self._skip_at_start = 0x100000000 - self._size
|
||||||
|
self._name_prefix = fdt_util.GetString(self._node, 'name-prefix')
|
||||||
|
|
||||||
def _ReadEntries(self):
|
def _ReadEntries(self):
|
||||||
for node in self._node.subnodes:
|
for node in self._node.subnodes:
|
||||||
self._entries[node.name] = Entry.Create(self, node)
|
entry = Entry.Create(self, node)
|
||||||
|
entry.SetPrefix(self._name_prefix)
|
||||||
|
self._entries[node.name] = entry
|
||||||
|
|
||||||
def CheckSize(self):
|
def CheckSize(self):
|
||||||
"""Check that the section contents does not exceed its size, etc."""
|
"""Check that the section contents does not exceed its size, etc."""
|
||||||
|
|
|
@ -48,11 +48,11 @@ class Entry(object):
|
||||||
pad_after: Number of pad bytes after the contents, 0 if none
|
pad_after: Number of pad bytes after the contents, 0 if none
|
||||||
data: Contents of entry (string of bytes)
|
data: Contents of entry (string of bytes)
|
||||||
"""
|
"""
|
||||||
def __init__(self, section, etype, node, read_node=True):
|
def __init__(self, section, etype, node, read_node=True, name_prefix=''):
|
||||||
self.section = section
|
self.section = section
|
||||||
self.etype = etype
|
self.etype = etype
|
||||||
self._node = node
|
self._node = node
|
||||||
self.name = node and node.name or 'none'
|
self.name = node and (name_prefix + node.name) or 'none'
|
||||||
self.pos = None
|
self.pos = None
|
||||||
self.size = None
|
self.size = None
|
||||||
self.contents_size = 0
|
self.contents_size = 0
|
||||||
|
@ -129,6 +129,15 @@ class Entry(object):
|
||||||
self.align_end = fdt_util.GetInt(self._node, 'align-end')
|
self.align_end = fdt_util.GetInt(self._node, 'align-end')
|
||||||
self.pos_unset = fdt_util.GetBool(self._node, 'pos-unset')
|
self.pos_unset = fdt_util.GetBool(self._node, 'pos-unset')
|
||||||
|
|
||||||
|
def SetPrefix(self, prefix):
|
||||||
|
"""Set the name prefix for a node
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prefix: Prefix to set, or '' to not use a prefix
|
||||||
|
"""
|
||||||
|
if prefix:
|
||||||
|
self.name = prefix + self.name
|
||||||
|
|
||||||
def ObtainContents(self):
|
def ObtainContents(self):
|
||||||
"""Figure out the contents of an entry.
|
"""Figure out the contents of an entry.
|
||||||
|
|
||||||
|
|
|
@ -950,5 +950,15 @@ class TestFunctional(unittest.TestCase):
|
||||||
00000000 00000004 u-boot
|
00000000 00000004 u-boot
|
||||||
''', map_data)
|
''', map_data)
|
||||||
|
|
||||||
|
def testNamePrefix(self):
|
||||||
|
"""Tests that name prefixes are used"""
|
||||||
|
_, _, map_data = self._DoReadFileDtb('56_name_prefix.dts', map=True)
|
||||||
|
self.assertEqual('''Position Size Name
|
||||||
|
00000000 00000010 section@0
|
||||||
|
00000000 00000004 ro-u-boot
|
||||||
|
00000010 00000010 section@1
|
||||||
|
00000000 00000004 rw-u-boot
|
||||||
|
''', map_data)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
30
tools/binman/test/56_name_prefix.dts
Normal file
30
tools/binman/test/56_name_prefix.dts
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
binman {
|
||||||
|
pad-byte = <0x26>;
|
||||||
|
size = <0x28>;
|
||||||
|
section@0 {
|
||||||
|
read-only;
|
||||||
|
name-prefix = "ro-";
|
||||||
|
size = <0x10>;
|
||||||
|
pad-byte = <0x21>;
|
||||||
|
|
||||||
|
u-boot {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
section@1 {
|
||||||
|
name-prefix = "rw-";
|
||||||
|
size = <0x10>;
|
||||||
|
pad-byte = <0x61>;
|
||||||
|
|
||||||
|
u-boot {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
Loading…
Add table
Reference in a new issue