forked from openkylin/platform_build
Check super size for factory OTA at build time
For VAB launched device, factory OTA will write system_other partition to the super image. So we want to check that sum(dynamic partitions) + system_other + overhead <= super at build time. Since we don't know the overhead at build time, we might instead check sum(all partitions) < super. Bug: 185809374 Test: m check-all-partition-sizes, unittests Change-Id: Ia7ba5999d23924a1927e9a9463856a4d0ea90c20 Merged-In: Ia7ba5999d23924a1927e9a9463856a4d0ea90c20 (cherry-picked from commit 294ec7d9e5298d91768e0f2e9abe4cc7de180fe1) Change-Id: I479d1b399a1639b595ae5d7f1481c771a3439e51
This commit is contained in:
parent
33e79ba41e
commit
16bcac122f
|
@ -3395,7 +3395,7 @@ endif # BOARD_PREBUILT_PVMFWIMAGE
|
|||
# $(INSTALLED_VENDORIMAGE_TARGET)" for "system vendor".
|
||||
# (1): list of partitions like "system", "vendor" or "system product system_ext".
|
||||
define images-for-partitions
|
||||
$(strip $(foreach item,$(1),$(INSTALLED_$(call to-upper,$(item))IMAGE_TARGET)))
|
||||
$(strip $(foreach item,$(1),$(if $(filter $(item),system_other),$(INSTALLED_SYSTEMOTHERIMAGE_TARGET),$(INSTALLED_$(call to-upper,$(item))IMAGE_TARGET))))
|
||||
endef
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
|
@ -4124,13 +4124,20 @@ ifeq (,$(TARGET_BUILD_UNBUNDLED))
|
|||
|
||||
ifeq (true,$(PRODUCT_BUILD_SUPER_PARTITION))
|
||||
|
||||
PARTITIONS_AND_OTHER_IN_SUPER := $(BOARD_SUPER_PARTITION_PARTITION_LIST)
|
||||
|
||||
# Add the system other image to the misc_info. Because factory ota may install system_other to the super partition.
|
||||
ifdef BUILDING_SYSTEM_OTHER_IMAGE
|
||||
PARTITIONS_AND_OTHER_IN_SUPER += system_other
|
||||
endif # BUILDING_SYSTEM_OTHER_IMAGE
|
||||
|
||||
# $(1): misc_info.txt
|
||||
# #(2): optional log file
|
||||
define check-all-partition-sizes-target
|
||||
mkdir -p $(dir $(1))
|
||||
rm -f $(1)
|
||||
$(call dump-super-image-info, $(1))
|
||||
$(foreach partition,$(BOARD_SUPER_PARTITION_PARTITION_LIST), \
|
||||
$(foreach partition,$(PARTITIONS_AND_OTHER_IN_SUPER), \
|
||||
echo "$(partition)_image="$(call images-for-partitions,$(partition)) >> $(1);)
|
||||
$(CHECK_PARTITION_SIZES) $(if $(2),--logfile $(2),-v) $(1)
|
||||
endef
|
||||
|
@ -4141,7 +4148,7 @@ $(call dist-for-goals, droid_targets, $(check_all_partition_sizes_log))
|
|||
|
||||
$(check_all_partition_sizes_log): \
|
||||
$(CHECK_PARTITION_SIZES) \
|
||||
$(call images-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))
|
||||
$(call images-for-partitions,$(PARTITIONS_AND_OTHER_IN_SUPER))
|
||||
$(call check-all-partition-sizes-target, \
|
||||
$(call intermediates-dir-for,PACKAGING,check-all-partition-sizes)/misc_info.txt, \
|
||||
$@)
|
||||
|
|
|
@ -223,9 +223,15 @@ class DynamicPartitionSizeChecker(object):
|
|||
error_limit = Expression(
|
||||
"BOARD_SUPER_PARTITION_ERROR_LIMIT{}".format(size_limit_suffix),
|
||||
int(info_dict["super_partition_error_limit"]) // num_slots)
|
||||
self._CheckSumOfPartitionSizes(
|
||||
max_size, info_dict["dynamic_partition_list"].strip().split(),
|
||||
warn_limit, error_limit)
|
||||
partitions_in_super = info_dict["dynamic_partition_list"].strip().split()
|
||||
# In the vab case, factory OTA will allocate space on super to install
|
||||
# the system_other partition. So add system_other to the partition list.
|
||||
if DeviceType.Get(self.info_dict) == DeviceType.VAB and (
|
||||
"system_other_image" in info_dict or
|
||||
"system_other_image_size" in info_dict):
|
||||
partitions_in_super.append("system_other")
|
||||
self._CheckSumOfPartitionSizes(max_size, partitions_in_super,
|
||||
warn_limit, error_limit)
|
||||
|
||||
groups = info_dict.get("super_partition_groups", "").strip().split()
|
||||
|
||||
|
|
|
@ -33,6 +33,7 @@ class CheckPartitionSizesTest(test_utils.ReleaseToolsTestCase):
|
|||
system_image_size=50
|
||||
vendor_image_size=20
|
||||
product_image_size=20
|
||||
system_other_image_size=10
|
||||
""".split("\n"))
|
||||
|
||||
def test_ab(self):
|
||||
|
@ -126,3 +127,13 @@ class CheckPartitionSizesTest(test_utils.ReleaseToolsTestCase):
|
|||
""".split("\n")))
|
||||
with self.assertRaises(RuntimeError):
|
||||
CheckPartitionSizes(self.info_dict)
|
||||
|
||||
def test_vab_too_big_with_system_other(self):
|
||||
self.info_dict.update(common.LoadDictionaryFromLines("""
|
||||
virtual_ab=true
|
||||
system_other_image_size=20
|
||||
super_partition_size=101
|
||||
super_super_device_size=101
|
||||
""".split("\n")))
|
||||
with self.assertRaises(RuntimeError):
|
||||
CheckPartitionSizes(self.info_dict)
|
||||
|
|
Loading…
Reference in New Issue