binman: Add an etype for external binary blobs

It is useful to be able to distinguish between ordinary blobs such as
u-boot.bin and external blobs that cannot be build by the U-Boot build
system. If the external blobs are not available for some reason, then we
know that a value image cannot be built.

Introduce a new 'blob-ext' entry type for that.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2020-07-09 18:39:36 -06:00
parent 34861d506c
commit ce867ad7c8
5 changed files with 83 additions and 0 deletions

View file

@ -42,6 +42,16 @@ obtained from the list of available device-tree files, managed by the
Entry: blob-ext: Entry containing an externally built binary blob
-----------------------------------------------------------------
Note: This should not be used by itself. It is normally used as a parent
class by other entry types.
See 'blob' for Properties / Entry arguments.
Entry: blob-named-by-arg: A blob entry which gets its filename property from its subclass
-----------------------------------------------------------------------------------------

View file

@ -0,0 +1,31 @@
# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2016 Google, Inc
# Written by Simon Glass <sjg@chromium.org>
#
# Entry-type module for external blobs, not built by U-Boot
#
import os
from binman.etype.blob import Entry_blob
from dtoc import fdt_util
from patman import tools
from patman import tout
class Entry_blob_ext(Entry_blob):
"""Entry containing an externally built binary blob
Note: This should not be used by itself. It is normally used as a parent
class by other entry types.
See 'blob' for Properties / Entry arguments.
"""
def __init__(self, section, etype, node):
Entry_blob.__init__(self, section, etype, node)
self.external = True
def ObtainContents(self):
self._filename = self.GetDefaultFilename()
self._pathname = tools.GetInputFilename(self._filename)
self.ReadBlobContents()
return True

View file

@ -3364,6 +3364,18 @@ class TestFunctional(unittest.TestCase):
# Just check that the data appears in the file somewhere
self.assertIn(U_BOOT_SPL_DATA, data)
def testExtblob(self):
"""Test an image with an external blob"""
data = self._DoReadFile('157_blob_ext.dts')
self.assertEqual(REFCODE_DATA, data)
def testExtblobMissing(self):
"""Test an image with a missing external blob"""
with self.assertRaises(ValueError) as e:
self._DoReadFile('158_blob_ext_missing.dts')
self.assertIn("Filename 'missing-file' not found in input path",
str(e.exception))
if __name__ == "__main__":
unittest.main()

View file

@ -0,0 +1,14 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
blob-ext {
filename = "refcode.bin";
};
};
};

View file

@ -0,0 +1,16 @@
// SPDX-License-Identifier: GPL-2.0+
/dts-v1/;
/ {
#address-cells = <1>;
#size-cells = <1>;
binman {
size = <0x80>;
blob-ext {
filename = "missing-file";
};
};
};