binman: add faked optional entry case in CheckForProblems

When having an entry that is marked as optional and is missing in the
final image, the following output is observed:

  CFGS    spl/u-boot-spl.cfgout
  BINMAN  .binman_stamp
Image 'image' has faked external blobs and is non-functional: tee.bin

Image 'image' is missing optional external blobs but is still functional: tee-os

/binman/section/fit/images/tee/tee-os (tee.bin):
   See the documentation for your board. You may need to build Open Portable
   Trusted Execution Environment (OP-TEE) and build with TEE=/path/to/tee.bin

Some images are invalid
make: *** [Makefile:1135: .binman_stamp] Error 103

To solve this contradictory messaging, when checking the faked blob
list, remove entries that are allowed to be missing. Instead add an
info message for faked optional blobs. Also reduce verbosity of the
optional image warning to an info message.

Signed-off-by: Yannic Moog <y.moog@phytec.de>
Reviewed-by: Bryan Brattlof <bb@ti.com>
This commit is contained in:
Yannic Moog 2025-06-13 14:02:43 +02:00 committed by Tom Rini
parent 21bc3433a4
commit f5817e05ef

View File

@ -645,14 +645,27 @@ def CheckForProblems(image):
_ShowHelpForMissingBlobs(tout.ERROR, missing_list)
faked_list = []
faked_optional_list = []
faked_required_list = []
image.CheckFakedBlobs(faked_list)
if faked_list:
for e in faked_list:
if e.optional:
faked_optional_list.append(e)
else:
faked_required_list.append(e)
if faked_required_list:
tout.warning(
"Image '%s' has faked external blobs and is non-functional: %s\n" %
(image.name, ' '.join([os.path.basename(e.GetDefaultFilename())
for e in faked_list])))
for e in faked_required_list])))
optional_list = []
# For optional blobs, we should inform the user when the blob is not present. This will come as
# a warning since it may not be immediately apparent that something is missing otherwise.
# E.g. user thinks they supplied a blob, but there is no info of the contrary if they made an
# error.
# Faked optional blobs are not relevant for final images (as they are dropped anyway) so we
# will omit the message with default verbosity.
image.CheckOptional(optional_list)
if optional_list:
tout.warning(
@ -660,6 +673,12 @@ def CheckForProblems(image):
(image.name, ' '.join([e.name for e in optional_list])))
_ShowHelpForMissingBlobs(tout.WARNING, optional_list)
if faked_optional_list:
tout.info(
"Image '%s' has faked optional external blobs but is still functional: %s\n" %
(image.name, ' '.join([os.path.basename(e.GetDefaultFilename())
for e in faked_optional_list])))
missing_bintool_list = []
image.check_missing_bintools(missing_bintool_list)
if missing_bintool_list:
@ -667,7 +686,7 @@ def CheckForProblems(image):
"Image '%s' has missing bintools and is non-functional: %s\n" %
(image.name, ' '.join([os.path.basename(bintool.name)
for bintool in missing_bintool_list])))
return any([missing_list, faked_list, missing_bintool_list])
return any([missing_list, faked_required_list, missing_bintool_list])
def ProcessImage(image, update_fdt, write_map, get_contents=True,
allow_resize=True, allow_missing=False,