Yannic Moog <[email protected]> 於 2025年7月31日 週四 下午7:48寫道: > > Am Dienstag, dem 29.07.2025 um 12:48 +0000 schrieb Aristo Chen: > > Add a new test case to verify that mkimage properly detects and reports > > memory region overlaps in FIT image configurations. > > > > The test creates a FIT image with kernel and FDT components that have > > the same load address (0x40000), which should trigger the overlap > > detection logic and cause mkimage to fail with an appropriate error > > message. > > > > Test verifies: > > - mkimage returns non-zero exit code when overlap is detected > > - Error message contains "Error: Overlap detected:" > > - Error message identifies the specific overlapping components > > (kernel@1 and fdt@1) > > > > This test ensures the overlap detection feature works correctly and > > prevents deployment of FIT images with conflicting memory layouts > > that could cause runtime failures. > > > > Signed-off-by: Aristo Chen <[email protected]> > > --- > > test/py/tests/test_fit_mkimage_validate.py | 65 ++++++++++++++++++++++ > > 1 file changed, 65 insertions(+) > > > > diff --git a/test/py/tests/test_fit_mkimage_validate.py > > b/test/py/tests/test_fit_mkimage_validate.py > > index ef974c8c762..51f7f64b257 100644 > > --- a/test/py/tests/test_fit_mkimage_validate.py > > +++ b/test/py/tests/test_fit_mkimage_validate.py > > @@ -101,3 +101,68 @@ def test_fit_invalid_default_config(ubman): > > > > assert result.returncode != 0, "mkimage should fail due to missing > > default config" > > assert re.search(r"Default configuration '.*' not found under > > /configurations", result.stderr) > > + > > +def test_fit_load_addr_overlap(ubman): > > + """Test that mkimage fails when load address overlap""" > > + > > + its_fname = fit_util.make_fname(ubman, "invalid.its") > > + itb_fname = fit_util.make_fname(ubman, "invalid.itb") > > + kernel = fit_util.make_kernel(ubman, 'kernel.bin', 'kernel') > > + fdt = fit_util.make_dtb(ubman, ''' > > +/dts-v1/; > > +/ { > > + model = "Test FDT"; > > + compatible = "test"; > > +}; > > +''', 'test') > > + > > + # Write ITS with an invalid reference to a nonexistent default config > > + its_text = ''' > > +/dts-v1/; > > + > > +/ { > > + images { > > + kernel@1 { > > + description = "Test Kernel"; > > + data = /incbin/("kernel.bin"); > > + type = "kernel"; > > + arch = "sandbox"; > > + os = "linux"; > > + compression = "none"; > > + load = <0x40000>; > > + entry = <0x40000>; > > + }; > > + fdt@1 { > > + description = "Test FDT"; > > + data = /incbin/("test.dtb"); > > + type = "flat_dt"; > > + arch = "sandbox"; > > + os = "linux"; > > + compression = "none"; > > + load = <0x40000>; > > + entry = <0x40000>; > > + }; > > + }; > > + > > + configurations { > > + default = "conf@1"; > > + conf@1 { > > + kernel = "kernel@1"; > > + fdt = "fdt@1"; > > + }; > > + }; > > +}; > > +''' > > Why do you create the dts here? > I think it is best to stay consistent: create a dts file and use existing > _DoReadFileDtb and the like for the test. If I understand correctly, _DoReadFileDtb is defined in tools/binman/ftest.py, and is only for binman related test. Also I found that in test/py/tests/test_fit.py, it also defined a dts file in itself, what is the best practice to create dts file?
> > Yannic > > > + > > + with open(its_fname, 'w') as f: > > + f.write(its_text) > > + > > + mkimage = os.path.join(ubman.config.build_dir, 'tools/mkimage') > > + cmd = [mkimage, '-f', its_fname, itb_fname] > > + > > + result = subprocess.run(cmd, capture_output=True, text=True) > > + > > + assert result.returncode != 0, "mkimage should fail due to memory > > overlap" > > + assert "Error: Overlap detected:" in result.stderr > > + # Check that it identifies the specific overlapping components > > + assert "kernel@1" in result.stderr and "fdt@1" in result.stderr

