Build image for super partition
... for bootstrapping / initializing the device. Image is built to $(PRODUCT_OUT)/super.img when running `m dist`. For A/B devices, the image contains other partitions in the _a slot. Change-Id: I1459d62f02b95f142dfb3b7608f88ec6801dbf37 Fixes: 111758129 Test: m superimage -j
This commit is contained in:
parent
ebc041af56
commit
37c0c7c82d
|
@ -2556,6 +2556,62 @@ $(INSTALLED_VBMETAIMAGE_TARGET): $(AVBTOOL)
|
|||
|
||||
endif # BOARD_AVB_ENABLE
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# super partition image
|
||||
|
||||
# (1): list of items like "system", "vendor", "product", "product_services"
|
||||
# return: map each item to the corresponding image target.
|
||||
# system => $(BUILT_SYSTEMIMAGE), vendor => $(INSTALLED_VENDORIMAGE_TARGET), etc.
|
||||
define image-for-partitions
|
||||
$(foreach item,$(1),$(or $(strip $(foreach mapping,
|
||||
system:$(BUILT_SYSTEMIMAGE)
|
||||
product_services:$(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET),
|
||||
$(if $(filter $(call word-colon,1,$(mapping)),$(item)),
|
||||
$(patsubst $(call word-colon,1,$(mapping)),$(call word-colon,2,$(mapping)),$(item))))),
|
||||
$(INSTALLED_$(call to-upper,$(item)IMAGE_TARGET))))
|
||||
endef
|
||||
|
||||
# (1): list of items like "system", "vendor", "product", "product_services"
|
||||
# return: map each item into a command ( wrapped in $$() ) that reads the size
|
||||
define read-size-of-partitions
|
||||
$(foreach p,$(1),$(call read-image-prop-dictionary,$($(p)image_intermediates)/generated_$(p)_image_info.txt,$(p)_size))
|
||||
endef
|
||||
|
||||
ifeq (true,$(USE_LOGICAL_PARTITIONS))
|
||||
|
||||
# BOARD_SUPER_PARTITION_SIZE must be defined to build super image.
|
||||
ifdef BOARD_SUPER_PARTITION_SIZE
|
||||
|
||||
INSTALLED_SUPERIMAGE_TARGET := $(PRODUCT_OUT)/super.img
|
||||
$(INSTALLED_SUPERIMAGE_TARGET): $(call image-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))
|
||||
|
||||
# For A/B devices, super partition always contains sub-partitions in the _a slot, because this
|
||||
# image should only be used for bootstrapping / initializing the device. When flashing the image,
|
||||
# bootloader fastboot should always mark _a slot as bootable.
|
||||
ifeq ($(AB_OTA_UPDATER),true)
|
||||
$(INSTALLED_SUPERIMAGE_TARGET): PRIVATE_PARTITION_SUFFIX=_a
|
||||
$(INSTALLED_SUPERIMAGE_TARGET): PRIVATE_METADATA_SLOTS=2
|
||||
else
|
||||
$(INSTALLED_SUPERIMAGE_TARGET): PRIVATE_METADATA_SLOTS=1
|
||||
endif # AB_OTA_UPDATER
|
||||
|
||||
|
||||
$(INSTALLED_SUPERIMAGE_TARGET): $(HOST_OUT_EXECUTABLES)/lpmake
|
||||
$< \
|
||||
--sparse \
|
||||
--metadata-size 65536 \
|
||||
--metadata-slots $(PRIVATE_METADATA_SLOTS) \
|
||||
--device-size $(BOARD_SUPER_PARTITION_SIZE) \
|
||||
--output $@ \
|
||||
$(foreach name,$(BOARD_SUPER_PARTITION_PARTITION_LIST), \
|
||||
--partition $(name)$(PRIVATE_PARTITION_SUFFIX):$$($(UUIDGEN) $(name)$(PRIVATE_PARTITION_SUFFIX)):readonly:$(call read-size-of-partitions,$(name)) \
|
||||
--image $(name)$(PRIVATE_PARTITION_SUFFIX)=$(call image-for-partitions,$(name)))
|
||||
|
||||
$(call dist-for-goals,dist_files,$(INSTALLED_SUPERIMAGE_TARGET))
|
||||
|
||||
endif # BOARD_SUPER_PARTITION_SIZE
|
||||
endif # USE_LOGICAL_PARTITIONS
|
||||
|
||||
# -----------------------------------------------------------------
|
||||
# Check image sizes <= size of super partition
|
||||
|
||||
|
@ -2571,21 +2627,10 @@ droid_targets: check_android_partition_sizes
|
|||
.PHONY: check_android_partition_sizes
|
||||
|
||||
# Add image dependencies so that generated_*_image_info.txt are written before checking.
|
||||
ifneq (,$(filter system,$(BOARD_SUPER_PARTITION_PARTITION_LIST)))
|
||||
check_android_partition_sizes: $(BUILT_SYSTEMIMAGE)
|
||||
endif
|
||||
ifneq (,$(filter vendor,$(BOARD_SUPER_PARTITION_PARTITION_LIST)))
|
||||
check_android_partition_sizes: $(INSTALLED_VENDORIMAGE_TARGET)
|
||||
endif
|
||||
ifneq (,$(filter product,$(BOARD_SUPER_PARTITION_PARTITION_LIST)))
|
||||
check_android_partition_sizes: $(INSTALLED_PRODUCTIMAGE_TARGET)
|
||||
endif
|
||||
ifneq (,$(filter productservices,$(BOARD_SUPER_PARTITION_PARTITION_LIST)))
|
||||
check_android_partition_sizes: $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET)
|
||||
endif
|
||||
check_android_partition_sizes: $(call image-for-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))
|
||||
|
||||
check_android_partition_sizes:
|
||||
partition_size_list="$(foreach p,$(BOARD_SUPER_PARTITION_PARTITION_LIST),$(call read-image-prop-dictionary,$($(p)image_intermediates)/generated_$(p)_image_info.txt,$(p)_size))"; \
|
||||
partition_size_list="$(call read-size-of-partitions,$(BOARD_SUPER_PARTITION_PARTITION_LIST))"; \
|
||||
sum_sizes_expr=$$(sed -e 's/ /+/g' <<< "$${partition_size_list}"); \
|
||||
if [ $$(( $${sum_sizes_expr} )) -gt $(BOARD_SUPER_PARTITION_SIZE) ]; then \
|
||||
echo 'The sum of sizes of all logical partitions is larger than BOARD_SUPER_PARTITION_SIZE.'; \
|
||||
|
|
|
@ -701,6 +701,7 @@ JARJAR := $(HOST_OUT_JAVA_LIBRARIES)/jarjar.jar
|
|||
DATA_BINDING_COMPILER := $(HOST_OUT_JAVA_LIBRARIES)/databinding-compiler.jar
|
||||
FAT16COPY := build/make/tools/fat16copy.py
|
||||
CHECK_LINK_TYPE := build/make/tools/check_link_type.py
|
||||
UUIDGEN := build/make/tools/uuidgen.py
|
||||
|
||||
PROGUARD := external/proguard/bin/proguard.sh
|
||||
JAVATAGS := build/make/tools/java-event-log-tags.py
|
||||
|
|
|
@ -1190,6 +1190,9 @@ productservicesimage: $(INSTALLED_PRODUCT_SERVICESIMAGE_TARGET)
|
|||
.PHONY: systemotherimage
|
||||
systemotherimage: $(INSTALLED_SYSTEMOTHERIMAGE_TARGET)
|
||||
|
||||
.PHONY: superimage
|
||||
superimage: $(INSTALLED_SUPERIMAGE_TARGET)
|
||||
|
||||
.PHONY: bootimage
|
||||
bootimage: $(INSTALLED_BOOTIMAGE_TARGET)
|
||||
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright 2018 The Android Open Source Project
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from __future__ import print_function
|
||||
import sys
|
||||
import uuid
|
||||
|
||||
def uuidgen(name):
|
||||
return uuid.uuid5(uuid.uuid5(uuid.NAMESPACE_URL, "android.com"), name)
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: uuidgen.py <name>")
|
||||
sys.exit(1)
|
||||
name = sys.argv[1]
|
||||
print(uuidgen(name))
|
Loading…
Reference in New Issue