提交 a9fad07d 编写于 作者: S Simon Glass

binman: Avoid reporting image-pos with compression

When a section is compressed, all entries within it are grouped together
into a compressed block of data. This obscures the start of each
individual child entry.

Avoid reporting bogus 'image-pos' properties in this case, since it is
not possible to access the entry at the location provided. The entire
section must be decompressed first.

CBFS does not support compressing whole sections, only individual files,
so needs no special handling here.
Signed-off-by: NSimon Glass <sjg@chromium.org>
上级 63e7ba6c
......@@ -462,7 +462,7 @@ def PrepareImagesAndDtbs(dtb_fname, select_images, update_fdt):
for image in images.values():
image.ExpandEntries()
if update_fdt:
image.AddMissingProperties()
image.AddMissingProperties(True)
image.ProcessFdt(dtb)
for dtb_item in state.GetAllFdts():
......
......@@ -213,11 +213,20 @@ class Entry(object):
def ExpandEntries(self):
pass
def AddMissingProperties(self):
"""Add new properties to the device tree as needed for this entry"""
for prop in ['offset', 'size', 'image-pos']:
def AddMissingProperties(self, have_image_pos):
"""Add new properties to the device tree as needed for this entry
Args:
have_image_pos: True if this entry has an image position. This can
be False if its parent section is compressed, since compression
groups all entries together into a compressed block of data,
obscuring the start of each individual child entry
"""
for prop in ['offset', 'size']:
if not prop in self._node.props:
state.AddZeroProp(self._node, prop)
if have_image_pos and 'image-pos' not in self._node.props:
state.AddZeroProp(self._node, 'image-pos')
if self.GetImage().allow_repack:
if self.orig_offset is not None:
state.AddZeroProp(self._node, 'orig-offset', True)
......@@ -235,7 +244,8 @@ class Entry(object):
state.SetInt(self._node, 'offset', self.offset)
state.SetInt(self._node, 'size', self.size)
base = self.section.GetRootSkipAtStart() if self.section else 0
state.SetInt(self._node, 'image-pos', self.image_pos - base)
if self.image_pos is not None:
state.SetInt(self._node, 'image-pos', self.image_pos)
if self.GetImage().allow_repack:
if self.orig_offset is not None:
state.SetInt(self._node, 'orig-offset', self.orig_offset, True)
......
......@@ -237,10 +237,10 @@ class Entry_cbfs(Entry):
if entry._cbfs_compress:
entry.uncomp_size = cfile.memlen
def AddMissingProperties(self):
super().AddMissingProperties()
def AddMissingProperties(self, have_image_pos):
super().AddMissingProperties(have_image_pos)
for entry in self._cbfs_entries.values():
entry.AddMissingProperties()
entry.AddMissingProperties(have_image_pos)
if entry._cbfs_compress:
state.AddZeroProp(entry._node, 'uncomp-size')
# Store the 'compress' property, since we don't look at
......
......@@ -136,11 +136,13 @@ class Entry_section(Entry):
for entry in self._entries.values():
entry.ExpandEntries()
def AddMissingProperties(self):
def AddMissingProperties(self, have_image_pos):
"""Add new properties to the device tree as needed for this entry"""
super().AddMissingProperties()
super().AddMissingProperties(have_image_pos)
if self.compress != 'none':
have_image_pos = False
for entry in self._entries.values():
entry.AddMissingProperties()
entry.AddMissingProperties(have_image_pos)
def ObtainContents(self):
return self.GetEntryContents()
......@@ -323,8 +325,9 @@ class Entry_section(Entry):
def SetImagePos(self, image_pos):
super().SetImagePos(image_pos)
for entry in self._entries.values():
entry.SetImagePos(image_pos + self.offset)
if self.compress == 'none':
for entry in self._entries.values():
entry.SetImagePos(image_pos + self.offset)
def ProcessContents(self):
sizes_ok_base = super(Entry_section, self).ProcessContents()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册