1
0
mirror of https://xff.cz/git/u-boot/ synced 2025-09-02 09:12:08 +02:00

binman: Skip node generation for images read from files

We can and should run the node generator only when creating a new image.
When we read it back, there is no need to generate nodes - they already
exits, and binman does not dive that deep into the image - and there is
no way to provide the required fdt-list. So store the mode in the image
object so that Entry_fit can simply skip generator nodes when reading
them from an fdtmap.

This unbreaks all read-backs of images that contain generator nodes in
their fdtmap. To confirm this, add a corresponding test case.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Tested-by: Simon Glass <sjg@chromium.org>
Add SPDX to dts file:
Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Jan Kiszka
2022-01-28 20:37:53 +01:00
committed by Simon Glass
parent 6c928c63a1
commit fcc87efdf3
4 changed files with 52 additions and 3 deletions

View File

@@ -194,7 +194,7 @@ class Entry_fit(Entry):
# the FIT (e.g. "/images/kernel/u-boot"), so don't call # the FIT (e.g. "/images/kernel/u-boot"), so don't call
# fsw.add_node() or _AddNode() for it. # fsw.add_node() or _AddNode() for it.
pass pass
elif subnode.name.startswith('@'): elif self.GetImage().generate and subnode.name.startswith('@'):
if self._fdts: if self._fdts:
# Generate notes for each FDT # Generate notes for each FDT
for seq, fdt_fname in enumerate(self._fdts): for seq, fdt_fname in enumerate(self._fdts):

View File

@@ -5100,6 +5100,24 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertIn('Documentation is missing for modules: mkimage', self.assertIn('Documentation is missing for modules: mkimage',
str(e.exception)) str(e.exception))
def testListWithGenNode(self):
"""Check handling of an FDT map when the section cannot be found"""
entry_args = {
'of-list': 'test-fdt1 test-fdt2',
}
data = self._DoReadFileDtb(
'219_fit_gennode.dts',
entry_args=entry_args,
use_real_dtb=True,
extra_indirs=[os.path.join(self._indir, TEST_FDT_SUBDIR)])
try:
tmpdir, updated_fname = self._SetupImageInTmpdir()
with test_util.capture_sys_output() as (stdout, stderr):
self._RunBinman('ls', '-i', updated_fname)
finally:
shutil.rmtree(tmpdir)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@@ -67,9 +67,13 @@ class Image(section.Entry_section):
does not exist in binman. This is useful if an image was created by does not exist in binman. This is useful if an image was created by
binman a newer version of binman but we want to list it in an older binman a newer version of binman but we want to list it in an older
version which does not support all the entry types. version which does not support all the entry types.
generate: If true, generator nodes are processed. If false they are
ignored which is useful when an existing image is read back from a
file.
""" """
def __init__(self, name, node, copy_to_orig=True, test=False, def __init__(self, name, node, copy_to_orig=True, test=False,
ignore_missing=False, use_expanded=False, missing_etype=False): ignore_missing=False, use_expanded=False, missing_etype=False,
generate=True):
super().__init__(None, 'section', node, test=test) super().__init__(None, 'section', node, test=test)
self.copy_to_orig = copy_to_orig self.copy_to_orig = copy_to_orig
self.name = 'main-section' self.name = 'main-section'
@@ -83,6 +87,7 @@ class Image(section.Entry_section):
self.use_expanded = use_expanded self.use_expanded = use_expanded
self.test_section_timeout = False self.test_section_timeout = False
self.bintools = {} self.bintools = {}
self.generate = generate
if not test: if not test:
self.ReadNode() self.ReadNode()
@@ -131,7 +136,7 @@ class Image(section.Entry_section):
# Return an Image with the associated nodes # Return an Image with the associated nodes
root = dtb.GetRoot() root = dtb.GetRoot()
image = Image('image', root, copy_to_orig=False, ignore_missing=True, image = Image('image', root, copy_to_orig=False, ignore_missing=True,
missing_etype=True) missing_etype=True, generate=False)
image.image_node = fdt_util.GetString(root, 'image-node', 'image') image.image_node = fdt_util.GetString(root, 'image-node', 'image')
image.fdtmap_dtb = dtb image.fdtmap_dtb = dtb

View File

@@ -0,0 +1,26 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
fit {
description = "test-desc";
#address-cells = <1>;
fit,fdt-list = "of-list";
images {
@fdt-SEQ {
description = "fdt-NAME.dtb";
type = "flat_dt";
compression = "none";
};
};
};
fdtmap {
};
};
};