mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-19 19:34:35 +00:00
binman: Support alignment of files
When packing files it is sometimes useful to align the start of each file, e.g. if the flash driver can only access 32-bit-aligned data. Provides a new property to support this. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
5af9ebc4bc
commit
6eb9932668
7 changed files with 53 additions and 1 deletions
|
@ -22,6 +22,7 @@ class Entry_files(Entry_section):
|
||||||
- files-compress: Compression algorithm to use:
|
- files-compress: Compression algorithm to use:
|
||||||
none: No compression
|
none: No compression
|
||||||
lz4: Use lz4 compression (via 'lz4' command-line utility)
|
lz4: Use lz4 compression (via 'lz4' command-line utility)
|
||||||
|
- files-align: Align each file to the given alignment
|
||||||
|
|
||||||
This entry reads a number of files and places each in a separate sub-entry
|
This entry reads a number of files and places each in a separate sub-entry
|
||||||
within this entry. To access these you need to enable device-tree updates
|
within this entry. To access these you need to enable device-tree updates
|
||||||
|
@ -38,6 +39,7 @@ class Entry_files(Entry_section):
|
||||||
self.Raise("Missing 'pattern' property")
|
self.Raise("Missing 'pattern' property")
|
||||||
self._files_compress = fdt_util.GetString(self._node, 'files-compress',
|
self._files_compress = fdt_util.GetString(self._node, 'files-compress',
|
||||||
'none')
|
'none')
|
||||||
|
self._files_align = fdt_util.GetInt(self._node, 'files-align');
|
||||||
self._require_matches = fdt_util.GetBool(self._node,
|
self._require_matches = fdt_util.GetBool(self._node,
|
||||||
'require-matches')
|
'require-matches')
|
||||||
|
|
||||||
|
@ -55,6 +57,8 @@ class Entry_files(Entry_section):
|
||||||
state.AddString(subnode, 'type', 'blob')
|
state.AddString(subnode, 'type', 'blob')
|
||||||
state.AddString(subnode, 'filename', fname)
|
state.AddString(subnode, 'filename', fname)
|
||||||
state.AddString(subnode, 'compress', self._files_compress)
|
state.AddString(subnode, 'compress', self._files_compress)
|
||||||
|
if self._files_align:
|
||||||
|
state.AddInt(subnode, 'align', self._files_align)
|
||||||
|
|
||||||
# Read entries again, now that we have some
|
# Read entries again, now that we have some
|
||||||
self._ReadEntries()
|
self._ReadEntries()
|
||||||
|
|
|
@ -4218,6 +4218,14 @@ class TestFunctional(unittest.TestCase):
|
||||||
self.assertEqual(orig_image.GetEntries().keys(),
|
self.assertEqual(orig_image.GetEntries().keys(),
|
||||||
image.GetEntries().keys())
|
image.GetEntries().keys())
|
||||||
|
|
||||||
|
def testFilesAlign(self):
|
||||||
|
"""Test alignment with files"""
|
||||||
|
data = self._DoReadFile('190_files_align.dts')
|
||||||
|
|
||||||
|
# The first string is 15 bytes so will align to 16
|
||||||
|
expect = FILES_DATA[:15] + b'\0' + FILES_DATA[15:]
|
||||||
|
self.assertEqual(expect, data)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -314,6 +314,16 @@ def AddString(node, prop, value):
|
||||||
for n in GetUpdateNodes(node):
|
for n in GetUpdateNodes(node):
|
||||||
n.AddString(prop, value)
|
n.AddString(prop, value)
|
||||||
|
|
||||||
|
def AddInt(node, prop, value):
|
||||||
|
"""Add a new string property to affected device trees
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prop_name: Name of property
|
||||||
|
val: Integer value of property
|
||||||
|
"""
|
||||||
|
for n in GetUpdateNodes(node):
|
||||||
|
n.AddInt(prop, value)
|
||||||
|
|
||||||
def SetInt(node, prop, value, for_repack=False):
|
def SetInt(node, prop, value, for_repack=False):
|
||||||
"""Update an integer property in affected device trees with an integer value
|
"""Update an integer property in affected device trees with an integer value
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
binman {
|
binman {
|
||||||
files {
|
files {
|
||||||
pattern = "files/*.dat";
|
pattern = "files/*.dat";
|
||||||
compress = "none";
|
files-compress = "none";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
12
tools/binman/test/190_files_align.dts
Normal file
12
tools/binman/test/190_files_align.dts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
binman {
|
||||||
|
files {
|
||||||
|
pattern = "files/*.dat";
|
||||||
|
files-compress = "none";
|
||||||
|
files-align = <4>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -463,6 +463,18 @@ class Node:
|
||||||
val = bytes(val, 'utf-8')
|
val = bytes(val, 'utf-8')
|
||||||
self.AddData(prop_name, val + b'\0')
|
self.AddData(prop_name, val + b'\0')
|
||||||
|
|
||||||
|
def AddInt(self, prop_name, val):
|
||||||
|
"""Add a new integer property to a node
|
||||||
|
|
||||||
|
The device tree is marked dirty so that the value will be written to
|
||||||
|
the blob on the next sync.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prop_name: Name of property to add
|
||||||
|
val: Integer value of property
|
||||||
|
"""
|
||||||
|
self.AddData(prop_name, struct.pack('>I', val))
|
||||||
|
|
||||||
def AddSubnode(self, name):
|
def AddSubnode(self, name):
|
||||||
"""Add a new subnode to the node
|
"""Add a new subnode to the node
|
||||||
|
|
||||||
|
|
|
@ -397,6 +397,12 @@ class TestProp(unittest.TestCase):
|
||||||
data = self.fdt.getprop(self.node.Offset(), 'one')
|
data = self.fdt.getprop(self.node.Offset(), 'one')
|
||||||
self.assertEqual(1, fdt32_to_cpu(data))
|
self.assertEqual(1, fdt32_to_cpu(data))
|
||||||
|
|
||||||
|
val = 1234
|
||||||
|
self.node.AddInt('integer', val)
|
||||||
|
self.dtb.Sync(auto_resize=True)
|
||||||
|
data = self.fdt.getprop(self.node.Offset(), 'integer')
|
||||||
|
self.assertEqual(val, fdt32_to_cpu(data))
|
||||||
|
|
||||||
val = '123' + chr(0) + '456'
|
val = '123' + chr(0) + '456'
|
||||||
self.node.AddString('string', val)
|
self.node.AddString('string', val)
|
||||||
self.dtb.Sync(auto_resize=True)
|
self.dtb.Sync(auto_resize=True)
|
||||||
|
|
Loading…
Add table
Reference in a new issue