self.SetContents(data)
return size_ok
- def ObtainContents(self):
+ def ObtainContents(self, skip_entry=None, fake_size=0):
"""Figure out the contents of an entry.
+ Args:
+ skip_entry (Entry): Entry to skip when obtaining section contents
+ fake_size (int): Size of fake file to create if needed
+
Returns:
True if the contents were found, False if another call is needed
after the other entries are processed.
"""
self.update_hash = update_hash
- def collect_contents_to_file(self, entries, prefix):
+ def collect_contents_to_file(self, entries, prefix, fake_size=0):
"""Put the contents of a list of entries into a file
Args:
entries (list of Entry): Entries to collect
prefix (str): Filename prefix of file to write to
+ fake_size (int): Size of fake file to create if needed
If any entry does not have contents yet, this function returns False
for the data.
for entry in entries:
# First get the input data and put it in a file. If not available,
# try later.
- if not entry.ObtainContents():
+ if not entry.ObtainContents(fake_size=fake_size):
return None, None, None
data += entry.GetData()
uniq = self.GetUniqueName()
self.return_contents = True
self.contents = b'aa'
- def ObtainContents(self):
+ def ObtainContents(self, fake_size=0):
if self.return_unknown_contents or not self.return_contents:
return False
if self.return_contents_later:
super().__init__(section, etype, node)
self._filename = fdt_util.GetString(self._node, 'filename', self.etype)
- def ObtainContents(self):
+ def ObtainContents(self, fake_size=0):
self._filename = self.GetDefaultFilename()
self._pathname = tools.get_input_filename(self._filename,
self.external and self.section.GetAllowMissing())
# Allow the file to be missing
if not self._pathname:
- self._pathname, faked = self.check_fake_fname(self._filename)
+ self._pathname, faked = self.check_fake_fname(self._filename,
+ fake_size)
self.missing = True
if not faked:
self.SetContents(b'')
self.ReadEntries()
def ObtainContents(self):
+ # Use a non-zero size for any fake files to keep mkimage happy
data, input_fname, uniq = self.collect_contents_to_file(
- self._mkimage_entries.values(), 'mkimage')
+ self._mkimage_entries.values(), 'mkimage', 1024)
if data is None:
return False
output_fname = tools.get_output_filename('mkimage-out.%s' % uniq)
entry.ReadNode()
self._mkimage_entries[entry.name] = entry
+ def SetAllowMissing(self, allow_missing):
+ """Set whether a section allows missing external blobs
+
+ Args:
+ allow_missing: True if allowed, False if not allowed
+ """
+ self.allow_missing = allow_missing
+ for entry in self._mkimage_entries.values():
+ entry.SetAllowMissing(allow_missing)
+
def SetAllowFakeBlob(self, allow_fake):
"""Set whether the sub nodes allows to create a fake blob
for entry in self._entries.values():
entry.AddMissingProperties(have_image_pos)
- def ObtainContents(self, skip_entry=None):
+ def ObtainContents(self, fake_size=0, skip_entry=None):
return self.GetEntryContents(skip_entry=skip_entry)
def GetPaddedDataForEntry(self, entry, entry_data):
"Node '/binman/u-boot': Please use 'extend-size' instead of 'expand-size'",
str(e.exception))
+ def testMkimageMissingBlob(self):
+ """Test using mkimage to build an image"""
+ with test_util.capture_sys_output() as (stdout, stderr):
+ self._DoTestFile('229_mkimage_missing.dts', allow_missing=True,
+ allow_fake_blobs=True)
+ err = stderr.getvalue()
+ self.assertRegex(
+ err,
+ "Image '.*' has faked external blobs and is non-functional: .*")
+
if __name__ == "__main__":
unittest.main()
--- /dev/null
+// SPDX-License-Identifier: GPL-2.0+
+
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ binman {
+ mkimage {
+ args = "-n test -T script";
+
+ blob-ext {
+ filename = "missing.bin";
+ };
+ };
+ };
+};