releasetools: Fix the rebuilding of vbmeta.img.
If only vbmeta.img is missing from the target_files.zip, 'add_img_to_target_files.py -a' will fail to re-create vbmeta.img. ++++ vbmeta ++++ Traceback (most recent call last): File "./build/make/tools/releasetools/add_img_to_target_files.py", line 693, in <module> main(sys.argv[1:]) File "./build/make/tools/releasetools/add_img_to_target_files.py", line 687, in main AddImagesToTargetFiles(args[0]) File "./build/make/tools/releasetools/add_img_to_target_files.py", line 584, in AddImagesToTargetFiles boot_contents = boot_image.WriteToTemp() AttributeError: 'NoneType' object has no attribute 'WriteToTemp' Because it has skipped loading the boot.img, which leads to the above error. Bug: 63456822 Test: As follows: $ zip -d target_files.zip vbmeta.img $ add_img_to_target_files.py -a target_files.zip Test: `m dist` on aosp_arm64-userdebug Change-Id: Ieba5f0b6848c3ec5d8bcfd24d48cc5af8b39f06c
This commit is contained in:
parent
9dd909e6db
commit
262bf3f0b5
1 changed files with 29 additions and 36 deletions
|
@ -350,6 +350,10 @@ def AddVBMeta(output_zip, boot_img_path, system_img_path, vendor_img_path,
|
|||
dtbo_img_path, prefix="IMAGES/"):
|
||||
"""Create a VBMeta image and store it in output_zip."""
|
||||
img = OutputFile(output_zip, OPTIONS.input_tmp, prefix, "vbmeta.img")
|
||||
if os.path.exists(img.input_name):
|
||||
print("vbmeta.img already exists in %s; not rebuilding..." % (prefix,))
|
||||
return img.input_name
|
||||
|
||||
avbtool = os.getenv('AVBTOOL') or OPTIONS.info_dict["avb_avbtool"]
|
||||
cmd = [avbtool, "make_vbmeta_image", "--output", img.name]
|
||||
common.AppendAVBSigningArgs(cmd, "vbmeta")
|
||||
|
@ -529,53 +533,43 @@ def AddImagesToTargetFiles(filename):
|
|||
def banner(s):
|
||||
print("\n\n++++ " + s + " ++++\n\n")
|
||||
|
||||
prebuilt_path = os.path.join(OPTIONS.input_tmp, "IMAGES", "boot.img")
|
||||
boot_image = None
|
||||
if os.path.exists(prebuilt_path):
|
||||
banner("boot")
|
||||
print("boot.img already exists in IMAGES/, no need to rebuild...")
|
||||
if OPTIONS.rebuild_recovery:
|
||||
boot_image = common.GetBootableImage(
|
||||
"IMAGES/boot.img", "boot.img", OPTIONS.input_tmp, "BOOT")
|
||||
else:
|
||||
banner("boot")
|
||||
boot_image = common.GetBootableImage(
|
||||
"IMAGES/boot.img", "boot.img", OPTIONS.input_tmp, "BOOT")
|
||||
if boot_image:
|
||||
banner("boot")
|
||||
# common.GetBootableImage() returns the image directly if present.
|
||||
boot_image = common.GetBootableImage(
|
||||
"IMAGES/boot.img", "boot.img", OPTIONS.input_tmp, "BOOT")
|
||||
# boot.img may be unavailable in some targets (e.g. aosp_arm64).
|
||||
if boot_image:
|
||||
boot_img_path = os.path.join(OPTIONS.input_tmp, "IMAGES", "boot.img")
|
||||
if not os.path.exists(boot_img_path):
|
||||
boot_image.WriteToDir(OPTIONS.input_tmp)
|
||||
if output_zip:
|
||||
boot_image.AddToZip(output_zip)
|
||||
else:
|
||||
boot_image.WriteToDir(OPTIONS.input_tmp)
|
||||
|
||||
recovery_image = None
|
||||
if has_recovery:
|
||||
banner("recovery")
|
||||
prebuilt_path = os.path.join(OPTIONS.input_tmp, "IMAGES", "recovery.img")
|
||||
if os.path.exists(prebuilt_path):
|
||||
print("recovery.img already exists in IMAGES/, no need to rebuild...")
|
||||
if OPTIONS.rebuild_recovery:
|
||||
recovery_image = common.GetBootableImage(
|
||||
"IMAGES/recovery.img", "recovery.img", OPTIONS.input_tmp,
|
||||
"RECOVERY")
|
||||
else:
|
||||
recovery_image = common.GetBootableImage(
|
||||
"IMAGES/recovery.img", "recovery.img", OPTIONS.input_tmp, "RECOVERY")
|
||||
if recovery_image:
|
||||
if output_zip:
|
||||
recovery_image.AddToZip(output_zip)
|
||||
else:
|
||||
recovery_image.WriteToDir(OPTIONS.input_tmp)
|
||||
recovery_image = common.GetBootableImage(
|
||||
"IMAGES/recovery.img", "recovery.img", OPTIONS.input_tmp, "RECOVERY")
|
||||
assert recovery_image, "Failed to create recovery.img."
|
||||
recovery_img_path = os.path.join(
|
||||
OPTIONS.input_tmp, "IMAGES", "recovery.img")
|
||||
if not os.path.exists(recovery_img_path):
|
||||
recovery_image.WriteToDir(OPTIONS.input_tmp)
|
||||
if output_zip:
|
||||
recovery_image.AddToZip(output_zip)
|
||||
|
||||
banner("recovery (two-step image)")
|
||||
# The special recovery.img for two-step package use.
|
||||
recovery_two_step_image = common.GetBootableImage(
|
||||
"IMAGES/recovery-two-step.img", "recovery-two-step.img",
|
||||
OPTIONS.input_tmp, "RECOVERY", two_step_image=True)
|
||||
if recovery_two_step_image:
|
||||
assert recovery_two_step_image, "Failed to create recovery-two-step.img."
|
||||
recovery_two_step_image_path = os.path.join(
|
||||
OPTIONS.input_tmp, "IMAGES", "recovery-two-step.img")
|
||||
if not os.path.exists(recovery_two_step_image_path):
|
||||
recovery_two_step_image.WriteToDir(OPTIONS.input_tmp)
|
||||
if output_zip:
|
||||
recovery_two_step_image.AddToZip(output_zip)
|
||||
else:
|
||||
recovery_two_step_image.WriteToDir(OPTIONS.input_tmp)
|
||||
|
||||
banner("system")
|
||||
system_img_path = AddSystem(
|
||||
|
@ -604,9 +598,8 @@ def AddImagesToTargetFiles(filename):
|
|||
|
||||
if OPTIONS.info_dict.get("avb_enable") == "true":
|
||||
banner("vbmeta")
|
||||
boot_contents = boot_image.WriteToTemp()
|
||||
AddVBMeta(output_zip, boot_contents.name, system_img_path,
|
||||
vendor_img_path, dtbo_img_path)
|
||||
AddVBMeta(output_zip, boot_img_path, system_img_path, vendor_img_path,
|
||||
dtbo_img_path)
|
||||
|
||||
# For devices using A/B update, copy over images from RADIO/ and/or
|
||||
# VENDOR_IMAGES/ to IMAGES/ and make sure we have all the needed
|
||||
|
|
Loading…
Reference in a new issue