mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
binman: Create FIT subentries in the FIT section, not its parent
When reading images from a file, each entry's data is read from its parent section as specified in the Entry.Create() call that created it. The FIT entry type has been creating its subentries under its parent (their grandparent), as creating them under the FIT entry resulted in an error until FIT was converted into a proper section. FIT subentries have their offsets relative to the FIT section, and reading those offsets in the parent section results in wrong data. The subentries rightfully belong under the FIT entries, so create them there. Add tests checking that we can extract the correct data for a FIT entry and its subentries. Signed-off-by: Alper Nebi Yasak <alpernebiyasak@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
e736878b08
commit
74d3b2311d
3 changed files with 110 additions and 1 deletions
|
@ -380,7 +380,7 @@ class Entry_fit(Entry_section):
|
||||||
# section entries for them here to merge the content subnodes
|
# section entries for them here to merge the content subnodes
|
||||||
# together and put the merged contents in the subimage node's
|
# together and put the merged contents in the subimage node's
|
||||||
# 'data' property later.
|
# 'data' property later.
|
||||||
entry = Entry.Create(self.section, node, etype='section')
|
entry = Entry.Create(self, node, etype='section')
|
||||||
entry.ReadNode()
|
entry.ReadNode()
|
||||||
# The hash subnodes here are for mkimage, not binman.
|
# The hash subnodes here are for mkimage, not binman.
|
||||||
entry.SetUpdateHash(False)
|
entry.SetUpdateHash(False)
|
||||||
|
|
|
@ -5620,6 +5620,41 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
|
||||||
self.assertIsNotNone(path)
|
self.assertIsNotNone(path)
|
||||||
self.assertEqual(expected_fdtmap, fdtmap)
|
self.assertEqual(expected_fdtmap, fdtmap)
|
||||||
|
|
||||||
|
def testExtractFit(self):
|
||||||
|
"""Test extracting a FIT section"""
|
||||||
|
self._DoReadFileRealDtb('233_fit_extract_replace.dts')
|
||||||
|
image_fname = tools.get_output_filename('image.bin')
|
||||||
|
|
||||||
|
fit_data = control.ReadEntry(image_fname, 'fit')
|
||||||
|
fit = fdt.Fdt.FromData(fit_data)
|
||||||
|
fit.Scan()
|
||||||
|
|
||||||
|
# Check subentry data inside the extracted fit
|
||||||
|
for node_path, expected in [
|
||||||
|
('/images/kernel', U_BOOT_DATA),
|
||||||
|
('/images/fdt-1', U_BOOT_NODTB_DATA),
|
||||||
|
('/images/scr-1', COMPRESS_DATA),
|
||||||
|
]:
|
||||||
|
node = fit.GetNode(node_path)
|
||||||
|
data = fit.GetProps(node)['data'].bytes
|
||||||
|
self.assertEqual(expected, data)
|
||||||
|
|
||||||
|
def testExtractFitSubentries(self):
|
||||||
|
"""Test extracting FIT section subentries"""
|
||||||
|
self._DoReadFileRealDtb('233_fit_extract_replace.dts')
|
||||||
|
image_fname = tools.get_output_filename('image.bin')
|
||||||
|
|
||||||
|
for entry_path, expected in [
|
||||||
|
('fit/kernel', U_BOOT_DATA),
|
||||||
|
('fit/kernel/u-boot', U_BOOT_DATA),
|
||||||
|
('fit/fdt-1', U_BOOT_NODTB_DATA),
|
||||||
|
('fit/fdt-1/u-boot-nodtb', U_BOOT_NODTB_DATA),
|
||||||
|
('fit/scr-1', COMPRESS_DATA),
|
||||||
|
('fit/scr-1/blob', COMPRESS_DATA),
|
||||||
|
]:
|
||||||
|
data = control.ReadEntry(image_fname, entry_path)
|
||||||
|
self.assertEqual(expected, data)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
74
tools/binman/test/233_fit_extract_replace.dts
Normal file
74
tools/binman/test/233_fit_extract_replace.dts
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
/ {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
binman {
|
||||||
|
allow-repack;
|
||||||
|
|
||||||
|
fill {
|
||||||
|
size = <0x1000>;
|
||||||
|
fill-byte = [77];
|
||||||
|
};
|
||||||
|
|
||||||
|
fit {
|
||||||
|
description = "test-desc";
|
||||||
|
#address-cells = <1>;
|
||||||
|
|
||||||
|
images {
|
||||||
|
kernel {
|
||||||
|
description = "test u-boot";
|
||||||
|
type = "kernel";
|
||||||
|
arch = "arm64";
|
||||||
|
os = "linux";
|
||||||
|
compression = "none";
|
||||||
|
load = <00000000>;
|
||||||
|
entry = <00000000>;
|
||||||
|
|
||||||
|
u-boot {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
fdt-1 {
|
||||||
|
description = "test u-boot-nodtb";
|
||||||
|
type = "flat_dt";
|
||||||
|
arch = "arm64";
|
||||||
|
compression = "none";
|
||||||
|
|
||||||
|
u-boot-nodtb {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
scr-1 {
|
||||||
|
description = "test blob";
|
||||||
|
type = "script";
|
||||||
|
arch = "arm64";
|
||||||
|
compression = "none";
|
||||||
|
|
||||||
|
blob {
|
||||||
|
filename = "compress";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
configurations {
|
||||||
|
default = "conf-1";
|
||||||
|
|
||||||
|
conf-1 {
|
||||||
|
description = "Kernel with FDT blob";
|
||||||
|
kernel = "kernel";
|
||||||
|
fdt = "fdt-1";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
u-boot-dtb {
|
||||||
|
};
|
||||||
|
|
||||||
|
fdtmap {
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
Loading…
Reference in a new issue