[PATCH] binman: Allow FIT binaries to have missing external blobs

Alper Nebi Yasak alpernebiyasak at gmail.com
Tue Sep 1 14:23:04 CEST 2020


On 01/09/2020 13:36, Simon Glass wrote:
> Hi Alper,
> 
> I found that evb-rk3288 fails to build with the final patch from your
> series. See u-boot-dm/testing for the tree.

I had seen your patch and assumed that nothing was already using the
allow-missing functionality in its FITs (since you're adding it now).
Looks like the version in your tree (aa3f219e) succeeds in the pipeline,
so I think there's nothing for me to do now. Thanks for fixing it.

> At present if a FIT references a missing external blob, binman reports an
> error, even if the image is supposed to allow this.
> 
> Propagate this setting down to the child sections of the FIT, so that the
> behaviour is consistent.
> 
> This is a fix-up patch to:
> 
>    binman: Build FIT image subentries with the section etype
> 
> and will be squashed into that.
> 
> Signed-off-by: Simon Glass <sjg at chromium.org>
> ---
> 
>  tools/binman/etype/fit.py                  | 15 ++++++++
>  tools/binman/ftest.py                      |  8 +++++
>  tools/binman/test/168_fit_missing_blob.dts | 41 ++++++++++++++++++++++
>  3 files changed, 64 insertions(+)
>  create mode 100644 tools/binman/test/168_fit_missing_blob.dts
> 
> diff --git a/tools/binman/etype/fit.py b/tools/binman/etype/fit.py
> index acba53aa92c..615b2fd8778 100644
> --- a/tools/binman/etype/fit.py
> +++ b/tools/binman/etype/fit.py
> @@ -169,3 +169,18 @@ class Entry_fit(Entry):
>          fdt.Sync(auto_resize=True)
>          data = fdt.GetContents()
>          return data
> +
> +    def CheckMissing(self, missing_list):
> +        """Check if any entries in this FIT have missing external blobs
> +
> +        If there are missing blobs, the entries are added to the list
> +
> +        Args:
> +            missing_list: List of Entry objects to be added to
> +        """
> +        for path, section in self._fit_sections.items():
> +            section.CheckMissing(missing_list)
> +
> +    def SetAllowMissing(self, allow_missing):
> +        for section in self._fit_sections.values():
> +            section.SetAllowMissing(allow_missing)

I saw GetAllowMissing() in section.py, doesn't this also need it?

> diff --git a/tools/binman/ftest.py b/tools/binman/ftest.py
> index 762535b5a74..e672967dbaa 100644
> --- a/tools/binman/ftest.py
> +++ b/tools/binman/ftest.py
> @@ -3515,5 +3515,13 @@ class TestFunctional(unittest.TestCase):
>                      U_BOOT_DTB_DATA)
>          self.assertEqual(expected, data)
>  
> +    def testFitExtblobMissingOk(self):
> +        """Test a FIT with a missing external blob that is allowed"""
> +        with test_util.capture_sys_output() as (stdout, stderr):
> +            self._DoTestFile('168_fit_missing_blob.dts',
> +                             allow_missing=True)
> +        err = stderr.getvalue()
> +        self.assertRegex(err, "Image 'main-section'.*missing.*: blob-ext")
> +
>  if __name__ == "__main__":
>      unittest.main()
> diff --git a/tools/binman/test/168_fit_missing_blob.dts b/tools/binman/test/168_fit_missing_blob.dts
> new file mode 100644
> index 00000000000..e007aa41d8a
> --- /dev/null
> +++ b/tools/binman/test/168_fit_missing_blob.dts
> @@ -0,0 +1,41 @@
> +// SPDX-License-Identifier: GPL-2.0+
> +
> +/dts-v1/;
> +
> +/ {
> +	#address-cells = <1>;
> +	#size-cells = <1>;
> +
> +	binman {
> +		u-boot {
> +		};
> +		fit {
> +			description = "test-desc";
> +			#address-cells = <1>;
> +			fit,fdt-list = "of-list";
> +
> +			images {
> +				kernel {
> +					description = "ATF BL31";
> +					type = "kernel";
> +					arch = "ppc";
> +					os = "linux";
> +					compression = "gzip";
> +					load = <00000000>;
> +					entry = <00000000>;
> +					hash-1 {
> +						algo = "crc32";
> +					};
> +					hash-2 {
> +						algo = "sha1";
> +					};
> +					blob-ext {
> +						filename = "missing";
> +					};
> +				};
> +			};
> +		};
> +		u-boot-nodtb {
> +		};
> +	};
> +};

Anyway, feel free to add if you need to:

Reviewed-by: Alper Nebi Yasak <alpernebiyasak at gmail.com>

(or Acked-by, or neither)


More information about the U-Boot mailing list