[PATCH v2 6/6] RFC: binman: Improve allow missing for mkimage entry
Simon Glass
sjg at chromium.org
Tue Feb 14 20:48:59 CET 2023
Hi Jonas,
On Tue, 14 Feb 2023 at 03:34, Jonas Karlman <jonas at kwiboo.se> wrote:
>
> Implement CheckMissing and CheckOptional methods that is adapted to
> Entry_mkimage in order to improve support for allow missing flag.
>
> Use collect_contents_to_file in multiple-data-files handling to improve
> support for allow missing and fake blobs handling.
>
> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
> ---
> Building for RK3568 without ROCKCHIP_TPL will result in the following
> error message, regardless if BINMAN_ALLOW_MISSING is used or not.
>
> binman: Filename 'rockchip-tpl' not found in input path (...)
>
> With this patch and using BINMAN_ALLOW_MISSING=1 a new external blob
> with no content is created and then passed to mkimage, resulting in an
> error from the mkimage command.
>
> binman: Error 255 running 'mkimage -d ./mkimage-0.simple-bin.mkimage:./mkimage-1.simple-bin.mkimage -n rk3568 -T rksd ./idbloader.img': mkimage: Can't read ./mkimage-0.simple-bin.mkimage: Invalid argument
>
> If the --fake-ext-blobs argument is also used I get the message I was
> expecting to see from the beginning.
>
> Image 'main-section' is missing external blobs and is non-functional: rockchip-tpl
>
> /binman/simple-bin/mkimage/rockchip-tpl:
> An external TPL is required to initialize DRAM. Get the external TPL
> binary and build with ROCKCHIP_TPL=/path/to/ddr.bin. One possible source
> for the external TPL binary is https://github.com/rockchip-linux/rkbin.
> Image 'main-section' has faked external blobs and is non-functional: rockchip-tpl
>
> Some images are invalid
>
> Not sure how this should work, but I was expecting to see the message
> about the missing rockchip-tpl from the beginning instead of the generic
> "not found in input path" message. At leas with BINMAN_ALLOW_MISSING=1.
>
> tools/binman/etype/mkimage.py | 37 +++++++++++++++++++++++++++++++----
> 1 file changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/tools/binman/etype/mkimage.py b/tools/binman/etype/mkimage.py
> index cb264c3cad0b..44510a8c40ba 100644
> --- a/tools/binman/etype/mkimage.py
> +++ b/tools/binman/etype/mkimage.py
> @@ -153,10 +153,12 @@ class Entry_mkimage(Entry):
> if self._multiple_data_files:
> fnames = []
> uniq = self.GetUniqueName()
> - for entry in self._mkimage_entries.values():
> - if not entry.ObtainContents(fake_size=fake_size):
> + for idx, entry in enumerate(self._mkimage_entries.values()):
> + entry_data, entry_fname, _ = self.collect_contents_to_file(
> + [entry], 'mkimage-%s' % idx, fake_size)
> + if entry_data is None:
This is OK, I suppose, but I'm not quite sure what actually changes
here, other than writing each entry to a file?
Also, if you do this, please add / extend a test that checks that the
output files are written, since there is otherwise no coverage here.
What test uses these optional mkimage pieces?
> return False
> - fnames.append(tools.get_input_filename(entry.GetDefaultFilename()))
> + fnames.append(entry_fname)
> input_fname = ":".join(fnames)
> else:
> data, input_fname, uniq = self.collect_contents_to_file(
> @@ -165,7 +167,7 @@ class Entry_mkimage(Entry):
> return False
> if self._imagename:
> image_data, imagename_fname, _ = self.collect_contents_to_file(
> - [self._imagename], 'mkimage-n', 1024)
> + [self._imagename], 'mkimage-n', fake_size)
> if image_data is None:
> return False
> outfile = self._filename if self._filename else 'mkimage-out.%s' % uniq
> @@ -216,6 +218,20 @@ class Entry_mkimage(Entry):
> if self._imagename:
> self._imagename.SetAllowFakeBlob(allow_fake)
>
> + def CheckMissing(self, missing_list):
> + """Check if any entries in this section have missing external blobs
> +
> + If there are missing (non-optional) blobs, the entries are added to the
> + list
> +
> + Args:
> + missing_list: List of Entry objects to be added to
> + """
> + for entry in self._mkimage_entries.values():
> + entry.CheckMissing(missing_list)
> + if self._imagename:
> + self._imagename.CheckMissing(missing_list)
> +
> def CheckFakedBlobs(self, faked_blobs_list):
> """Check if any entries in this section have faked external blobs
>
> @@ -229,6 +245,19 @@ class Entry_mkimage(Entry):
> if self._imagename:
> self._imagename.CheckFakedBlobs(faked_blobs_list)
>
> + def CheckOptional(self, optional_list):
> + """Check the section for missing but optional external blobs
> +
> + If there are missing (optional) blobs, the entries are added to the list
> +
> + Args:
> + optional_list (list): List of Entry objects to be added to
> + """
> + for entry in self._mkimage_entries.values():
> + entry.CheckOptional(optional_list)
> + if self._imagename:
> + self._imagename.CheckOptional(optional_list)
> +
> def AddBintools(self, btools):
> super().AddBintools(btools)
> self.mkimage = self.AddBintool(btools, 'mkimage')
> --
> 2.39.1
>
Regards,
Simon
More information about the U-Boot
mailing list