[RFC] binman: add support for creating dummy files for external blobs
Heiko Thiery
heiko.thiery at gmail.com
Tue Nov 16 11:47:10 CET 2021
While converting to binman for an imx8mq board, it has been found that
building in the u-boot CI fails. This is because an imx8mq requires an
external binary (signed_hdmi_imx8m.bin). If this file cannot be found
mkimage fails.
To be able to build this board in the u-boot CI a binman option
(--fake-ext-blobs) is introduced that can be switched on via the u-boot
makefile option BINMAN_FAKE_EXT_BLOBS. With that the needed dummy files are
created.
Signed-off-by: Heiko Thiery <heiko.thiery at gmail.com>
---
Makefile | 1 +
tools/binman/cmdline.py | 2 ++
tools/binman/control.py | 16 ++++++++++++++++
tools/binman/entry.py | 1 +
tools/binman/etype/blob_ext.py | 1 +
5 files changed, 21 insertions(+)
diff --git a/Makefile b/Makefile
index f911f70344..1a833a1637 100644
--- a/Makefile
+++ b/Makefile
@@ -1307,6 +1307,7 @@ cmd_binman = $(srctree)/tools/binman/binman $(if $(BINMAN_DEBUG),-D) \
-a tpl-bss-pad=$(if $(CONFIG_TPL_SEPARATE_BSS),,1) \
-a spl-dtb=$(CONFIG_SPL_OF_REAL) \
-a tpl-dtb=$(CONFIG_SPL_OF_REAL) \
+ $(if $(BINMAN_FAKE_EXT_BLOBS),--fake-ext-blobs) \
$(BINMAN_$(@F))
OBJCOPYFLAGS_u-boot.ldr.hex := -I binary -O ihex
diff --git a/tools/binman/cmdline.py b/tools/binman/cmdline.py
index d6156df408..2b29981cb4 100644
--- a/tools/binman/cmdline.py
+++ b/tools/binman/cmdline.py
@@ -52,6 +52,8 @@ controlled by a description in the board device tree.'''
help='Configuration file (.dtb) to use')
build_parser.add_argument('--fake-dtb', action='store_true',
help='Use fake device tree contents (for testing only)')
+ build_parser.add_argument('--fake-ext-blobs', action='store_true',
+ help='Create fake ext blobs with dummy content (for testing only)')
build_parser.add_argument('-i', '--image', type=str, action='append',
help='Image filename to build (if not specified, build all)')
build_parser.add_argument('-I', '--indir', action='append',
diff --git a/tools/binman/control.py b/tools/binman/control.py
index 0dbcbc28e9..f95aadd1f3 100644
--- a/tools/binman/control.py
+++ b/tools/binman/control.py
@@ -8,6 +8,7 @@
from collections import OrderedDict
import glob
import os
+import pathlib
import pkg_resources
import re
@@ -401,6 +402,17 @@ def ReplaceEntries(image_fname, input_fname, indir, entry_paths,
return image
+def PrepareFakeExtBlobs(images):
+ for (_, image) in images.items():
+ for entry in image._entries.values():
+ if entry.allow_dummy:
+ if not pathlib.Path(entry._filename).is_file():
+ tout.Warning("Missing external blob '%s', fake it" %
+ entry._filename)
+ with open(entry._filename, "wb") as out:
+ out.truncate(1024)
+
+
def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt, use_expanded):
"""Prepare the images to be processed and select the device tree
@@ -629,6 +641,10 @@ def Binman(args):
images = PrepareImagesAndDtbs(dtb_fname, args.image,
args.update_fdt, use_expanded)
+
+ if args.fake_ext_blobs:
+ PrepareFakeExtBlobs(images)
+
if args.test_section_timeout:
# Set the first image to timeout, used in testThreadTimeout()
images[list(images.keys())[0]].test_section_timeout = True
diff --git a/tools/binman/entry.py b/tools/binman/entry.py
index 70222718ea..2f5c38d15a 100644
--- a/tools/binman/entry.py
+++ b/tools/binman/entry.py
@@ -100,6 +100,7 @@ class Entry(object):
self.missing = False
self.external = False
self.allow_missing = False
+ self.allow_dummy = False
@staticmethod
def Lookup(node_path, etype, expanded):
diff --git a/tools/binman/etype/blob_ext.py b/tools/binman/etype/blob_ext.py
index d6b0ca17c3..85bc9fe6b8 100644
--- a/tools/binman/etype/blob_ext.py
+++ b/tools/binman/etype/blob_ext.py
@@ -26,3 +26,4 @@ class Entry_blob_ext(Entry_blob):
def __init__(self, section, etype, node):
Entry_blob.__init__(self, section, etype, node)
self.external = True
+ self.allow_dummy = True
--
2.30.2
More information about the U-Boot
mailing list