From: Simon Glass Date: Fri, 1 Jun 2018 15:38:11 +0000 (-0600) Subject: binman: Allow unit addresses for binaries X-Git-Tag: v2018.07-rc2~75^2~11 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=dd57c13bbc28df6f1bc849ec55d1703f4ca0398e;p=u-boot binman: Allow unit addresses for binaries Allow the same binary to appear multiple times in an image by using the device-tree unit-address feature (u-boot@0, u-boot@1). Signed-off-by: Simon Glass --- diff --git a/tools/binman/README b/tools/binman/README index b20098177e..196dda1fb4 100644 --- a/tools/binman/README +++ b/tools/binman/README @@ -387,6 +387,10 @@ end-at-4gb: Examples of the above options can be found in the tests. See the tools/binman/test directory. +It is possible to have the same binary appear multiple times in the image, +either by using a unit number suffix (u-boot@0, u-boot@1) or by using a +different name for each and specifying the type with the 'type' attribute. + Special properties ------------------ diff --git a/tools/binman/etype/entry.py b/tools/binman/etype/entry.py index c331312c49..23e436a2e9 100644 --- a/tools/binman/etype/entry.py +++ b/tools/binman/etype/entry.py @@ -72,7 +72,12 @@ class Entry(object): """ if not etype: etype = fdt_util.GetString(node, 'type', node.name) + + # Convert something like 'u-boot@0' to 'u_boot' since we are only + # interested in the type. module_name = etype.replace('-', '_') + if '@' in module_name: + module_name = module_name.split('@')[0] module = modules.get(module_name) # Import the module if we have not already done so. diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py index a3abbc4b84..b5e8736fbb 100644 --- a/tools/binman/ftest.py +++ b/tools/binman/ftest.py @@ -909,6 +909,11 @@ class TestFunctional(unittest.TestCase): sym_values + U_BOOT_SPL_DATA[16:]) self.assertEqual(expected, data) + def testPackUnitAddress(self): + """Test that we support multiple binaries with the same name""" + data = self._DoReadFile('54_unit_address.dts') + self.assertEqual(U_BOOT_DATA + U_BOOT_DATA, data) + if __name__ == "__main__": unittest.main() diff --git a/tools/binman/test/54_unit_address.dts b/tools/binman/test/54_unit_address.dts new file mode 100644 index 0000000000..3216dbbcc1 --- /dev/null +++ b/tools/binman/test/54_unit_address.dts @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: GPL-2.0+ + +/dts-v1/; + +/ { + #address-cells = <1>; + #size-cells = <1>; + + binman { + u-boot@0 { + }; + u-boot@1 { + }; + }; +};