From 11c4bcf406e5f1e6ed6e1a2702f2a45f00a1af56 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. Bug: 156036850 Bug: 155049180 Change-Id: I73b70a4d52c2662c3015899632bb8a2b424108d5 --- core/Makefile | 22 ++++++++++++++++++---- target/board/generic_arm64/BoardConfig.mk | 4 +++- tools/releasetools/common.py | 12 ++++++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/core/Makefile b/core/Makefile index 69ee80ff1..9589064e9 100644 --- a/core/Makefile +++ b/core/Makefile @@ -1135,6 +1135,14 @@ 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 +define get-bootimage-partition-size + $(BOARD_$(call to-upper,$(subst .img,,$(subst boot,kernel,$(notdir $(1)))))_BOOTIMAGE_PARTITION_SIZE) +endef ifneq ($(strip $(TARGET_NO_KERNEL)),true) INTERNAL_BOOTIMAGE_ARGS := \ @@ -2227,11 +2235,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)))), \ $(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)) --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 @@ -4172,6 +4180,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: $@") @@ -4180,8 +4193,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 1abf5a5cc..fb5626d28 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -665,9 +665,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) @@ -1221,7 +1226,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]