Merge "AVB: support chain partition signing" am: 0effed4b94
am: dcad0945ab
am: abbba2c832
am: f184e3a35b
Change-Id: I3247fe4885984a8e7e9015a9bc2e2ee383b561a1
This commit is contained in:
commit
5bac3d86d6
172
core/Makefile
172
core/Makefile
|
@ -623,25 +623,25 @@ $(error TARGET_BOOTIMAGE_USE_EXT2 is not supported anymore)
|
||||||
|
|
||||||
else ifeq (true,$(BOARD_AVB_ENABLE)) # TARGET_BOOTIMAGE_USE_EXT2 != true
|
else ifeq (true,$(BOARD_AVB_ENABLE)) # TARGET_BOOTIMAGE_USE_EXT2 != true
|
||||||
|
|
||||||
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(AVBTOOL) $(INTERNAL_BOOTIMAGE_FILES)
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTIMG) $(AVBTOOL) $(INTERNAL_BOOTIMAGE_FILES) $(BOARD_AVB_BOOT_KEY_PATH)
|
||||||
$(call pretty,"Target boot image: $@")
|
$(call pretty,"Target boot image: $@")
|
||||||
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $@
|
||||||
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
$(hide) $(call assert-max-image-size,$@,$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
||||||
$(hide) $(AVBTOOL) add_hash_footer \
|
$(hide) $(AVBTOOL) add_hash_footer \
|
||||||
--image $@ \
|
--image $@ \
|
||||||
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
||||||
--partition_name boot $(INTERNAL_AVB_SIGNING_ARGS) \
|
--partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) \
|
||||||
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
|
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
|
||||||
|
|
||||||
.PHONY: bootimage-nodeps
|
.PHONY: bootimage-nodeps
|
||||||
bootimage-nodeps: $(MKBOOTIMG) $(AVBTOOL)
|
bootimage-nodeps: $(MKBOOTIMG) $(AVBTOOL) $(BOARD_AVB_BOOT_KEY_PATH)
|
||||||
@echo "make $@: ignoring dependencies"
|
@echo "make $@: ignoring dependencies"
|
||||||
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
|
$(hide) $(MKBOOTIMG) $(INTERNAL_BOOTIMAGE_ARGS) $(INTERNAL_MKBOOTIMG_VERSION_ARGS) $(BOARD_MKBOOTIMG_ARGS) --output $(INSTALLED_BOOTIMAGE_TARGET)
|
||||||
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
$(hide) $(call assert-max-image-size,$(INSTALLED_BOOTIMAGE_TARGET),$(BOARD_BOOTIMAGE_PARTITION_SIZE))
|
||||||
$(hide) $(AVBTOOL) add_hash_footer \
|
$(hide) $(AVBTOOL) add_hash_footer \
|
||||||
--image $@ \
|
--image $@ \
|
||||||
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
||||||
--partition_name boot $(INTERNAL_AVB_SIGNING_ARGS) \
|
--partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) \
|
||||||
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
|
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)
|
||||||
|
|
||||||
else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)) # BOARD_AVB_ENABLE != true
|
else ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_BOOT_SIGNER)) # BOARD_AVB_ENABLE != true
|
||||||
|
@ -996,12 +996,21 @@ $(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_
|
||||||
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_subkey=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY)" >> $(1))
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_subkey=$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_VBOOT_SIGNING_SUBKEY)" >> $(1))
|
||||||
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "futility=$(notdir $(FUTILITY))" >> $(1))
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "futility=$(notdir $(FUTILITY))" >> $(1))
|
||||||
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_signer_cmd=$(VBOOT_SIGNER)" >> $(1))
|
$(if $(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_signer_cmd=$(VBOOT_SIGNER)" >> $(1))
|
||||||
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_signing_args=$(INTERNAL_AVB_SIGNING_ARGS)" >> $(1))
|
|
||||||
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_avbtool=$(notdir $(AVBTOOL))" >> $(1))
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_avbtool=$(notdir $(AVBTOOL))" >> $(1))
|
||||||
$(if $(BOARD_AVB_ENABLE),$(hide) echo "system_avb_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1))
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_system_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1))
|
||||||
$(if $(BOARD_AVB_ENABLE),$(hide) echo "system_avb_add_hashtree_footer_args=$(BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS)" >> $(1))
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_system_add_hashtree_footer_args=$(BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS)" >> $(1))
|
||||||
$(if $(BOARD_AVB_ENABLE),$(hide) echo "vendor_avb_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1))
|
$(if $(BOARD_AVB_ENABLE),\
|
||||||
$(if $(BOARD_AVB_ENABLE),$(hide) echo "vendor_avb_add_hashtree_footer_args=$(BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS)" >> $(1))
|
$(if $(BOARD_AVB_SYSTEM_KEY_PATH),\
|
||||||
|
$(hide) echo "avb_system_key_path=$(BOARD_AVB_SYSTEM_KEY_PATH)" >> $(1)
|
||||||
|
$(hide) echo "avb_system_algorithm=$(BOARD_AVB_SYSTEM_ALGORITHM)" >> $(1)
|
||||||
|
$(hide) echo "avb_system_rollback_index_location=$(BOARD_AVB_SYSTEM_ROLLBACK_INDEX_LOCATION)" >> $(1)))
|
||||||
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_vendor_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1))
|
||||||
|
$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_vendor_add_hashtree_footer_args=$(BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS)" >> $(1))
|
||||||
|
$(if $(BOARD_AVB_ENABLE),\
|
||||||
|
$(if $(BOARD_AVB_VENDOR_KEY_PATH),\
|
||||||
|
$(hide) echo "avb_vendor_key_path=$(BOARD_AVB_VENDOR_KEY_PATH)" >> $(1)
|
||||||
|
$(hide) echo "avb_vendor_algorithm=$(BOARD_AVB_VENDOR_ALGORITHM)" >> $(1)
|
||||||
|
$(hide) echo "avb_vendor_rollback_index_location=$(BOARD_AVB_VENDOR_ROLLBACK_INDEX_LOCATION)" >> $(1)))
|
||||||
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\
|
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\
|
||||||
$(hide) echo "recovery_as_boot=true" >> $(1))
|
$(hide) echo "recovery_as_boot=true" >> $(1))
|
||||||
$(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),\
|
$(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),\
|
||||||
|
@ -1214,7 +1223,7 @@ define build-recoveryimage-target
|
||||||
$(hide) $(AVBTOOL) add_hash_footer \
|
$(hide) $(AVBTOOL) add_hash_footer \
|
||||||
--image $(1) \
|
--image $(1) \
|
||||||
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
--partition_size $(BOARD_BOOTIMAGE_PARTITION_SIZE) \
|
||||||
--partition_name boot $(INTERNAL_AVB_SIGNING_ARGS) \
|
--partition_name boot $(INTERNAL_AVB_BOOT_SIGNING_ARGS) \
|
||||||
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS))
|
$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS))
|
||||||
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)), \
|
$(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)), \
|
||||||
$(hide) $(call assert-max-image-size,$(1),$(BOARD_BOOTIMAGE_PARTITION_SIZE)), \
|
$(hide) $(call assert-max-image-size,$(1),$(BOARD_BOOTIMAGE_PARTITION_SIZE)), \
|
||||||
|
@ -1230,7 +1239,7 @@ ifeq (true,$(PRODUCTS.$(INTERNAL_PRODUCT).PRODUCT_SUPPORTS_VBOOT))
|
||||||
$(INSTALLED_BOOTIMAGE_TARGET) : $(VBOOT_SIGNER)
|
$(INSTALLED_BOOTIMAGE_TARGET) : $(VBOOT_SIGNER)
|
||||||
endif
|
endif
|
||||||
ifeq (true,$(BOARD_AVB_ENABLE))
|
ifeq (true,$(BOARD_AVB_ENABLE))
|
||||||
$(INSTALLED_BOOTIMAGE_TARGET) : $(AVBTOOL)
|
$(INSTALLED_BOOTIMAGE_TARGET) : $(AVBTOOL) $(BOARD_AVB_BOOT_KEY_PATH)
|
||||||
endif
|
endif
|
||||||
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \
|
$(INSTALLED_BOOTIMAGE_TARGET): $(MKBOOTFS) $(MKBOOTIMG) $(MINIGZIP) \
|
||||||
$(INSTALLED_RAMDISK_TARGET) \
|
$(INSTALLED_RAMDISK_TARGET) \
|
||||||
|
@ -1817,12 +1826,12 @@ ifdef BOARD_PREBUILT_DTBOIMAGE
|
||||||
INSTALLED_DTBOIMAGE_TARGET := $(PRODUCT_OUT)/dtbo.img
|
INSTALLED_DTBOIMAGE_TARGET := $(PRODUCT_OUT)/dtbo.img
|
||||||
|
|
||||||
ifeq ($(BOARD_AVB_ENABLE),true)
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
||||||
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE) $(AVBTOOL)
|
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE) $(AVBTOOL) $(BOARD_AVB_DTBO_KEY_PATH)
|
||||||
cp $(BOARD_PREBUILT_DTBOIMAGE) $@
|
cp $(BOARD_PREBUILT_DTBOIMAGE) $@
|
||||||
$(AVBTOOL) add_hash_footer \
|
$(AVBTOOL) add_hash_footer \
|
||||||
--image $@ \
|
--image $@ \
|
||||||
--partition_size $(BOARD_DTBOIMG_PARTITION_SIZE) \
|
--partition_size $(BOARD_DTBOIMG_PARTITION_SIZE) \
|
||||||
--partition_name dtbo $(INTERNAL_AVB_SIGNING_ARGS) \
|
--partition_name dtbo $(INTERNAL_AVB_DTBO_SIGNING_ARGS) \
|
||||||
$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)
|
$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)
|
||||||
else
|
else
|
||||||
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE)
|
$(INSTALLED_DTBOIMAGE_TARGET): $(BOARD_PREBUILT_DTBOIMAGE)
|
||||||
|
@ -1836,39 +1845,98 @@ endif
|
||||||
ifeq ($(BOARD_AVB_ENABLE),true)
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
||||||
|
|
||||||
BUILT_VBMETAIMAGE_TARGET := $(PRODUCT_OUT)/vbmeta.img
|
BUILT_VBMETAIMAGE_TARGET := $(PRODUCT_OUT)/vbmeta.img
|
||||||
|
AVB_CHAIN_KEY_DIR := $(TARGET_OUT_INTERMEDIATES)/avb_chain_keys
|
||||||
|
|
||||||
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS := \
|
ifdef BOARD_AVB_KEY_PATH
|
||||||
--include_descriptors_from_image $(INSTALLED_BOOTIMAGE_TARGET) \
|
$(if $(BOARD_AVB_ALGORITHM),,$(error BOARD_AVB_ALGORITHM is not defined))
|
||||||
--include_descriptors_from_image $(INSTALLED_SYSTEMIMAGE) \
|
else
|
||||||
|
# If key path isn't specified, use the 4096-bit test key.
|
||||||
|
BOARD_AVB_ALGORITHM := SHA256_RSA4096
|
||||||
|
BOARD_AVB_KEY_PATH := external/avb/test/data/testkey_rsa4096.pem
|
||||||
|
endif
|
||||||
|
|
||||||
|
INTERNAL_AVB_SIGNING_ARGS := \
|
||||||
|
--algorithm $(BOARD_AVB_ALGORITHM) --key $(BOARD_AVB_KEY_PATH)
|
||||||
|
|
||||||
|
BOOT_FOOTER_ARGS := BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS
|
||||||
|
DTBO_FOOTER_ARGS := BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS
|
||||||
|
SYSTEM_FOOTER_ARGS := BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS
|
||||||
|
VENDOR_FOOTER_ARGS := BOARD_AVB_VENDOR_ADD_HASHTREE_FOOTER_ARGS
|
||||||
|
|
||||||
|
# Check and set required build variables for a chain partition.
|
||||||
|
# $(1): the partition to enable AVB chain, e.g., BOOT or SYSTEM.
|
||||||
|
define check-and-set-avb-chain-args
|
||||||
|
$(eval PART := $(1))
|
||||||
|
$(eval part=$(shell echo $(PART) | tr A-Z a-z))
|
||||||
|
|
||||||
|
$(eval _key_path := BOARD_AVB_$(PART)_KEY_PATH)
|
||||||
|
$(eval _signing_algorithm := BOARD_AVB_$(PART)_ALGORITHM)
|
||||||
|
$(eval _rollback_index := BOARD_AVB_$(PART)_ROLLBACK_INDEX)
|
||||||
|
$(eval _rollback_index_location := BOARD_AVB_$(PART)_ROLLBACK_INDEX_LOCATION)
|
||||||
|
$(if $($(_key_path)),,$(error $(_key_path) is not defined))
|
||||||
|
$(if $($(_signing_algorithm)),,$(error $(_signing_algorithm) is not defined))
|
||||||
|
$(if $($(_rollback_index)),,$(error $(_rollback_index) is not defined))
|
||||||
|
$(if $($(_rollback_index_location)),,$(error $(_rollback_index_location) is not defined))
|
||||||
|
|
||||||
|
# Set INTERNAL_AVB_(PART)_SIGNING_ARGS
|
||||||
|
$(eval _signing_args := INTERNAL_AVB_$(PART)_SIGNING_ARGS)
|
||||||
|
$(eval $(_signing_args) := \
|
||||||
|
--algorithm $($(_signing_algorithm)) --key $($(_key_path)))
|
||||||
|
|
||||||
|
$(eval INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
||||||
|
--chain_partition $(part):$($(_rollback_index_location)):$(AVB_CHAIN_KEY_DIR)/$(part).avbpubkey)
|
||||||
|
|
||||||
|
# Set rollback_index via footer args
|
||||||
|
$(eval _footer_args := $(PART)_FOOTER_ARGS)
|
||||||
|
$(eval $($(_footer_args)) += --rollback_index $($(_rollback_index)))
|
||||||
|
endef
|
||||||
|
|
||||||
|
ifdef BOARD_AVB_BOOT_KEY_PATH
|
||||||
|
$(eval $(call check-and-set-avb-chain-args,BOOT))
|
||||||
|
else
|
||||||
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
||||||
|
--include_descriptors_from_image $(INSTALLED_BOOTIMAGE_TARGET)
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifdef BOARD_AVB_SYSTEM_KEY_PATH
|
||||||
|
$(eval $(call check-and-set-avb-chain-args,SYSTEM))
|
||||||
|
else
|
||||||
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
||||||
|
--include_descriptors_from_image $(INSTALLED_SYSTEMIMAGE)
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef INSTALLED_VENDORIMAGE_TARGET
|
ifdef INSTALLED_VENDORIMAGE_TARGET
|
||||||
|
ifdef BOARD_AVB_VENDOR_KEY_PATH
|
||||||
|
$(eval $(call check-and-set-avb-chain-args,VENDOR))
|
||||||
|
else
|
||||||
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
||||||
--include_descriptors_from_image $(INSTALLED_VENDORIMAGE_TARGET)
|
--include_descriptors_from_image $(INSTALLED_VENDORIMAGE_TARGET)
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef INSTALLED_DTBOIMAGE_TARGET
|
ifdef INSTALLED_DTBOIMAGE_TARGET
|
||||||
|
ifdef BOARD_AVB_DTBO_KEY_PATH
|
||||||
|
$(eval $(call check-and-set-avb-chain-args,DTBO))
|
||||||
|
else
|
||||||
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += \
|
||||||
--include_descriptors_from_image $(INSTALLED_DTBOIMAGE_TARGET)
|
--include_descriptors_from_image $(INSTALLED_DTBOIMAGE_TARGET)
|
||||||
endif
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += --padding_size 4096
|
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += --padding_size 4096
|
||||||
|
|
||||||
|
# Add kernel cmdline descriptor for kernel to mount system.img as root with
|
||||||
|
# dm-verity. This works when system.img is either chained or not-chained:
|
||||||
|
# - chained: The --setup_as_rootfs_from_kernel option will add dm-verity kernel
|
||||||
|
# cmdline descriptor to system.img
|
||||||
|
# - not-chained: The --include_descriptors_from_image option for make_vbmeta_image
|
||||||
|
# will include the kernel cmdline descriptor from system.img into vbmeta.img
|
||||||
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
ifeq ($(BOARD_BUILD_SYSTEM_ROOT_IMAGE),true)
|
||||||
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += --setup_rootfs_from_kernel $(BUILT_SYSTEMIMAGE)
|
BOARD_AVB_SYSTEM_ADD_HASHTREE_FOOTER_ARGS += --setup_as_rootfs_from_kernel
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifdef BOARD_AVB_ROLLBACK_INDEX
|
ifdef BOARD_AVB_ROLLBACK_INDEX
|
||||||
INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS += --rollback_index $(BOARD_AVB_ROLLBACK_INDEX)
|
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --rollback_index $(BOARD_AVB_ROLLBACK_INDEX)
|
||||||
endif
|
|
||||||
|
|
||||||
ifndef BOARD_AVB_KEY_PATH
|
|
||||||
# If key path isn't specified, use the 4096-bit test key.
|
|
||||||
INTERNAL_AVB_SIGNING_ARGS := \
|
|
||||||
--algorithm SHA256_RSA4096 \
|
|
||||||
--key external/avb/test/data/testkey_rsa4096.pem
|
|
||||||
else
|
|
||||||
INTERNAL_AVB_SIGNING_ARGS := \
|
|
||||||
--algorithm $(BOARD_AVB_ALGORITHM) --key $(BOARD_AVB_KEY_PATH)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef BOARD_BOOTIMAGE_PARTITION_SIZE
|
ifndef BOARD_BOOTIMAGE_PARTITION_SIZE
|
||||||
|
@ -1879,17 +1947,36 @@ ifndef BOARD_SYSTEMIMAGE_PARTITION_SIZE
|
||||||
$(error BOARD_SYSTEMIMAGE_PARTITION_SIZE must be set for BOARD_AVB_ENABLE)
|
$(error BOARD_SYSTEMIMAGE_PARTITION_SIZE must be set for BOARD_AVB_ENABLE)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# $(1): the directory to extract public keys to
|
||||||
|
define extract-avb-chain-public-keys
|
||||||
|
$(if $(BOARD_AVB_BOOT_KEY_PATH),\
|
||||||
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_BOOT_KEY_PATH) \
|
||||||
|
--output $(1)/boot.avbpubkey)
|
||||||
|
$(if $(BOARD_AVB_SYSTEM_KEY_PATH),\
|
||||||
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_SYSTEM_KEY_PATH) \
|
||||||
|
--output $(1)/system.avbpubkey)
|
||||||
|
$(if $(BOARD_AVB_VENDOR_KEY_PATH),\
|
||||||
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_VENDOR_KEY_PATH) \
|
||||||
|
--output $(1)/vendor.avbpubkey)
|
||||||
|
$(if $(BOARD_AVB_DTBO_KEY_PATH),\
|
||||||
|
$(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_DTBO_KEY_PATH) \
|
||||||
|
--output $(1)/dtbo.avbpubkey)
|
||||||
|
endef
|
||||||
|
|
||||||
define build-vbmetaimage-target
|
define build-vbmetaimage-target
|
||||||
$(call pretty,"Target vbmeta image: $(INSTALLED_VBMETAIMAGE_TARGET)")
|
$(call pretty,"Target vbmeta image: $(INSTALLED_VBMETAIMAGE_TARGET)")
|
||||||
|
$(hide) mkdir -p $(AVB_CHAIN_KEY_DIR)
|
||||||
|
$(call extract-avb-chain-public-keys, $(AVB_CHAIN_KEY_DIR))
|
||||||
$(hide) $(AVBTOOL) make_vbmeta_image \
|
$(hide) $(AVBTOOL) make_vbmeta_image \
|
||||||
$(INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS) \
|
$(INTERNAL_AVB_MAKE_VBMETA_IMAGE_ARGS) \
|
||||||
$(INTERNAL_AVB_SIGNING_ARGS) \
|
$(INTERNAL_AVB_SIGNING_ARGS) \
|
||||||
$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS) \
|
$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS) \
|
||||||
--output $@
|
--output $@
|
||||||
|
$(hide) rm -rf $(AVB_CHAIN_KEY_DIR)
|
||||||
endef
|
endef
|
||||||
|
|
||||||
INSTALLED_VBMETAIMAGE_TARGET := $(BUILT_VBMETAIMAGE_TARGET)
|
INSTALLED_VBMETAIMAGE_TARGET := $(BUILT_VBMETAIMAGE_TARGET)
|
||||||
$(INSTALLED_VBMETAIMAGE_TARGET): $(AVBTOOL) $(INSTALLED_BOOTIMAGE_TARGET) $(INSTALLED_SYSTEMIMAGE) $(INSTALLED_VENDORIMAGE_TARGET) $(INSTALLED_DTBOIMAGE_TARGET)
|
$(INSTALLED_VBMETAIMAGE_TARGET): $(AVBTOOL) $(INSTALLED_BOOTIMAGE_TARGET) $(INSTALLED_SYSTEMIMAGE) $(INSTALLED_VENDORIMAGE_TARGET) $(INSTALLED_DTBOIMAGE_TARGET) $(BOARD_AVB_KEY_PATH)
|
||||||
$(build-vbmetaimage-target)
|
$(build-vbmetaimage-target)
|
||||||
|
|
||||||
.PHONY: vbmetaimage-nodeps
|
.PHONY: vbmetaimage-nodeps
|
||||||
|
@ -2303,11 +2390,17 @@ ifeq ($(BOARD_USES_FULL_RECOVERY_IMAGE),true)
|
||||||
$(hide) echo "full_recovery_image=true" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "full_recovery_image=true" >> $(zip_root)/META/misc_info.txt
|
||||||
endif
|
endif
|
||||||
ifeq ($(BOARD_AVB_ENABLE),true)
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
||||||
$(hide) echo "board_avb_enable=true" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "avb_enable=true" >> $(zip_root)/META/misc_info.txt
|
||||||
$(hide) echo "board_avb_rollback_index=$(BOARD_AVB_ROLLBACK_INDEX)" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "avb_vbmeta_key_path=$(BOARD_AVB_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
|
||||||
$(hide) echo "board_avb_boot_add_hash_footer_args=$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "avb_vbmeta_algorithm=$(BOARD_AVB_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
|
||||||
$(hide) echo "board_avb_make_vbmeta_image_args=$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS)" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "avb_vbmeta_args=$(BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS)" >> $(zip_root)/META/misc_info.txt
|
||||||
endif
|
$(hide) echo "avb_boot_add_hash_footer_args=$(BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
ifdef BOARD_AVB_BOOT_KEY_PATH
|
||||||
|
$(hide) echo "avb_boot_key_path=$(BOARD_AVB_BOOT_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
$(hide) echo "avb_boot_algorithm=$(BOARD_AVB_BOOT_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
$(hide) echo "avb_boot_rollback_index_location=$(BOARD_AVB_BOOT_ROLLBACK_INDEX_LOCATION)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
endif # BOARD_AVB_BOOT_KEY_PATH
|
||||||
|
endif # BOARD_AVB_ENABLE
|
||||||
ifdef BOARD_BPT_INPUT_FILES
|
ifdef BOARD_BPT_INPUT_FILES
|
||||||
$(hide) echo "board_bpt_enable=true" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "board_bpt_enable=true" >> $(zip_root)/META/misc_info.txt
|
||||||
$(hide) echo "board_bpt_make_table_args=$(BOARD_BPT_MAKE_TABLE_ARGS)" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "board_bpt_make_table_args=$(BOARD_BPT_MAKE_TABLE_ARGS)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
@ -2365,10 +2458,15 @@ ifdef BOARD_PREBUILT_DTBOIMAGE
|
||||||
$(hide) echo "has_dtbo=true" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "has_dtbo=true" >> $(zip_root)/META/misc_info.txt
|
||||||
ifeq ($(BOARD_AVB_ENABLE),true)
|
ifeq ($(BOARD_AVB_ENABLE),true)
|
||||||
$(hide) echo "dtbo_size=$(BOARD_DTBOIMG_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
|
$(hide) echo "dtbo_size=$(BOARD_DTBOIMG_PARTITION_SIZE)" >> $(zip_root)/META/misc_info.txt
|
||||||
$(hide) echo "board_avb_dtbo_add_hash_footer_args=$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)" \
|
$(hide) echo "avb_dtbo_add_hash_footer_args=$(BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
ifdef BOARD_AVB_DTBO_KEY_PATH
|
||||||
|
$(hide) echo "avb_dtbo_key_path=$(BOARD_AVB_DTBO_KEY_PATH)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
$(hide) echo "avb_dtbo_algorithm=$(BOARD_AVB_DTBO_ALGORITHM)" >> $(zip_root)/META/misc_info.txt
|
||||||
|
$(hide) echo "avb_dtbo_rollback_index_location=$(BOARD_AVB_DTBO_ROLLBACK_INDEX_LOCATION)" \
|
||||||
>> $(zip_root)/META/misc_info.txt
|
>> $(zip_root)/META/misc_info.txt
|
||||||
endif
|
endif # BOARD_AVB_DTBO_KEY_PATH
|
||||||
endif
|
endif # BOARD_AVB_ENABLE
|
||||||
|
endif # BOARD_PREBUILT_DTBOIMAGE
|
||||||
@# Run fs_config on all the system, vendor, boot ramdisk,
|
@# Run fs_config on all the system, vendor, boot ramdisk,
|
||||||
@# and recovery ramdisk files in the zip, and save the output
|
@# and recovery ramdisk files in the zip, and save the output
|
||||||
$(hide) $(call fs_config,$(zip_root)/SYSTEM,system/) > $(zip_root)/META/filesystem_config.txt
|
$(hide) $(call fs_config,$(zip_root)/SYSTEM,system/) > $(zip_root)/META/filesystem_config.txt
|
||||||
|
|
|
@ -191,14 +191,14 @@ def AddDtbo(output_zip, prefix="IMAGES/"):
|
||||||
shutil.copy(dtbo_prebuilt_path, img.name)
|
shutil.copy(dtbo_prebuilt_path, img.name)
|
||||||
|
|
||||||
# AVB-sign the image as needed.
|
# AVB-sign the image as needed.
|
||||||
if OPTIONS.info_dict.get("board_avb_enable") == "true":
|
if OPTIONS.info_dict.get("avb_enable") == "true":
|
||||||
avbtool = os.getenv('AVBTOOL') or OPTIONS.info_dict["avb_avbtool"]
|
avbtool = os.getenv('AVBTOOL') or OPTIONS.info_dict["avb_avbtool"]
|
||||||
part_size = OPTIONS.info_dict["dtbo_size"]
|
part_size = OPTIONS.info_dict["dtbo_size"]
|
||||||
# The AVB hash footer will be replaced if already present.
|
# The AVB hash footer will be replaced if already present.
|
||||||
cmd = [avbtool, "add_hash_footer", "--image", img.name,
|
cmd = [avbtool, "add_hash_footer", "--image", img.name,
|
||||||
"--partition_size", str(part_size), "--partition_name", "dtbo"]
|
"--partition_size", str(part_size), "--partition_name", "dtbo"]
|
||||||
cmd.extend(shlex.split(OPTIONS.info_dict["avb_signing_args"]))
|
common.AppendAVBSigningArgs(cmd, "dtbo")
|
||||||
args = OPTIONS.info_dict.get("board_avb_dtbo_add_hash_footer_args")
|
args = OPTIONS.info_dict.get("avb_dtbo_add_hash_footer_args")
|
||||||
if args and args.strip():
|
if args and args.strip():
|
||||||
cmd.extend(shlex.split(args))
|
cmd.extend(shlex.split(args))
|
||||||
p = common.Run(cmd, stdout=subprocess.PIPE)
|
p = common.Run(cmd, stdout=subprocess.PIPE)
|
||||||
|
@ -270,7 +270,7 @@ def CreateImage(input_dir, info_dict, what, output_file, block_list=None):
|
||||||
# by the avb tool.
|
# by the avb tool.
|
||||||
is_verity_partition = "verity_block_device" in image_props
|
is_verity_partition = "verity_block_device" in image_props
|
||||||
verity_supported = (image_props.get("verity") == "true" or
|
verity_supported = (image_props.get("verity") == "true" or
|
||||||
image_props.get("board_avb_enable") == "true")
|
image_props.get("avb_enable") == "true")
|
||||||
is_avb_enable = image_props.get("avb_hashtree_enable") == "true"
|
is_avb_enable = image_props.get("avb_hashtree_enable") == "true"
|
||||||
if verity_supported and (is_verity_partition or is_avb_enable):
|
if verity_supported and (is_verity_partition or is_avb_enable):
|
||||||
adjusted_blocks_value = image_props.get("partition_size")
|
adjusted_blocks_value = image_props.get("partition_size")
|
||||||
|
@ -333,25 +333,51 @@ def AddUserdata(output_zip, prefix="IMAGES/"):
|
||||||
img.Write()
|
img.Write()
|
||||||
|
|
||||||
|
|
||||||
|
def AppendVBMetaArgsForPartition(cmd, partition, img_path, public_key_dir):
|
||||||
|
if not img_path:
|
||||||
|
return
|
||||||
|
|
||||||
|
# Check if chain partition is used.
|
||||||
|
key_path = OPTIONS.info_dict.get("avb_" + partition + "_key_path")
|
||||||
|
if key_path:
|
||||||
|
# extract public key in AVB format to be included in vbmeta.img
|
||||||
|
avbtool = os.getenv('AVBTOOL') or OPTIONS.info_dict["avb_avbtool"]
|
||||||
|
public_key_path = os.path.join(public_key_dir, "%s.avbpubkey" % partition)
|
||||||
|
p = common.Run([avbtool, "extract_public_key", "--key", key_path,
|
||||||
|
"--output", public_key_path],
|
||||||
|
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
|
p.communicate()
|
||||||
|
assert p.returncode == 0, \
|
||||||
|
"avbtool extract_public_key fail for partition: %r" % partition
|
||||||
|
|
||||||
|
rollback_index_location = OPTIONS.info_dict[
|
||||||
|
"avb_" + partition + "_rollback_index_location"]
|
||||||
|
cmd.extend(["--chain_partition", "%s:%s:%s" % (
|
||||||
|
partition, rollback_index_location, public_key_path)])
|
||||||
|
else:
|
||||||
|
cmd.extend(["--include_descriptors_from_image", img_path])
|
||||||
|
|
||||||
|
|
||||||
def AddVBMeta(output_zip, boot_img_path, system_img_path, vendor_img_path,
|
def AddVBMeta(output_zip, boot_img_path, system_img_path, vendor_img_path,
|
||||||
dtbo_img_path, prefix="IMAGES/"):
|
dtbo_img_path, prefix="IMAGES/"):
|
||||||
"""Create a VBMeta image and store it in output_zip."""
|
"""Create a VBMeta image and store it in output_zip."""
|
||||||
img = OutputFile(output_zip, OPTIONS.input_tmp, prefix, "vbmeta.img")
|
img = OutputFile(output_zip, OPTIONS.input_tmp, prefix, "vbmeta.img")
|
||||||
avbtool = os.getenv('AVBTOOL') or OPTIONS.info_dict["avb_avbtool"]
|
avbtool = os.getenv('AVBTOOL') or OPTIONS.info_dict["avb_avbtool"]
|
||||||
cmd = [avbtool, "make_vbmeta_image",
|
cmd = [avbtool, "make_vbmeta_image", "--output", img.name]
|
||||||
"--output", img.name,
|
common.AppendAVBSigningArgs(cmd, "vbmeta")
|
||||||
"--include_descriptors_from_image", boot_img_path,
|
|
||||||
"--include_descriptors_from_image", system_img_path]
|
public_key_dir = tempfile.mkdtemp(prefix="avbpubkey-")
|
||||||
if vendor_img_path is not None:
|
OPTIONS.tempfiles.append(public_key_dir)
|
||||||
cmd.extend(["--include_descriptors_from_image", vendor_img_path])
|
|
||||||
if dtbo_img_path is not None:
|
AppendVBMetaArgsForPartition(cmd, "boot", boot_img_path, public_key_dir)
|
||||||
cmd.extend(["--include_descriptors_from_image", dtbo_img_path])
|
AppendVBMetaArgsForPartition(cmd, "system", system_img_path, public_key_dir)
|
||||||
if OPTIONS.info_dict.get("system_root_image") == "true":
|
AppendVBMetaArgsForPartition(cmd, "vendor", vendor_img_path, public_key_dir)
|
||||||
cmd.extend(["--setup_rootfs_from_kernel", system_img_path])
|
AppendVBMetaArgsForPartition(cmd, "dtbo", dtbo_img_path, public_key_dir)
|
||||||
cmd.extend(shlex.split(OPTIONS.info_dict["avb_signing_args"]))
|
|
||||||
args = OPTIONS.info_dict.get("board_avb_make_vbmeta_image_args")
|
args = OPTIONS.info_dict.get("avb_vbmeta_args")
|
||||||
if args and args.strip():
|
if args and args.strip():
|
||||||
cmd.extend(shlex.split(args))
|
cmd.extend(shlex.split(args))
|
||||||
|
|
||||||
p = common.Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
p = common.Run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
p.communicate()
|
p.communicate()
|
||||||
assert p.returncode == 0, "avbtool make_vbmeta_image failed"
|
assert p.returncode == 0, "avbtool make_vbmeta_image failed"
|
||||||
|
@ -556,7 +582,7 @@ def AddImagesToTargetFiles(filename):
|
||||||
banner("dtbo")
|
banner("dtbo")
|
||||||
dtbo_img_path = AddDtbo(output_zip)
|
dtbo_img_path = AddDtbo(output_zip)
|
||||||
|
|
||||||
if OPTIONS.info_dict.get("board_avb_enable") == "true":
|
if OPTIONS.info_dict.get("avb_enable") == "true":
|
||||||
banner("vbmeta")
|
banner("vbmeta")
|
||||||
boot_contents = boot_image.WriteToTemp()
|
boot_contents = boot_image.WriteToTemp()
|
||||||
AddVBMeta(output_zip, boot_contents.name, system_img_path,
|
AddVBMeta(output_zip, boot_contents.name, system_img_path,
|
||||||
|
|
|
@ -109,18 +109,19 @@ def AVBCalcMaxImageSize(avbtool, footer_type, partition_size, additional_args):
|
||||||
Returns:
|
Returns:
|
||||||
The maximum image size or 0 if an error occurred.
|
The maximum image size or 0 if an error occurred.
|
||||||
"""
|
"""
|
||||||
cmdline = "%s add_%s_footer " % (avbtool, footer_type)
|
cmd =[avbtool, "add_%s_footer" % footer_type,
|
||||||
cmdline += "--partition_size %d " % partition_size
|
"--partition_size", partition_size, "--calc_max_image_size"]
|
||||||
cmdline += "--calc_max_image_size "
|
cmd.extend(shlex.split(additional_args))
|
||||||
cmdline += additional_args
|
|
||||||
(output, exit_code) = RunCommand(shlex.split(cmdline))
|
(output, exit_code) = RunCommand(cmd)
|
||||||
if exit_code != 0:
|
if exit_code != 0:
|
||||||
return 0
|
return 0
|
||||||
else:
|
else:
|
||||||
return int(output)
|
return int(output)
|
||||||
|
|
||||||
def AVBAddFooter(image_path, avbtool, footer_type, partition_size,
|
def AVBAddFooter(image_path, avbtool, footer_type, partition_size,
|
||||||
partition_name, signing_args, additional_args):
|
partition_name, key_path, algorithm,
|
||||||
|
additional_args):
|
||||||
"""Adds dm-verity hashtree and AVB metadata to an image.
|
"""Adds dm-verity hashtree and AVB metadata to an image.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
|
@ -129,19 +130,24 @@ def AVBAddFooter(image_path, avbtool, footer_type, partition_size,
|
||||||
footer_type: 'hash' or 'hashtree' for generating footer.
|
footer_type: 'hash' or 'hashtree' for generating footer.
|
||||||
partition_size: The size of the partition in question.
|
partition_size: The size of the partition in question.
|
||||||
partition_name: The name of the partition - will be embedded in metadata.
|
partition_name: The name of the partition - will be embedded in metadata.
|
||||||
signing_args: Arguments for signing the image.
|
key_path: Path to key to use or None.
|
||||||
|
algorithm: Name of algorithm to use or None.
|
||||||
additional_args: Additional arguments to pass to 'avbtool
|
additional_args: Additional arguments to pass to 'avbtool
|
||||||
add_hashtree_image'.
|
add_hashtree_image'.
|
||||||
Returns:
|
Returns:
|
||||||
True if the operation succeeded.
|
True if the operation succeeded.
|
||||||
"""
|
"""
|
||||||
cmdline = "%s add_%s_footer " % (avbtool, footer_type)
|
cmd =[avbtool, "add_%s_footer" % footer_type,
|
||||||
cmdline += "--partition_size %d " % partition_size
|
"--partition_size", partition_size,
|
||||||
cmdline += "--partition_name %s " % partition_name
|
"--partition_name", partition_name,
|
||||||
cmdline += "--image %s " % image_path
|
"--image", image_path]
|
||||||
cmdline += signing_args + " "
|
|
||||||
cmdline += additional_args
|
if key_path and algorithm:
|
||||||
(_, exit_code) = RunCommand(shlex.split(cmdline))
|
cmd.extend(["--key", key_path, "--algorithm", algorithm])
|
||||||
|
|
||||||
|
cmd.extend(shlex.split(additional_args))
|
||||||
|
|
||||||
|
(_, exit_code) = RunCommand(cmd)
|
||||||
return exit_code == 0
|
return exit_code == 0
|
||||||
|
|
||||||
def AdjustPartitionSizeForVerity(partition_size, fec_supported):
|
def AdjustPartitionSizeForVerity(partition_size, fec_supported):
|
||||||
|
@ -420,8 +426,8 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None):
|
||||||
avb_footer_type = 'hashtree'
|
avb_footer_type = 'hashtree'
|
||||||
|
|
||||||
if avb_footer_type:
|
if avb_footer_type:
|
||||||
avbtool = prop_dict.get("avb_avbtool")
|
avbtool = prop_dict["avb_avbtool"]
|
||||||
partition_size = int(prop_dict.get("partition_size"))
|
partition_size = prop_dict["partition_size"]
|
||||||
# avb_add_hash_footer_args or avb_add_hashtree_footer_args.
|
# avb_add_hash_footer_args or avb_add_hashtree_footer_args.
|
||||||
additional_args = prop_dict["avb_add_" + avb_footer_type + "_footer_args"]
|
additional_args = prop_dict["avb_add_" + avb_footer_type + "_footer_args"]
|
||||||
max_image_size = AVBCalcMaxImageSize(avbtool, avb_footer_type, partition_size,
|
max_image_size = AVBCalcMaxImageSize(avbtool, avb_footer_type, partition_size,
|
||||||
|
@ -429,7 +435,7 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None):
|
||||||
if max_image_size == 0:
|
if max_image_size == 0:
|
||||||
return False
|
return False
|
||||||
prop_dict["partition_size"] = str(max_image_size)
|
prop_dict["partition_size"] = str(max_image_size)
|
||||||
prop_dict["original_partition_size"] = str(partition_size)
|
prop_dict["original_partition_size"] = partition_size
|
||||||
|
|
||||||
if fs_type.startswith("ext"):
|
if fs_type.startswith("ext"):
|
||||||
build_command = [prop_dict["ext_mkuserimg"]]
|
build_command = [prop_dict["ext_mkuserimg"]]
|
||||||
|
@ -572,14 +578,16 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None):
|
||||||
|
|
||||||
# Add AVB HASH or HASHTREE footer (metadata).
|
# Add AVB HASH or HASHTREE footer (metadata).
|
||||||
if avb_footer_type:
|
if avb_footer_type:
|
||||||
avbtool = prop_dict.get("avb_avbtool")
|
avbtool = prop_dict["avb_avbtool"]
|
||||||
original_partition_size = int(prop_dict.get("original_partition_size"))
|
original_partition_size = prop_dict["original_partition_size"]
|
||||||
partition_name = prop_dict["partition_name"]
|
partition_name = prop_dict["partition_name"]
|
||||||
signing_args = prop_dict["avb_signing_args"]
|
# key_path and algorithm are only available when chain partition is used.
|
||||||
|
key_path = prop_dict.get("avb_key_path")
|
||||||
|
algorithm = prop_dict.get("avb_algorithm")
|
||||||
# avb_add_hash_footer_args or avb_add_hashtree_footer_args
|
# avb_add_hash_footer_args or avb_add_hashtree_footer_args
|
||||||
additional_args = prop_dict["avb_add_" + avb_footer_type + "_footer_args"]
|
additional_args = prop_dict["avb_add_" + avb_footer_type + "_footer_args"]
|
||||||
if not AVBAddFooter(out_file, avbtool, avb_footer_type, original_partition_size,
|
if not AVBAddFooter(out_file, avbtool, avb_footer_type, original_partition_size,
|
||||||
partition_name, signing_args, additional_args):
|
partition_name, key_path, algorithm, additional_args):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if run_fsck and prop_dict.get("skip_fsck") != "true":
|
if run_fsck and prop_dict.get("skip_fsck") != "true":
|
||||||
|
@ -624,8 +632,7 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||||
"verity_key",
|
"verity_key",
|
||||||
"verity_signer_cmd",
|
"verity_signer_cmd",
|
||||||
"verity_fec",
|
"verity_fec",
|
||||||
"board_avb_enable",
|
"avb_enable",
|
||||||
"avb_signing_args",
|
|
||||||
"avb_avbtool"
|
"avb_avbtool"
|
||||||
)
|
)
|
||||||
for p in common_props:
|
for p in common_props:
|
||||||
|
@ -633,6 +640,11 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||||
|
|
||||||
d["mount_point"] = mount_point
|
d["mount_point"] = mount_point
|
||||||
if mount_point == "system":
|
if mount_point == "system":
|
||||||
|
copy_prop("avb_system_hashtree_enable", "avb_hashtree_enable")
|
||||||
|
copy_prop("avb_system_add_hashtree_footer_args",
|
||||||
|
"avb_add_hashtree_footer_args")
|
||||||
|
copy_prop("avb_system_key_path", "avb_key_path")
|
||||||
|
copy_prop("avb_system_algorithm", "avb_algorithm")
|
||||||
copy_prop("fs_type", "fs_type")
|
copy_prop("fs_type", "fs_type")
|
||||||
# Copy the generic system fs type first, override with specific one if
|
# Copy the generic system fs type first, override with specific one if
|
||||||
# available.
|
# available.
|
||||||
|
@ -650,13 +662,15 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||||
copy_prop("system_squashfs_block_size", "squashfs_block_size")
|
copy_prop("system_squashfs_block_size", "squashfs_block_size")
|
||||||
copy_prop("system_squashfs_disable_4k_align", "squashfs_disable_4k_align")
|
copy_prop("system_squashfs_disable_4k_align", "squashfs_disable_4k_align")
|
||||||
copy_prop("system_base_fs_file", "base_fs_file")
|
copy_prop("system_base_fs_file", "base_fs_file")
|
||||||
copy_prop("system_avb_hashtree_enable", "avb_hashtree_enable")
|
|
||||||
copy_prop("system_avb_add_hashtree_footer_args",
|
|
||||||
"avb_add_hashtree_footer_args")
|
|
||||||
copy_prop("system_extfs_inode_count", "extfs_inode_count")
|
copy_prop("system_extfs_inode_count", "extfs_inode_count")
|
||||||
elif mount_point == "system_other":
|
elif mount_point == "system_other":
|
||||||
# We inherit the selinux policies of /system since we contain some of its files.
|
# We inherit the selinux policies of /system since we contain some of its files.
|
||||||
d["mount_point"] = "system"
|
d["mount_point"] = "system"
|
||||||
|
copy_prop("avb_system_hashtree_enable", "avb_hashtree_enable")
|
||||||
|
copy_prop("avb_system_add_hashtree_footer_args",
|
||||||
|
"avb_add_hashtree_footer_args")
|
||||||
|
copy_prop("avb_system_key_path", "avb_key_path")
|
||||||
|
copy_prop("avb_system_algorithm", "avb_algorithm")
|
||||||
copy_prop("fs_type", "fs_type")
|
copy_prop("fs_type", "fs_type")
|
||||||
copy_prop("system_fs_type", "fs_type")
|
copy_prop("system_fs_type", "fs_type")
|
||||||
copy_prop("system_size", "partition_size")
|
copy_prop("system_size", "partition_size")
|
||||||
|
@ -667,9 +681,6 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||||
copy_prop("system_squashfs_compressor_opt", "squashfs_compressor_opt")
|
copy_prop("system_squashfs_compressor_opt", "squashfs_compressor_opt")
|
||||||
copy_prop("system_squashfs_block_size", "squashfs_block_size")
|
copy_prop("system_squashfs_block_size", "squashfs_block_size")
|
||||||
copy_prop("system_base_fs_file", "base_fs_file")
|
copy_prop("system_base_fs_file", "base_fs_file")
|
||||||
copy_prop("system_avb_hashtree_enable", "avb_hashtree_enable")
|
|
||||||
copy_prop("system_avb_add_hashtree_footer_args",
|
|
||||||
"avb_add_hashtree_footer_args")
|
|
||||||
copy_prop("system_extfs_inode_count", "extfs_inode_count")
|
copy_prop("system_extfs_inode_count", "extfs_inode_count")
|
||||||
elif mount_point == "data":
|
elif mount_point == "data":
|
||||||
# Copy the generic fs type first, override with specific one if available.
|
# Copy the generic fs type first, override with specific one if available.
|
||||||
|
@ -682,6 +693,11 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||||
copy_prop("cache_fs_type", "fs_type")
|
copy_prop("cache_fs_type", "fs_type")
|
||||||
copy_prop("cache_size", "partition_size")
|
copy_prop("cache_size", "partition_size")
|
||||||
elif mount_point == "vendor":
|
elif mount_point == "vendor":
|
||||||
|
copy_prop("avb_vendor_hashtree_enable", "avb_hashtree_enable")
|
||||||
|
copy_prop("avb_vendor_add_hashtree_footer_args",
|
||||||
|
"avb_add_hashtree_footer_args")
|
||||||
|
copy_prop("avb_vendor_key_path", "avb_key_path")
|
||||||
|
copy_prop("avb_vendor_algorithm", "avb_algorithm")
|
||||||
copy_prop("vendor_fs_type", "fs_type")
|
copy_prop("vendor_fs_type", "fs_type")
|
||||||
copy_prop("vendor_size", "partition_size")
|
copy_prop("vendor_size", "partition_size")
|
||||||
copy_prop("vendor_journal_size", "journal_size")
|
copy_prop("vendor_journal_size", "journal_size")
|
||||||
|
@ -692,9 +708,6 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||||
copy_prop("vendor_squashfs_block_size", "squashfs_block_size")
|
copy_prop("vendor_squashfs_block_size", "squashfs_block_size")
|
||||||
copy_prop("vendor_squashfs_disable_4k_align", "squashfs_disable_4k_align")
|
copy_prop("vendor_squashfs_disable_4k_align", "squashfs_disable_4k_align")
|
||||||
copy_prop("vendor_base_fs_file", "base_fs_file")
|
copy_prop("vendor_base_fs_file", "base_fs_file")
|
||||||
copy_prop("vendor_avb_hashtree_enable", "avb_hashtree_enable")
|
|
||||||
copy_prop("vendor_avb_add_hashtree_footer_args",
|
|
||||||
"avb_add_hashtree_footer_args")
|
|
||||||
copy_prop("vendor_extfs_inode_count", "extfs_inode_count")
|
copy_prop("vendor_extfs_inode_count", "extfs_inode_count")
|
||||||
elif mount_point == "oem":
|
elif mount_point == "oem":
|
||||||
copy_prop("fs_type", "fs_type")
|
copy_prop("fs_type", "fs_type")
|
||||||
|
|
|
@ -345,6 +345,15 @@ def DumpInfoDict(d):
|
||||||
print("%-25s = (%s) %s" % (k, type(v).__name__, v))
|
print("%-25s = (%s) %s" % (k, type(v).__name__, v))
|
||||||
|
|
||||||
|
|
||||||
|
def AppendAVBSigningArgs(cmd, partition):
|
||||||
|
"""Append signing arguments for avbtool."""
|
||||||
|
# e.g., "--key path/to/signing_key --algorithm SHA256_RSA4096"
|
||||||
|
key_path = OPTIONS.info_dict.get("avb_" + partition + "_key_path")
|
||||||
|
algorithm = OPTIONS.info_dict.get("avb_" + partition + "_algorithm")
|
||||||
|
if key_path and algorithm:
|
||||||
|
cmd.extend(["--key", key_path, "--algorithm", algorithm])
|
||||||
|
|
||||||
|
|
||||||
def _BuildBootableImage(sourcedir, fs_config_file, info_dict=None,
|
def _BuildBootableImage(sourcedir, fs_config_file, info_dict=None,
|
||||||
has_ramdisk=False, two_step_image=False):
|
has_ramdisk=False, two_step_image=False):
|
||||||
"""Build a bootable image from the specified sourcedir.
|
"""Build a bootable image from the specified sourcedir.
|
||||||
|
@ -480,13 +489,13 @@ def _BuildBootableImage(sourcedir, fs_config_file, info_dict=None,
|
||||||
img_keyblock.close()
|
img_keyblock.close()
|
||||||
|
|
||||||
# AVB: if enabled, calculate and add hash to boot.img.
|
# AVB: if enabled, calculate and add hash to boot.img.
|
||||||
if info_dict.get("board_avb_enable", None) == "true":
|
if info_dict.get("avb_enable") == "true":
|
||||||
avbtool = os.getenv('AVBTOOL') or info_dict["avb_avbtool"]
|
avbtool = os.getenv('AVBTOOL') or info_dict["avb_avbtool"]
|
||||||
part_size = info_dict["boot_size"]
|
part_size = info_dict["boot_size"]
|
||||||
cmd = [avbtool, "add_hash_footer", "--image", img.name,
|
cmd = [avbtool, "add_hash_footer", "--image", img.name,
|
||||||
"--partition_size", str(part_size), "--partition_name", "boot"]
|
"--partition_size", str(part_size), "--partition_name", "boot"]
|
||||||
cmd.extend(shlex.split(info_dict["avb_signing_args"]))
|
AppendAVBSigningArgs(cmd, "boot")
|
||||||
args = info_dict.get("board_avb_boot_add_hash_footer_args")
|
args = info_dict.get("avb_boot_add_hash_footer_args")
|
||||||
if args and args.strip():
|
if args and args.strip():
|
||||||
cmd.extend(shlex.split(args))
|
cmd.extend(shlex.split(args))
|
||||||
p = Run(cmd, stdout=subprocess.PIPE)
|
p = Run(cmd, stdout=subprocess.PIPE)
|
||||||
|
|
|
@ -1168,7 +1168,7 @@ def WriteABOTAPackageWithBrilloScript(target_file, output_file,
|
||||||
# into A/B OTA package.
|
# into A/B OTA package.
|
||||||
target_zip = zipfile.ZipFile(target_file, "r")
|
target_zip = zipfile.ZipFile(target_file, "r")
|
||||||
if (OPTIONS.info_dict.get("verity") == "true" or
|
if (OPTIONS.info_dict.get("verity") == "true" or
|
||||||
OPTIONS.info_dict.get("board_avb_enable") == "true"):
|
OPTIONS.info_dict.get("avb_enable") == "true"):
|
||||||
care_map_path = "META/care_map.txt"
|
care_map_path = "META/care_map.txt"
|
||||||
namelist = target_zip.namelist()
|
namelist = target_zip.namelist()
|
||||||
if care_map_path in namelist:
|
if care_map_path in namelist:
|
||||||
|
|
Loading…
Reference in New Issue