[PATCH] binman: Support templating with multiple images

Jan Kiszka jan.kiszka at siemens.com
Fri Jul 7 16:04:06 CEST 2023


On 07.07.23 14:40, Simon Glass wrote:
> Allow a template to appear in the top level description when using
> multiple images.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
>  tools/binman/control.py                  |  5 ++--
>  tools/binman/ftest.py                    | 12 ++++++++++
>  tools/binman/test/287_template_multi.dts | 29 ++++++++++++++++++++++++
>  3 files changed, 44 insertions(+), 2 deletions(-)
>  create mode 100644 tools/binman/test/287_template_multi.dts
> 
> diff --git a/tools/binman/control.py b/tools/binman/control.py
> index 0f98e9904fb1..b334fbc8ac8f 100644
> --- a/tools/binman/control.py
> +++ b/tools/binman/control.py
> @@ -57,8 +57,9 @@ def _ReadImageDesc(binman_node, use_expanded):
>      images = OrderedDict()
>      if 'multiple-images' in binman_node.props:
>          for node in binman_node.subnodes:
> -            images[node.name] = Image(node.name, node,
> -                                      use_expanded=use_expanded)
> +            if 'template' not in node.name:
> +                images[node.name] = Image(node.name, node,
> +                                          use_expanded=use_expanded)
>      else:
>          images['image'] = Image('image', binman_node, use_expanded=use_expanded)
>      return images
> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index 389d3906371a..c783424c91da 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -6771,6 +6771,18 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
>          second = U_BOOT_DATA + b'#' + VGA_DATA + U_BOOT_DTB_DATA
>          self.assertEqual(U_BOOT_IMG_DATA + first + second, data)
>  
> +    def testEntryTemplateBlobMulti(self):
> +        """Test using a template with 'multiple-images' enabled"""
> +        TestFunctional._MakeInputFile('my-blob.bin', b'blob')
> +        TestFunctional._MakeInputFile('my-blob2.bin', b'other')
> +        retcode = self._DoTestFile('287_template_multi.dts')
> +
> +        self.assertEqual(0, retcode)
> +        image = control.images['image']
> +        image_fname = tools.get_output_filename('my-image.bin')
> +        data = tools.read_file(image_fname)
> +        self.assertEqual(b'blob@@@@other', data)
> +
>  
>  if __name__ == "__main__":
>      unittest.main()
> diff --git a/tools/binman/test/287_template_multi.dts b/tools/binman/test/287_template_multi.dts
> new file mode 100644
> index 000000000000..15bd8701c671
> --- /dev/null
> +++ b/tools/binman/test/287_template_multi.dts
> @@ -0,0 +1,29 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/dts-v1/;

Duplicate.

> +/ {
> +	binman: binman {
> +		multiple-images;
> +
> +		my_template: template {
> +			blob-ext at 0 {
> +				filename = "my-blob.bin";
> +				offset = <0>;
> +			};
> +			blob-ext at 8 {
> +				offset = <8>;
> +			};
> +		};
> +
> +		image {
> +			pad-byte = <0x40>;
> +			filename = "my-image.bin";
> +			insert-template = <&my_template>;
> +			blob-ext at 8 {
> +				filename = "my-blob2.bin";
> +			};
> +		};
> +	};
> +};

For the sake of context:

echo 1234 > my-blob.bin
echo 5678 > my-blob2.bin
dtc tools/binman/test/287_template_multi.dts -o binman-test.dtb
tools/binman/binman build -d binman-test.dtb -O .

binman: Node '/binman/image/blob-ext at 0': Offset 0x0 (0) overlaps with previous entry '/binman/image/blob-ext at 8' ending at 0xd (13)

Jan

-- 
Siemens AG, Technology
Competence Center Embedded Linux



More information about the U-Boot mailing list