diff options
author | Kelvin Zhang <zhangkelvin@google.com> | 2023-01-10 10:37:56 -0800 |
---|---|---|
committer | Kelvin Zhang <zhangkelvin@google.com> | 2023-01-12 17:34:42 -0800 |
commit | b81b4e3621d3917c43e19ae99560ac67a5150a7a (patch) | |
tree | 75ef40df5bccc3c7e9cec50f99571978dcdf18a8 | |
parent | a10528c7a80da9389a84039b45e64ba126908f71 (diff) | |
download | build-b81b4e3621d3917c43e19ae99560ac67a5150a7a.tar.gz |
Allow vendors to add custom vbmeta partitions
Currently we only have vbmeta_system and vbmeta_vendor. Add
BOARD_AVB_VBMETA_CUSTOM_PARTITIONS , which allows OEMs to define
their own vbmeta_*.img partitions. example: aosp/2381823
Bug: 263568805
Change-Id: Id671e2c3aee9ada90256381cce432927df03169b
-rw-r--r-- | core/Makefile | 67 | ||||
-rw-r--r-- | core/main.mk | 3 | ||||
-rw-r--r-- | tools/releasetools/add_img_to_target_files.py | 15 | ||||
-rw-r--r-- | tools/releasetools/common.py | 2 |
4 files changed, 77 insertions, 10 deletions
diff --git a/core/Makefile b/core/Makefile index 19dfe2f222..3f010506f8 100644 --- a/core/Makefile +++ b/core/Makefile @@ -4074,7 +4074,8 @@ endif # end of AVB for BUILDING_SYSTEM_OTHER_IMAGE INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES := \ $(BOARD_AVB_VBMETA_SYSTEM) \ - $(BOARD_AVB_VBMETA_VENDOR) + $(BOARD_AVB_VBMETA_VENDOR) \ + $(foreach partition,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS),$(BOARD_AVB_VBMETA_$(call to-upper,$(partition)))) # Not allowing the same partition to appear in multiple groups. ifneq ($(words $(sort $(INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES))),$(words $(INTERNAL_AVB_PARTITIONS_IN_CHAINED_VBMETA_IMAGES))) @@ -4380,6 +4381,11 @@ ifdef BOARD_AVB_VBMETA_VENDOR $(eval $(call check-and-set-avb-args,vbmeta_vendor)) endif +ifdef BOARD_AVB_VBMETA_CUSTOM_PARTITIONS +$(foreach partition,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS),$(eval $(call check-and-set-avb-args,vbmeta_$(partition)))) +$(foreach partition,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS),$(eval BOARD_AVB_MAKE_VBMETA_$(call to-upper,$(partition))_IMAGE_ARGS += --padding_size 4096)) +endif + ifneq ($(strip $(BOARD_CUSTOMIMAGES_PARTITION_LIST)),) $(foreach partition,$(BOARD_CUSTOMIMAGES_PARTITION_LIST), \ $(eval $(call check-and-set-custom-avb-chain-args,$(partition)))) @@ -4408,6 +4414,13 @@ BOARD_AVB_MAKE_VBMETA_VENDOR_IMAGE_ARGS += \ --rollback_index $(BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX) endif +ifdef BOARD_AVB_VBMETA_CUSTOM_PARTITIONS + $(foreach partition,$(call to-upper,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)), \ + $(if $(BOARD_AVB_VBMETA_$(partition)_ROLLBACK_INDEX),$(eval \ + BOARD_AVB_MAKE_VBMETA_$(partition)_IMAGE_ARGS += \ + --rollback_index $(BOARD_AVB_VBMETA_$(partition)_ROLLBACK_INDEX)))) +endif + # $(1): the directory to extract public keys to define extract-avb-chain-public-keys $(if $(BOARD_AVB_BOOT_KEY_PATH),\ @@ -4464,7 +4477,11 @@ define extract-avb-chain-public-keys $(if $(BOARD_CUSTOMIMAGES_PARTITION_LIST),\ $(hide) $(foreach partition,$(BOARD_CUSTOMIMAGES_PARTITION_LIST), \ $(AVBTOOL) extract_public_key --key $(BOARD_AVB_$(call to-upper,$(partition))_KEY_PATH) \ - --output $(1)/$(partition).avbpubkey;)) + --output $(1)/$(partition).avbpubkey;)) \ + $(if $(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS),\ + $(hide) $(foreach partition,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS), \ + $(AVBTOOL) extract_public_key --key $(BOARD_AVB_VBMETA_$(call to-upper,$(partition))_KEY_PATH) \ + --output $(1)/vbmeta_$(partition).avbpubkey;)) endef # Builds a chained VBMeta image. This VBMeta image will contain the descriptors for the partitions @@ -4476,13 +4493,13 @@ endef # $(1): VBMeta image name, such as "vbmeta_system", "vbmeta_vendor" etc. # $(2): Output filename. define build-chained-vbmeta-image - $(call pretty,"Target chained vbmeta image: $@") - $(hide) $(AVBTOOL) make_vbmeta_image \ - $(INTERNAL_AVB_$(call to-upper,$(1))_SIGNING_ARGS) \ - $(BOARD_AVB_MAKE_$(call to-upper,$(1))_IMAGE_ARGS) \ - $(foreach image,$(BOARD_AVB_$(call to-upper,$(1))), \ - --include_descriptors_from_image $(call images-for-partitions,$(image))) \ - --output $@ + $(call pretty,"Target chained vbmeta image: $@") + $(hide) $(AVBTOOL) make_vbmeta_image \ + $(INTERNAL_AVB_$(call to-upper,$(1))_SIGNING_ARGS) \ + $(BOARD_AVB_MAKE_$(call to-upper,$(1))_IMAGE_ARGS) \ + $(foreach image,$(BOARD_AVB_$(call to-upper,$(1))), \ + --include_descriptors_from_image $(call images-for-partitions,$(image))) \ + --output $@ endef ifdef BUILDING_SYSTEM_IMAGE @@ -4510,7 +4527,26 @@ $(INSTALLED_VBMETA_VENDORIMAGE_TARGET): \ $(call declare-1p-container,$(INSTALLED_VBMETA_VENDORIMAGE_TARGET),) -UNMOUNTED_NOTICE_VENDOR_DEPS+= $(INSTALLED_VBMETA_VENDORIMAGE_TARGET) +UNMOUNTED_NOTICE_VENDOR_DEPS += $(INSTALLED_VBMETA_VENDORIMAGE_TARGET) +endif + +ifdef BOARD_AVB_VBMETA_CUSTOM_PARTITIONS +define declare-custom-vbmeta-target +INSTALLED_VBMETA_$(call to-upper,$(1))IMAGE_TARGET := $(PRODUCT_OUT)/vbmeta_$(call to-lower,$(1)).img +$$(INSTALLED_VBMETA_$(call to-upper,$(1))IMAGE_TARGET): \ + $(AVBTOOL) \ + $(call images-for-partitions,$(BOARD_AVB_VBMETA_$(call to-upper,$(1)))) \ + $(BOARD_AVB_VBMETA_$(call to-upper,$(1))_KEY_PATH) + $$(call build-chained-vbmeta-image,vbmeta_$(call to-lower,$(1))) + +$(call declare-1p-container,$(INSTALLED_VBMETA_$(call to-upper,$(1))IMAGE_TARGET),) + +UNMOUNTED_NOTICE_VENDOR_DEPS += $(INSTALLED_VBMETA_$(call to-upper,$(1))IMAGE_TARGET) +endef + +$(foreach partition,\ + $(call to-upper,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)),\ + $(eval $(call declare-custom-vbmeta-target,$(partition)))) endif define build-vbmetaimage-target @@ -4550,8 +4586,10 @@ $(INSTALLED_VBMETAIMAGE_TARGET): \ $(INSTALLED_RECOVERYIMAGE_TARGET) \ $(INSTALLED_VBMETA_SYSTEMIMAGE_TARGET) \ $(INSTALLED_VBMETA_VENDORIMAGE_TARGET) \ + $(foreach partition,$(call to-upper,$( BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)),$(INSTALLED_VBMETA_$(partition)IMAGE_TARGET)) \ $(BOARD_AVB_VBMETA_SYSTEM_KEY_PATH) \ $(BOARD_AVB_VBMETA_VENDOR_KEY_PATH) \ + $(foreach partition,$(call to-upper,$( BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)),$(BOARD_AVB_VBMETA_$(partition)_KEY_PATH)) \ $(BOARD_AVB_KEY_PATH) $(build-vbmetaimage-target) @@ -5297,6 +5335,15 @@ ifneq (,$(strip $(BOARD_AVB_VBMETA_VENDOR))) $(hide) echo "avb_vbmeta_vendor_algorithm=$(BOARD_AVB_VBMETA_VENDOR_ALGORITHM)" >> $@ $(hide) echo "avb_vbmeta_vendor_rollback_index_location=$(BOARD_AVB_VBMETA_VENDOR_ROLLBACK_INDEX_LOCATION)" >> $@ endif # BOARD_AVB_VBMETA_VENDOR_KEY_PATH +ifneq (,$(strip $(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS))) + $(hide) echo "avb_custom_vbmeta_images_partition_list=$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)" >> $@ + $(hide) $(foreach partition,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS),\ + echo "avb_vbmeta_$(partition)=$(BOARD_AVB_VBMETA_$(call to-upper,$(partition)))" >> $@ ;\ + echo "avb_vbmeta_$(partition)_args=$(BOARD_AVB_MAKE_VBMETA_$(call to-upper,$(partition))_IMAGE_ARGS)" >> $@ ;\ + echo "avb_vbmeta_$(partition)_key_path=$(BOARD_AVB_VBMETA_$(call to-upper,$(partition))_KEY_PATH)" >> $@ ;\ + echo "avb_vbmeta_$(partition)_algorithm=$(BOARD_AVB_VBMETA_$(call to-upper,$(partition))_ALGORITHM)" >> $@ ;\ + echo "avb_vbmeta_$(partition)_rollback_index_location=$(BOARD_AVB_VBMETA_$(call to-upper,$(partition))_ROLLBACK_INDEX_LOCATION)" >> $@ ;) +endif # BOARD_AVB_VBMETA_CUSTOM_PARTITIONS endif # BOARD_AVB_ENABLE ifdef BOARD_BPT_INPUT_FILES $(hide) echo "board_bpt_enable=true" >> $@ diff --git a/core/main.mk b/core/main.mk index 0453cdac86..2d501c97ca 100644 --- a/core/main.mk +++ b/core/main.mk @@ -1602,6 +1602,9 @@ vbmetasystemimage: $(INSTALLED_VBMETA_SYSTEMIMAGE_TARGET) .PHONY: vbmetavendorimage vbmetavendorimage: $(INSTALLED_VBMETA_VENDORIMAGE_TARGET) +.PHONY: vbmetacustomimages +vbmetacustomimages: $(foreach partition,$(call to-upper,$(BOARD_AVB_VBMETA_CUSTOM_PARTITIONS)),$(INSTALLED_VBMETA_$(partition)IMAGE_TARGET)) + # The droidcore-unbundled target depends on the subset of targets necessary to # perform a full system build (either unbundled or not). .PHONY: droidcore-unbundled diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py index d308a55dad..b45b0a301f 100644 --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -1132,6 +1132,21 @@ def AddImagesToTargetFiles(filename): item for item in vbmeta_partitions if item not in vbmeta_vendor.split()] vbmeta_partitions.append("vbmeta_vendor") + custom_avb_partitions = OPTIONS.info_dict.get("avb_custom_vbmeta_images_partition_list", "").strip().split() + if custom_avb_partitions: + for avb_part in custom_avb_partitions: + partition_name = "vbmeta_" + avb_part + included_partitions = OPTIONS.info_dict.get("avb_vbmeta_{}".format(avb_part), "").strip().split() + assert included_partitions, "Custom vbmeta partition {0} missing avb_vbmeta_{0} prop".format(avb_part) + banner(partition_name) + logger.info("VBMeta partition {} needs {}".format(partition_name, included_partitions)) + partitions[partition_name] = AddVBMeta( + output_zip, partitions, partition_name, included_partitions) + vbmeta_partitions = [ + item for item in vbmeta_partitions + if item not in included_partitions] + vbmeta_partitions.append(partition_name) + if OPTIONS.info_dict.get("avb_building_vbmeta_image") == "true": banner("vbmeta") diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 2f05d4415a..9919029854 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -1503,12 +1503,14 @@ def BuildVBMeta(image_path, partitions, name, needed_partitions): custom_partitions = OPTIONS.info_dict.get( "avb_custom_images_partition_list", "").strip().split() + custom_avb_partitions = ["vbmeta_" + part for part in OPTIONS.info_dict.get("avb_custom_vbmeta_images_partition_list", "").strip().split()] for partition, path in partitions.items(): if partition not in needed_partitions: continue assert (partition in AVB_PARTITIONS or partition in AVB_VBMETA_PARTITIONS or + partition in custom_avb_partitions or partition in custom_partitions), \ 'Unknown partition: {}'.format(partition) assert os.path.exists(path), \ |