From 903a1ca7e17785ebca0a432d4554a6eb86ba73a8 Mon Sep 17 00:00:00 2001 From: Steve Muckle Date: Thu, 7 May 2020 17:32:10 -0700 Subject: [PATCH] support different boot partition sizes in aosp_arm64 The different boot images in aosp_arm64 have different partition size requirements. Add support for defining a partition size associated with each boot image variant. This support is limited to aosp_arm64 currently, which is built with recovery-as-boot. A previous version of this change did not update the boot-debug image AVB logic with the required macro for multiple boot partition size support. This is now required because the aosp-arm64 boot.img is configured as a chained AVB partition. Bug: 156036850 Bug: 155049180 Change-Id: I66b57de91042bfd56ba54a3659843d8cf7873955 --- core/Makefile | 29 +++++++++++++++++------ target/board/generic_arm64/BoardConfig.mk | 4 +++- tools/releasetools/common.py | 12 ++++++++-- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/core/Makefile b/core/Makefile index d8f8a5ec4..f443af2ce 100644 --- a/core/Makefile +++ b/core/Makefile @@ -1133,6 +1133,15 @@ else BUILT_BOOTIMAGE_TARGET := $(PRODUCT_OUT)/boot.img endif +ifdef BOARD_BOOTIMAGE_PARTITION_SIZE + BOARD_KERNEL_BOOTIMAGE_PARTITION_SIZE := $(BOARD_BOOTIMAGE_PARTITION_SIZE) +endif + +# $1: boot image file name +# $2: boot image variant (boot, boot-debug) +define get-bootimage-partition-size + $(BOARD_$(call to-upper,$(subst .img,,$(subst $(2),kernel,$(notdir $(1)))))_BOOTIMAGE_PARTITION_SIZE) +endef ifneq ($(strip $(TARGET_NO_KERNEL)),true) INTERNAL_BOOTIMAGE_ARGS := \ @@ -2225,11 +2234,11 @@ define build-recoveryimage-target $(if $(filter true,$(PRODUCT_SUPPORTS_VBOOT)), \ $(VBOOT_SIGNER) $(FUTILITY) $(1).unsigned $(PRODUCT_VBOOT_SIGNING_KEY).vbpubk $(PRODUCT_VBOOT_SIGNING_KEY).vbprivk $(PRODUCT_VBOOT_SIGNING_SUBKEY).vbprivk $(1).keyblock $(1)) $(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)), \ - $(call assert-max-image-size,$(1),$(call get-hash-image-max-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE))), \ + $(call assert-max-image-size,$(1),$(call get-hash-image-max-size,$(call get-bootimage-partition-size,$(1),boot))), \ $(call assert-max-image-size,$(1),$(call get-hash-image-max-size,$(BOARD_RECOVERYIMAGE_PARTITION_SIZE)))) $(if $(filter true,$(BOARD_AVB_ENABLE)), \ $(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)), \ - $(AVBTOOL) add_hash_footer --image $(1) --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) --partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS),\ + $(AVBTOOL) add_hash_footer --image $(1) --partition_size $(call get-bootimage-partition-size,$(1),boot) --partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS),\ $(AVBTOOL) add_hash_footer --image $(1) --partition_size $(BOARD_RECOVERYIMAGE_PARTITION_SIZE) --partition_name recovery $(INTERNAL_AVB_RECOVERY_SIGNING_ARGS) $(BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS))) endef @@ -2416,13 +2425,13 @@ BOARD_AVB_BOOT_TEST_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem INTERNAL_AVB_BOOT_TEST_SIGNING_ARGS := --algorithm SHA256_RSA2048 --key $(BOARD_AVB_BOOT_TEST_KEY_PATH) # $(1): the bootimage to sign define test-key-sign-bootimage -$(call assert-max-image-size,$(1),$(call get-hash-image-max-size,$(BOARD_BOOTIMAGE_PARTITION_SIZE))) +$(call assert-max-image-size,$(1),$(call get-hash-image-max-size,$(call get-bootimage-partition-size,$(1),boot-debug))) $(AVBTOOL) add_hash_footer \ --image $(1) \ - --partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \ + --partition_size $(call get-bootimage-partition-size,$(1),boot-debug)\ --partition_name boot $(INTERNAL_AVB_BOOT_TEST_SIGNING_ARGS) \ $(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS) -$(call assert-max-image-size,$(1),$(BOARD_BOOTIMAGE_PARTITION_SIZE)) +$(call assert-max-image-size,$(1),$(call get-bootimage-partition-size,$(1),boot-debug)) endef # $(1): output file @@ -4166,6 +4175,11 @@ tool_extensions := $(TARGET_RELEASETOOLS_EXTENSIONS) endif .KATI_READONLY := tool_extensions +# $1: boot image file name +define misc_boot_size +$(subst .img,_size,$(1))=$(BOARD_KERNEL$(call to-upper,$(subst boot,,$(subst .img,,$(1))))_BOOTIMAGE_PARTITION_SIZE) +endef + $(INSTALLED_MISC_INFO_TARGET): rm -f $@ $(call pretty,"Target misc_info.txt: $@") @@ -4174,8 +4188,9 @@ $(INSTALLED_MISC_INFO_TARGET): ifdef BOARD_FLASH_BLOCK_SIZE $(hide) echo "blocksize=$(BOARD_FLASH_BLOCK_SIZE)" >> $@ endif -ifdef BOARD_BOOTIMAGE_PARTITION_SIZE - $(hide) echo "boot_size=$(BOARD_BOOTIMAGE_PARTITION_SIZE)" >> $@ +ifneq ($(strip $(BOARD_BOOTIMAGE_PARTITION_SIZE))$(strip $(BOARD_KERNEL_BINARIES)),) + $(foreach b,$(INSTALLED_BOOTIMAGE_TARGET),\ + echo "$(call misc_boot_size,$(notdir $(b)))" >> $@;) endif ifeq ($(INSTALLED_BOOTIMAGE_TARGET),) $(hide) echo "no_boot=true" >> $@ diff --git a/target/board/generic_arm64/BoardConfig.mk b/target/board/generic_arm64/BoardConfig.mk index d793c38c6..16c6c6df3 100644 --- a/target/board/generic_arm64/BoardConfig.mk +++ b/target/board/generic_arm64/BoardConfig.mk @@ -60,7 +60,9 @@ TARGET_NO_KERNEL := false TARGET_NO_VENDOR_BOOT := true BOARD_USES_RECOVERY_AS_BOOT := true -BOARD_BOOTIMAGE_PARTITION_SIZE := 0x04000000 +BOARD_KERNEL-5.4_BOOTIMAGE_PARTITION_SIZE := 67108864 +BOARD_KERNEL-5.4-GZ_BOOTIMAGE_PARTITION_SIZE := 47185920 +BOARD_KERNEL-5.4-LZ4_BOOTIMAGE_PARTITION_SIZE := 53477376 BOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800 BOARD_BOOT_HEADER_VERSION := 3 diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 7805e30ce..03e94f3dd 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -677,9 +677,14 @@ def LoadInfoDict(input_file, repacking=False): makeint("userdata_size") makeint("cache_size") makeint("recovery_size") - makeint("boot_size") makeint("fstab_version") + boot_images = "boot.img" + if "boot_images" in d: + boot_images = d["boot_images"] + for b in boot_images.split(): + makeint(b.replace(".img","_size")) + # Load recovery fstab if applicable. d["fstab"] = _FindAndLoadRecoveryFstab(d, input_file, read_helper) @@ -1329,7 +1334,10 @@ def _BuildBootableImage(image_name, sourcedir, fs_config_file, info_dict=None, # AVB: if enabled, calculate and add hash to boot.img or recovery.img. if info_dict.get("avb_enable") == "true": avbtool = info_dict["avb_avbtool"] - part_size = info_dict[partition_name + "_size"] + if partition_name == "recovery": + part_size = info_dict["recovery_size"] + else: + part_size = info_dict[image_name.replace(".img","_size")] cmd = [avbtool, "add_hash_footer", "--image", img.name, "--partition_size", str(part_size), "--partition_name", partition_name]