提交 790ba9fc 编写于 作者: S Simon Glass 提交者: Tom Rini

binman: Write fake blobs to the output directory

At present binman writes fake blobs to the current directory. This is not
very helpful, since the files serve no useful purpose once binman has
finished. They clutter up the source directory and affect future runs,
since the files in the current directory are often used in preference to
those in the board directory.

To avoid these problems, write them to the output directory instead.

Move the file-creation code to the Entry base class, so it can be used by
any entry type that needs it. This is required since some entry types,
such as Entry_blob_ext_list, are not subclasses of Entry_blob.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 32d4f106
......@@ -577,9 +577,11 @@ def ProcessImage(image, update_fdt, write_map, get_contents=True,
faked_list = []
image.CheckFakedBlobs(faked_list)
if faked_list:
tout.Warning("Image '%s:%s' has faked external blobs and is non-functional: %s" %
(image.name, image.image_name,
' '.join([e.GetDefaultFilename() for e in faked_list])))
tout.Warning(
"Image '%s:%s' has faked external blobs and is non-functional: %s" %
(image.name, image.image_name,
' '.join([os.path.basename(e.GetDefaultFilename())
for e in faked_list])))
return bool(missing_list) or bool(faked_list)
......
......@@ -7,6 +7,7 @@
from collections import namedtuple
import importlib
import os
import pathlib
import sys
from dtoc import fdt_util
......@@ -972,6 +973,25 @@ features to produce new behaviours.
if self.missing:
missing_list.append(self)
def check_fake_fname(self, fname):
"""If the file is missing and the entry allows fake blobs, fake it
Sets self.faked to True if faked
Args:
fname (str): Filename to check
Returns:
fname (str): Filename of faked file
"""
if self.allow_fake and not pathlib.Path(fname).is_file():
outfname = tools.GetOutputFilename(os.path.basename(fname))
with open(outfname, "wb") as out:
out.truncate(1024)
self.faked = True
return outfname
return fname
def CheckFakedBlobs(self, faked_blobs_list):
"""Check if any entries in this section have faked external blobs
......
......@@ -5,8 +5,6 @@
# Entry-type module for blobs, which are binary objects read from files
#
import pathlib
from binman.entry import Entry
from binman import state
from dtoc import fdt_util
......@@ -38,16 +36,12 @@ class Entry_blob(Entry):
self._filename = fdt_util.GetString(self._node, 'filename', self.etype)
def ObtainContents(self):
if self.allow_fake and not pathlib.Path(self._filename).is_file():
with open(self._filename, "wb") as out:
out.truncate(1024)
self.faked = True
self._filename = self.GetDefaultFilename()
self._pathname = tools.GetInputFilename(self._filename,
self.external and self.section.GetAllowMissing())
# Allow the file to be missing
if not self._pathname:
self._pathname = self.check_fake_fname(self._filename)
self.SetContents(b'')
self.missing = True
return True
......
......@@ -4964,7 +4964,6 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertRegex(
err,
"Image '.*' has faked external blobs and is non-functional: .*")
os.remove('binman_faking_test_blob')
if __name__ == "__main__":
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册