diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py index 6e5f020c50..6ad4a686df 100644 --- a/tools/binman/etype/fit.py +++ b/tools/binman/etype/fit.py @@ -194,7 +194,7 @@ class Entry_fit(Entry): # the FIT (e.g. "/images/kernel/u-boot"), so don't call # fsw.add_node() or _AddNode() for it. pass - elif subnode.name.startswith('@'): + elif self.GetImage().generate and subnode.name.startswith('@'): if self._fdts: # Generate notes for each FDT for seq, fdt_fname in enumerate(self._fdts): diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index ca200ae9f8..5400f76c67 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -5100,6 +5100,24 @@ fdt fdtmap Extract the devicetree blob from the fdtmap self.assertIn('Documentation is missing for modules: mkimage', 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__": unittest.main() diff --git a/tools/binman/image.py b/tools/binman/image.py index 0f0c1d29e8..cb5279c7ea 100644 --- a/tools/binman/image.py +++ b/tools/binman/image.py @@ -67,9 +67,13 @@ class Image(section.Entry_section): 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 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, - 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) self.copy_to_orig = copy_to_orig self.name = 'main-section' @@ -83,6 +87,7 @@ class Image(section.Entry_section): self.use_expanded = use_expanded self.test_section_timeout = False self.bintools = {} + self.generate = generate if not test: self.ReadNode() @@ -131,7 +136,7 @@ class Image(section.Entry_section): # Return an Image with the associated nodes root = dtb.GetRoot() 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.fdtmap_dtb = dtb diff --git a/tools/binman/test/219_fit_gennode.dts b/tools/binman/test/219_fit_gennode.dts new file mode 100644 index 0000000000..e9eda29983 --- /dev/null +++ b/tools/binman/test/219_fit_gennode.dts @@ -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 { + }; + }; +}; diff --git a/tools/moveconfig.py b/tools/moveconfig.py index 35fe6710d7..1bcf58caf1 100755 --- a/tools/moveconfig.py +++ b/tools/moveconfig.py @@ -205,12 +205,12 @@ def show_diff(alines, blines, file_path, color_enabled): tofile=os.path.join('b', file_path)) for line in diff: - if line[0] == '-' and line[1] != '-': - print(color_text(color_enabled, COLOR_RED, line), end=' ') - elif line[0] == '+' and line[1] != '+': - print(color_text(color_enabled, COLOR_GREEN, line), end=' ') + if line.startswith('-') and not line.startswith('--'): + print(color_text(color_enabled, COLOR_RED, line)) + elif line.startswith('+') and not line.startswith('++'): + print(color_text(color_enabled, COLOR_GREEN, line)) else: - print(line, end=' ') + print(line) def extend_matched_lines(lines, matched, pre_patterns, post_patterns, extend_pre, extend_post): @@ -368,7 +368,7 @@ def cleanup_one_header(header_path, patterns, args): matched = [] for i, line in enumerate(lines): - if i - 1 in matched and lines[i - 1][-2:] == '\\\n': + if i - 1 in matched and lines[i - 1].endswith('\\'): matched.append(i) continue for pattern in patterns: @@ -380,9 +380,9 @@ def cleanup_one_header(header_path, patterns, args): return # remove empty #ifdef ... #endif, successive blank lines - pattern_if = re.compile(r'#\s*if(def|ndef)?\W') # #if, #ifdef, #ifndef - pattern_elif = re.compile(r'#\s*el(if|se)\W') # #elif, #else - pattern_endif = re.compile(r'#\s*endif\W') # #endif + pattern_if = re.compile(r'#\s*if(def|ndef)?\b') # #if, #ifdef, #ifndef + pattern_elif = re.compile(r'#\s*el(if|se)\b') # #elif, #else + pattern_endif = re.compile(r'#\s*endif\b') # #endif pattern_blank = re.compile(r'^\s*$') # empty line while True: @@ -424,8 +424,8 @@ def cleanup_headers(configs, args): patterns = [] for config in configs: - patterns.append(re.compile(r'#\s*define\s+%s\W' % config)) - patterns.append(re.compile(r'#\s*undef\s+%s\W' % config)) + patterns.append(re.compile(r'#\s*define\s+%s\b' % config)) + patterns.append(re.compile(r'#\s*undef\s+%s\b' % config)) for dir in 'include', 'arch', 'board': for (dirpath, dirnames, filenames) in os.walk(dir): @@ -451,7 +451,7 @@ def cleanup_one_extra_option(defconfig_path, configs, args): """ start = 'CONFIG_SYS_EXTRA_OPTIONS="' - end = '"\n' + end = '"' lines = read_file(defconfig_path) @@ -812,7 +812,7 @@ class KconfigParser: for (action, value) in self.results: if action != ACTION_MOVE: continue - if not value + '\n' in defconfig_lines: + if not value in defconfig_lines: log += color_text(self.args.color, COLOR_YELLOW, "'%s' was removed by savedefconfig.\n" % value)