binman: Add support for symlinking images

Adding support to symlink an image packaged using binman.

Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Neha Malcom Francis 2022-10-17 16:36:25 +05:30 committed by Simon Glass
parent f29f98d1e4
commit 3545e8595c
4 changed files with 34 additions and 0 deletions

View File

@ -780,6 +780,9 @@ align-default:
This means that each section must specify its own default alignment, if This means that each section must specify its own default alignment, if
required. 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 Examples of the above options can be found in the tests. See the
tools/binman/test directory. tools/binman/test directory.

View File

@ -5995,6 +5995,15 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertIn('Expected __bss_size symbol in vpl/u-boot-vpl', self.assertIn('Expected __bss_size symbol in vpl/u-boot-vpl',
str(e.exception)) 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__": if __name__ == "__main__":
unittest.main() unittest.main()

View File

@ -38,6 +38,7 @@ class Image(section.Entry_section):
repacked later repacked later
test_section_timeout: Use a zero timeout for section multi-threading test_section_timeout: Use a zero timeout for section multi-threading
(for testing) (for testing)
symlink: Name of symlink to image
Args: Args:
copy_to_orig: Copy offset/size to orig_offset/orig_size after reading copy_to_orig: Copy offset/size to orig_offset/orig_size after reading
@ -97,6 +98,7 @@ class Image(section.Entry_section):
if filename: if filename:
self._filename = filename self._filename = filename
self.allow_repack = fdt_util.GetBool(self._node, 'allow-repack') self.allow_repack = fdt_util.GetBool(self._node, 'allow-repack')
self._symlink = fdt_util.GetString(self._node, 'symlink')
@classmethod @classmethod
def FromFile(cls, fname): def FromFile(cls, fname):
@ -180,6 +182,10 @@ class Image(section.Entry_section):
data = self.GetPaddedData() data = self.GetPaddedData()
fd.write(data) fd.write(data)
tout.info("Wrote %#x bytes" % len(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): def WriteMap(self):
"""Write a map of the image to a .map file """Write a map of the image to a .map file

View File

@ -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 {
};
};
};
};