binman: add support for skipping file concatenation for mkimage
Some image types handled by mkimage require the datafiles to be passed independently (-d data1:data2) for specific handling of each. A concatenation of datafiles prior to passing them to mkimage wouldn't work. That is the case for rkspi for example which requires page alignment and only writing 2KB every 4KB. This adds the ability to tell binman to pass the datafiles without prior concatenation to mkimage, by adding the multiple-data-files boolean property to the mkimage node. Cc: Quentin Schulz <foss+uboot@0leil.net> Signed-off-by: Quentin Schulz <quentin.schulz@theobroma-systems.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:

committed by
Kever Yang

parent
7a81a44caf
commit
4d91df0548
@@ -5898,6 +5898,29 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
|
||||
self.assertIn("Node '/binman/u-boot-dtb': The zstd compression "
|
||||
"requires a length header", str(e.exception))
|
||||
|
||||
def testMkimageMultipleDataFiles(self):
|
||||
"""Test passing multiple files to mkimage in a mkimage entry"""
|
||||
data = self._DoReadFile('252_mkimage_mult_data.dts')
|
||||
# Size of files are packed in their 4B big-endian format
|
||||
expect = struct.pack('>I', len(U_BOOT_TPL_DATA))
|
||||
expect += struct.pack('>I', len(U_BOOT_SPL_DATA))
|
||||
# Size info is always followed by a 4B zero value.
|
||||
expect += tools.get_bytes(0, 4)
|
||||
expect += U_BOOT_TPL_DATA
|
||||
# All but last files are 4B-aligned
|
||||
align_pad = len(U_BOOT_TPL_DATA) % 4
|
||||
if align_pad:
|
||||
expect += tools.get_bytes(0, align_pad)
|
||||
expect += U_BOOT_SPL_DATA
|
||||
self.assertEqual(expect, data[-len(expect):])
|
||||
|
||||
def testMkimageMultipleNoContent(self):
|
||||
"""Test passing multiple data files to mkimage with one data file having no content"""
|
||||
with self.assertRaises(ValueError) as exc:
|
||||
self._DoReadFile('253_mkimage_mult_no_content.dts')
|
||||
self.assertIn('Could not complete processing of contents',
|
||||
str(exc.exception))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
Reference in New Issue
Block a user