mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-06-29 18:11:43 +00:00
binman: Move image-processing code into a function
The Binman() function is very long. Split out the image code to make it more manageable. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
1000096b06
commit
b88e81c622
1 changed files with 57 additions and 46 deletions
|
@ -169,6 +169,62 @@ def ExtractEntries(image_fname, output_fname, outdir, entry_paths,
|
|||
return einfos
|
||||
|
||||
|
||||
def ProcessImage(image, update_fdt, write_map):
|
||||
"""Perform all steps for this image, including checking and # writing it.
|
||||
|
||||
This means that errors found with a later image will be reported after
|
||||
earlier images are already completed and written, but that does not seem
|
||||
important.
|
||||
|
||||
Args:
|
||||
image: Image to process
|
||||
update_fdt: True to update the FDT wth entry offsets, etc.
|
||||
write_map: True to write a map file
|
||||
"""
|
||||
image.GetEntryContents()
|
||||
image.GetEntryOffsets()
|
||||
|
||||
# We need to pack the entries to figure out where everything
|
||||
# should be placed. This sets the offset/size of each entry.
|
||||
# However, after packing we call ProcessEntryContents() which
|
||||
# may result in an entry changing size. In that case we need to
|
||||
# do another pass. Since the device tree often contains the
|
||||
# final offset/size information we try to make space for this in
|
||||
# AddMissingProperties() above. However, if the device is
|
||||
# compressed we cannot know this compressed size in advance,
|
||||
# since changing an offset from 0x100 to 0x104 (for example) can
|
||||
# alter the compressed size of the device tree. So we need a
|
||||
# third pass for this.
|
||||
passes = 3
|
||||
for pack_pass in range(passes):
|
||||
try:
|
||||
image.PackEntries()
|
||||
image.CheckSize()
|
||||
image.CheckEntries()
|
||||
except Exception as e:
|
||||
if write_map:
|
||||
fname = image.WriteMap()
|
||||
print("Wrote map file '%s' to show errors" % fname)
|
||||
raise
|
||||
image.SetImagePos()
|
||||
if update_fdt:
|
||||
image.SetCalculatedProperties()
|
||||
for dtb_item in state.GetFdts():
|
||||
dtb_item.Sync()
|
||||
sizes_ok = image.ProcessEntryContents()
|
||||
if sizes_ok:
|
||||
break
|
||||
image.ResetForPack()
|
||||
if not sizes_ok:
|
||||
image.Raise('Entries expanded after packing (tried %s passes)' %
|
||||
passes)
|
||||
|
||||
image.WriteSymbols()
|
||||
image.BuildImage()
|
||||
if write_map:
|
||||
image.WriteMap()
|
||||
|
||||
|
||||
def Binman(args):
|
||||
"""The main control code for binman
|
||||
|
||||
|
@ -279,52 +335,7 @@ def Binman(args):
|
|||
dtb_item.Flush()
|
||||
|
||||
for image in images.values():
|
||||
# Perform all steps for this image, including checking and
|
||||
# writing it. This means that errors found with a later
|
||||
# image will be reported after earlier images are already
|
||||
# completed and written, but that does not seem important.
|
||||
image.GetEntryContents()
|
||||
image.GetEntryOffsets()
|
||||
|
||||
# We need to pack the entries to figure out where everything
|
||||
# should be placed. This sets the offset/size of each entry.
|
||||
# However, after packing we call ProcessEntryContents() which
|
||||
# may result in an entry changing size. In that case we need to
|
||||
# do another pass. Since the device tree often contains the
|
||||
# final offset/size information we try to make space for this in
|
||||
# AddMissingProperties() above. However, if the device is
|
||||
# compressed we cannot know this compressed size in advance,
|
||||
# since changing an offset from 0x100 to 0x104 (for example) can
|
||||
# alter the compressed size of the device tree. So we need a
|
||||
# third pass for this.
|
||||
passes = 3
|
||||
for pack_pass in range(passes):
|
||||
try:
|
||||
image.PackEntries()
|
||||
image.CheckSize()
|
||||
image.CheckEntries()
|
||||
except Exception as e:
|
||||
if args.map:
|
||||
fname = image.WriteMap()
|
||||
print("Wrote map file '%s' to show errors" % fname)
|
||||
raise
|
||||
image.SetImagePos()
|
||||
if args.update_fdt:
|
||||
image.SetCalculatedProperties()
|
||||
for dtb_item in state.GetFdts():
|
||||
dtb_item.Sync()
|
||||
sizes_ok = image.ProcessEntryContents()
|
||||
if sizes_ok:
|
||||
break
|
||||
image.ResetForPack()
|
||||
if not sizes_ok:
|
||||
image.Raise('Entries expanded after packing (tried %s passes)' %
|
||||
passes)
|
||||
|
||||
image.WriteSymbols()
|
||||
image.BuildImage()
|
||||
if args.map:
|
||||
image.WriteMap()
|
||||
ProcessImage(image, args.update_fdt, args.map)
|
||||
|
||||
# Write the updated FDTs to our output files
|
||||
for dtb_item in state.GetFdts():
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue