From 3e15f6edb107d72be3253764c3325b26dd5c7bb3 Mon Sep 17 00:00:00 2001 From: Roopesh Nataraja Date: Mon, 8 Jun 2020 19:54:13 -0700 Subject: [PATCH] Include image descriptor of only the first boot image in vbmeta Multiple boot images can be generated based on BOARD_KERNEL_BINARIES but vbmeta would capture the image descriptor of only the first boot image specified in BUILT_BOOTIMAGE_TARGET. Bug : 158213759 Test: Compile multiple boot images and check if vbmeta.img includes image descriptor of only the first boot image specified in BUILT_BOOTIMAGE_TARGET Change-Id: Ib70f65d98546a436da82656bc5c911d437618bb5 --- core/Makefile | 10 ++++++++-- tools/releasetools/add_img_to_target_files.py | 8 ++++---- 2 files changed, 12 insertions(+), 6 deletions(-) mode change 100755 => 100644 tools/releasetools/add_img_to_target_files.py diff --git a/core/Makefile b/core/Makefile index 27f8756e7..33caa0eda 100644 --- a/core/Makefile +++ b/core/Makefile @@ -3072,6 +3072,9 @@ endef # configured as a chained partition, if BOARD_AVB__KEY_PATH is defined. Otherwise the # image descriptor will be included into vbmeta.img, unless it has been already added to any chained # VBMeta image. +# Multiple boot images can be generated based on BOARD_KERNEL_BINARIES +# but vbmeta would capture the image descriptor of only the first boot +# image specified in BUILT_BOOTIMAGE_TARGET. # $(1): Partition name, e.g. boot or system. define check-and-set-avb-args $(eval _in_chained_vbmeta := $(filter $(1),$(INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES))) @@ -3080,8 +3083,11 @@ $(if $(BOARD_AVB_$(call to-upper,$(1))_KEY_PATH),\ $(error Chaining partition "$(1)" in chained VBMeta image is not supported)) \ $(call _check-and-set-avb-chain-args,$(1)),\ $(if $(_in_chained_vbmeta),,\ - $(eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \ - --include_descriptors_from_image $(call images-for-partitions,$(1))))) + $(if $(filter boot,$(1)),\ + $(eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \ + --include_descriptors_from_image $(firstword $(call images-for-partitions,$(1)))),\ + $(eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \ + --include_descriptors_from_image $(call images-for-partitions,$(1)))))) endef # Checks and sets build variables for a custom chained partition to include it into vbmeta.img. diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py old mode 100755 new mode 100644 index 490b44a6f..f58b6978a --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -788,16 +788,16 @@ def AddImagesToTargetFiles(filename): boot_images = OPTIONS.info_dict.get("boot_images") if boot_images is None: boot_images = "boot.img" - for b in boot_images.split(): + for index,b in enumerate(boot_images.split()): # common.GetBootableImage() returns the image directly if present. boot_image = common.GetBootableImage( "IMAGES/" + b, b, OPTIONS.input_tmp, "BOOT") # boot.img may be unavailable in some targets (e.g. aosp_arm64). if boot_image: boot_image_path = os.path.join(OPTIONS.input_tmp, "IMAGES", b) - # vbmeta does not need to include boot.img with multiple boot.img files, - # which is only used for aosp_arm64 for GKI - if len(boot_images.split()) == 1: + # Although multiple boot images can be generated, include the image + # descriptor of only the first boot image in vbmeta + if index == 0: partitions['boot'] = boot_image_path if not os.path.exists(boot_image_path): boot_image.WriteToDir(OPTIONS.input_tmp)