From 3545e8595c944c893bc3fa64c8e4727c928cf892 Mon Sep 17 00:00:00 2001 From: Neha Malcom Francis Date: Mon, 17 Oct 2022 16:36:25 +0530 Subject: [PATCH] binman: Add support for symlinking images Adding support to symlink an image packaged using binman. Signed-off-by: Neha Malcom Francis Reviewed-by: Simon Glass --- tools/binman/binman.rst | 3 +++ tools/binman/ftest.py | 9 +++++++++ tools/binman/image.py | 6 ++++++ tools/binman/test/259_symlink.dts | 16 ++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 tools/binman/test/259_symlink.dts diff --git a/tools/binman/binman.rst b/tools/binman/binman.rst index 4ee6f41f35..d8a3d776f4 100644 --- a/tools/binman/binman.rst +++ b/tools/binman/binman.rst @@ -780,6 +780,9 @@ align-default: This means that each section must specify its own default alignment, if required. +symlink: + Adds a symlink to the image with string given in the symlink property. + Examples of the above options can be found in the tests. See the tools/binman/test directory. diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index 261107b335..232ac2cf18 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -5995,6 +5995,15 @@ fdt fdtmap Extract the devicetree blob from the fdtmap self.assertIn('Expected __bss_size symbol in vpl/u-boot-vpl', str(e.exception)) + def testSymlink(self): + """Test that image files can be named""" + retcode = self._DoTestFile('259_symlink.dts', debug=True, map=True) + self.assertEqual(0, retcode) + image = control.images['test_image'] + fname = tools.get_output_filename('test_image.bin') + sname = tools.get_output_filename('symlink_to_test.bin') + self.assertTrue(os.path.islink(sname)) + self.assertEqual(os.readlink(sname), fname) if __name__ == "__main__": unittest.main() diff --git a/tools/binman/image.py b/tools/binman/image.py index afc4b4d643..6d4bff5843 100644 --- a/tools/binman/image.py +++ b/tools/binman/image.py @@ -38,6 +38,7 @@ class Image(section.Entry_section): repacked later test_section_timeout: Use a zero timeout for section multi-threading (for testing) + symlink: Name of symlink to image Args: copy_to_orig: Copy offset/size to orig_offset/orig_size after reading @@ -97,6 +98,7 @@ class Image(section.Entry_section): if filename: self._filename = filename self.allow_repack = fdt_util.GetBool(self._node, 'allow-repack') + self._symlink = fdt_util.GetString(self._node, 'symlink') @classmethod def FromFile(cls, fname): @@ -180,6 +182,10 @@ class Image(section.Entry_section): data = self.GetPaddedData() fd.write(data) tout.info("Wrote %#x bytes" % len(data)) + # Create symlink to file if symlink given + if self._symlink is not None: + sname = tools.get_output_filename(self._symlink) + os.symlink(fname, sname) def WriteMap(self): """Write a map of the image to a .map file diff --git a/tools/binman/test/259_symlink.dts b/tools/binman/test/259_symlink.dts new file mode 100644 index 0000000000..2ee1f7f05e --- /dev/null +++ b/tools/binman/test/259_symlink.dts @@ -0,0 +1,16 @@ +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + binman { + multiple-images; + test_image { + filename = "test_image.bin"; + symlink = "symlink_to_test.bin"; + u-boot { + }; + }; + }; +}; -- 2.39.5