diff options
author | android-build-prod (mdb) <android-build-team-robot@google.com> | 2020-07-16 21:33:08 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2020-07-16 21:33:08 +0000 |
commit | 890a74d5950762eb7ec1afb7832eccfdc70c388b (patch) | |
tree | e627fdba612cd6b5d2fb89e349e0a49ddb2d2fee | |
parent | 7fddb3b06af9629d60eca392a656414e0e623dde (diff) | |
parent | af8967e8beefdc7a2430980c6c73b6565e8f41b3 (diff) | |
download | build-platform-tools-30.0.4.tar.gz |
Merge "Snap for 6686656 from 7c16b443c3cc60a19011f7ad259d7b177439772a to sdk-release" into sdk-releaseplatform-tools-30.0.4
37 files changed, 614 insertions, 110 deletions
diff --git a/Changes.md b/Changes.md index 61e6bb66c5..3109e9bbf0 100644 --- a/Changes.md +++ b/Changes.md @@ -87,16 +87,16 @@ use: `BUILD_BROKEN_DUP_SYSPROP := true` -## ELF prebuilts in PRODUCT_COPY_FILES +## ELF prebuilts in `PRODUCT_COPY_FILES` {#BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES} -ELF prebuilts in PRODUCT_COPY_FILES that are installed into these paths are an +ELF prebuilts in `PRODUCT_COPY_FILES` that are installed into these paths are an error: * `<partition>/bin/*` * `<partition>/lib/*` * `<partition>/lib64/*` -Define prebuilt modules and add them to PRODUCT_PACKAGES instead. +Define prebuilt modules and add them to `PRODUCT_PACKAGES` instead. To temporarily relax this check and restore the behavior prior to this change, set `BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true` in `BoardConfig.mk`. diff --git a/core/Makefile b/core/Makefile index 2f5b6211ca..2550c0e5e0 100644 --- a/core/Makefile +++ b/core/Makefile @@ -265,7 +265,7 @@ $(3)/$(DEPMOD_STAGING_SUBDIR)/modules.dep: $(1) $(6) rm -rf $$(PRIVATE_STAGING_DIR) mkdir -p $$(PRIVATE_MODULE_DIR) $(if $(6),\ - unzip -qo -d $$(PRIVATE_MODULE_DIR) $$(PRIVATE_MODULE_ARCHIVE); \ + unzip -qoDD -d $$(PRIVATE_MODULE_DIR) $$(PRIVATE_MODULE_ARCHIVE); \ mkdir -p $$(PRIVATE_OUTPUT_DIR)/lib; \ cp -r $(3)/$(DEPMOD_STAGING_SUBDIR)/$(2)/lib/modules $$(PRIVATE_OUTPUT_DIR)/lib/; \ find $$(PRIVATE_MODULE_DIR) -type f -name *.ko | xargs basename -a > $$(PRIVATE_LOAD_FILE); \ @@ -383,7 +383,7 @@ $(foreach dir,$(BOARD_KERNEL_MODULE_DIRS), \ $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-image-kernel-modules-dir,RECOVERY,$(TARGET_RECOVERY_ROOT_OUT),,modules.load.recovery,,$(dir))) \ $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-image-kernel-modules-dir,VENDOR_RAMDISK,$(TARGET_VENDOR_RAMDISK_OUT),,modules.load,$(VENDOR_RAMDISK_STRIPPED_MODULE_STAGING_DIR),$(dir))) \ $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-vendor-ramdisk-recovery-load,$(dir))) \ - $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-image-kernel-modules-dir,VENDOR,$(TARGET_OUT_VENDOR),vendor,modules.load,$(VENDOR_STRIPPED_MODULE_STAGING_DIR),$(dir))) \ + $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-image-kernel-modules-dir,VENDOR,$(if $(filter true,$(BOARD_USES_VENDOR_DLKMIMAGE)),$(TARGET_OUT_VENDOR_DLKM),$(TARGET_OUT_VENDOR)),vendor,modules.load,$(VENDOR_STRIPPED_MODULE_STAGING_DIR),$(dir))) \ $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-vendor-charger-load,$(dir))) \ $(eval ALL_DEFAULT_INSTALLED_MODULES += $(call build-image-kernel-modules-dir,ODM,$(TARGET_OUT_ODM),odm,modules.load,,$(dir))) \ $(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\ @@ -889,8 +889,9 @@ endif # BUILDING_VENDOR_BOOT_IMAGE .PHONY: notice_files # Create the rule to combine the files into text and html/xml forms -# $(1) - xml_excluded_system_product_odm|xml_excluded_vendor_product_odm -# xml_product|xml_odm|xml_system_ext|xml_system|html +# $(1) - xml_excluded_system_product_odm_vendor_dlkm| +# xml_excluded_vendor_product_odm_vendor_dlkm| +# xml_product|xml_odm|xml_system_ext|xml_system|xml_vendor_dlkm|html # $(2) - Plain text output file # $(3) - HTML/XML output file # $(4) - File title @@ -916,13 +917,14 @@ $(2): PRIVATE_DIR := $(5) $(2): .KATI_IMPLICIT_OUTPUTS := $(3) $(2): $(6) $(BUILD_SYSTEM)/Makefile build/make/tools/generate-notice-files.py build/make/tools/generate-notice-files.py --text-output $(2) $(foreach xdir, $(7), -e $(xdir) )\ - $(if $(filter $(1),xml_excluded_vendor_product_odm),-e vendor -e product -e system_ext -e odm --xml-output, \ - $(if $(filter $(1),xml_excluded_system_product_odm),-e system -e product -e system_ext -e odm --xml-output, \ + $(if $(filter $(1),xml_excluded_vendor_product_odm_vendor_dlkm),-e vendor -e product -e system_ext -e odm -e vendor_dlkm --xml-output, \ + $(if $(filter $(1),xml_excluded_system_product_odm_vendor_dlkm),-e system -e product -e system_ext -e odm -e vendor_dlkm --xml-output, \ $(if $(filter $(1),xml_product),-i product --xml-output, \ $(if $(filter $(1),xml_system_ext),-i system_ext --xml-output, \ $(if $(filter $(1),xml_system),-i system --xml-output, \ $(if $(filter $(1),xml_odm),-i odm --xml-output, \ - --html-output)))))) $(3) \ + $(if $(filter $(1),xml_vendor_dlkm),-i vendor_dlkm --xml-output, \ + --html-output))))))) $(3) \ -t $$(PRIVATE_MESSAGE) -s $$(PRIVATE_DIR)/src notice_files: $(2) $(3) endef @@ -986,6 +988,11 @@ target_odm_notice_file_xml := $(TARGET_OUT_INTERMEDIATES)/NOTICE_ODM.xml target_odm_notice_file_xml_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE_ODM.xml.gz installed_odm_notice_xml_gz := $(TARGET_OUT_ODM)/etc/NOTICE.xml.gz +target_vendor_dlkm_notice_file_txt := $(TARGET_OUT_INTERMEDIATES)/NOTICE_VENDOR_DLKM.txt +target_vendor_dlkm_notice_file_xml := $(TARGET_OUT_INTERMEDIATES)/NOTICE_VENDOR_DLKM.xml +target_vendor_dlkm_notice_file_xml_gz := $(TARGET_OUT_INTERMEDIATES)/NOTICE_VENDOR_DLKM.xml.gz +installed_vendor_dlkm_notice_xml_gz := $(TARGET_OUT_VENDOR_DLKM)/etc/NOTICE.xml.gz + # Notice files are copied to TARGET_OUT_NOTICE_FILES as a side-effect of their module # being built. A notice xml file must depend on all modules that could potentially # install a license file relevant to it. @@ -996,17 +1003,19 @@ license_modules := $(filter $(PRODUCT_OUT)/%,$(license_modules)) license_modules := $(filter-out $(TARGET_OUT_FAKE)/%,$(license_modules)) # testcases are not relevant to the system image. license_modules := $(filter-out $(TARGET_OUT_TESTCASES)/%,$(license_modules)) -# filesystem images: system, vendor, product, system_ext, and odm +# filesystem images: system, vendor, product, system_ext, odm, and vendor_dlkm license_modules_system := $(filter $(TARGET_OUT)/%,$(license_modules)) license_modules_vendor := $(filter $(TARGET_OUT_VENDOR)/%,$(license_modules)) license_modules_product := $(filter $(TARGET_OUT_PRODUCT)/%,$(license_modules)) license_modules_system_ext := $(filter $(TARGET_OUT_SYSTEM_EXT)/%,$(license_modules)) license_modules_odm := $(filter $(TARGET_OUT_ODM)/%,$(license_modules)) +license_modules_vendor_dlkm := $(filter $(TARGET_OUT_VENDOR_DLKM)/%,$(license_modules)) license_modules_agg := $(license_modules_system) \ $(license_modules_vendor) \ $(license_modules_product) \ $(license_modules_system_ext) \ - $(license_modules_odm) + $(license_modules_odm) \ + $(license_modules_vendor_dlkm) # targets used for debug symbols only and do not get copied to the device license_modules_symbols_only := $(filter $(PRODUCT_OUT)/apex/%,$(license_modules)) @@ -1041,8 +1050,8 @@ $(call maybe-print-list-and-error, $(license_modules_rest), \ # update its notice file, so include those notices in the system partition instead ifdef BOARD_PREBUILT_VENDORIMAGE license_modules_system += $(license_modules_rehomed) -system_xml_directories := xml_excluded_vendor_product_odm -system_notice_file_message := "Notices for files contained in all filesystem images except vendor/system_ext/product/odm in this directory:" +system_xml_directories := xml_excluded_vendor_product_odm_vendor_dlkm +system_notice_file_message := "Notices for files contained in all filesystem images except vendor/system_ext/product/odm/vendor_dlkm in this directory:" else license_modules_vendor += $(license_modules_rehomed) system_xml_directories := xml_system @@ -1056,10 +1065,10 @@ $(eval $(call combine-notice-files, $(system_xml_directories), \ $(TARGET_OUT_NOTICE_FILES), \ $(license_modules_system), \ $(exclude_target_dirs))) -$(eval $(call combine-notice-files, xml_excluded_system_product_odm, \ +$(eval $(call combine-notice-files, xml_excluded_system_product_odm_vendor_dlkm, \ $(target_vendor_notice_file_txt), \ $(target_vendor_notice_file_xml), \ - "Notices for files contained in all filesystem images except system/system_ext/product/odm in this directory:", \ + "Notices for files contained in all filesystem images except system/system_ext/product/odm/vendor_dlkm in this directory:", \ $(TARGET_OUT_NOTICE_FILES), \ $(license_modules_vendor), \ $(exclude_target_dirs))) @@ -1084,6 +1093,13 @@ $(eval $(call combine-notice-files, xml_odm, \ $(TARGET_OUT_NOTICE_FILES), \ $(license_modules_odm), \ $(exclude_target_dirs))) +$(eval $(call combine-notice-files, xml_vendor_dlkm, \ + $(target_vendor_dlkm_notice_file_txt), \ + $(target_vendor_dlkm_notice_file_xml), \ + "Notices for files contained in the vendor_dlkm filesystem image in this directory:", \ + $(TARGET_OUT_NOTICE_FILES), \ + $(license_modules_vendor_dlkm), \ + $(exclude_target_dirs))) $(target_notice_file_xml_gz): $(target_notice_file_xml) | $(MINIGZIP) $(hide) $(MINIGZIP) -9 < $< > $@ @@ -1095,6 +1111,8 @@ $(target_system_ext_notice_file_xml_gz): $(target_system_ext_notice_file_xml) | $(hide) $(MINIGZIP) -9 < $< > $@ $(target_odm_notice_file_xml_gz): $(target_odm_notice_file_xml) | $(MINIGZIP) $(hide) $(MINIGZIP) -9 < $< > $@ +$(target_vendor_dlkm_notice_file_xml_gz): $(target_vendor_dlkm_notice_file_xml) | $(MINIGZIP) + $(hide) $(MINIGZIP) -9 < $< > $@ $(installed_notice_html_or_xml_gz): $(target_notice_file_xml_gz) $(copy-file-to-target) $(installed_vendor_notice_xml_gz): $(target_vendor_notice_file_xml_gz) @@ -1105,12 +1123,15 @@ $(installed_system_ext_notice_xml_gz): $(target_system_ext_notice_file_xml_gz) $(copy-file-to-target) $(installed_odm_notice_xml_gz): $(target_odm_notice_file_xml_gz) $(copy-file-to-target) +$(installed_vendor_dlkm_notice_xml_gz): $(target_vendor_dlkm_notice_file_xml_gz) + $(copy-file-to-target) ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_or_xml_gz) ALL_DEFAULT_INSTALLED_MODULES += $(installed_vendor_notice_xml_gz) ALL_DEFAULT_INSTALLED_MODULES += $(installed_product_notice_xml_gz) ALL_DEFAULT_INSTALLED_MODULES += $(installed_system_ext_notice_xml_gz) ALL_DEFAULT_INSTALLED_MODULES += $(installed_odm_notice_xml_gz) +ALL_DEFAULT_INSTALLED_MODULES += $(installed_vendor_dlkm_notice_xml_gz) endif # PRODUCT_NOTICE_SPLIT ALL_DEFAULT_INSTALLED_MODULES += $(installed_notice_html_or_xml_gz) @@ -1177,7 +1198,14 @@ ifeq ($(TARGET_USERIMAGES_USE_F2FS),true) INTERNAL_USERIMAGES_DEPS += $(MKF2FSUSERIMG) endif -ifneq ($(filter $(BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE) $(BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE) $(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE) $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE),squashfs),) +ifneq ($(filter \ + $(BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE) \ + $(BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE) \ + $(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE) \ + $(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE) \ + $(BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE) \ + $(BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE) \ + ,squashfs),) INTERNAL_USERIMAGES_DEPS += $(MKSQUASHFSUSERIMG) endif @@ -1207,7 +1235,7 @@ endif endif # PRODUCT_USE_DYNAMIC_PARTITIONS # $(1): the path of the output dictionary file -# $(2): a subset of "system vendor cache userdata product system_ext oem odm" +# $(2): a subset of "system vendor cache userdata product system_ext oem odm vendor_dlkm" # $(3): additional "key=value" pairs to append to the dictionary file. define generate-image-prop-dictionary $(if $(filter $(2),system),\ @@ -1303,6 +1331,20 @@ $(if $(filter $(2),odm),\ $(hide) echo "odm_selinux_fc=$(SELINUX_FC)" >> $(1) $(hide) echo "building_odm_image=$(BUILDING_ODM_IMAGE)" >> $(1) ) +$(if $(filter $(2),vendor_dlkm),\ + $(if $(BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE),$(hide) echo "vendor_dlkm_fs_type=$(BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_EXTFS_INODE_COUNT),$(hide) echo "vendor_dlkm_extfs_inode_count=$(BOARD_VENDOR_DLKMIMAGE_EXTFS_INODE_COUNT)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_EXTFS_RSV_PCT),$(hide) echo "vendor_dlkm_extfs_rsv_pct=$(BOARD_VENDOR_DLKMIMAGE_EXTFS_RSV_PCT)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE),$(hide) echo "vendor_dlkm_size=$(BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_JOURNAL_SIZE),$(hide) echo "vendor_dlkm_journal_size=$(BOARD_VENDOR_DLKMIMAGE_JOURNAL_SIZE)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_COMPRESSOR),$(hide) echo "vendor_dlkm_squashfs_compressor=$(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_COMPRESSOR)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_COMPRESSOR_OPT),$(hide) echo "vendor_dlkm_squashfs_compressor_opt=$(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_COMPRESSOR_OPT)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_BLOCK_SIZE),$(hide) echo "vendor_dlkm_squashfs_block_size=$(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_BLOCK_SIZE)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_DISABLE_4K_ALIGN),$(hide) echo "vendor_dlkm_squashfs_disable_4k_align=$(BOARD_VENDOR_DLKMIMAGE_SQUASHFS_DISABLE_4K_ALIGN)" >> $(1)) + $(if $(BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE),$(hide) echo "vendor_dlkm_reserved_size=$(BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE)" >> $(1)) + $(hide) echo "vendor_dlkm_selinux_fc=$(SELINUX_FC)" >> $(1) + $(hide) echo "building_vendor_dlkm_image=$(BUILDING_VENDOR_DLKM_IMAGE)" >> $(1) +) $(if $(filter $(2),oem),\ $(if $(BOARD_OEMIMAGE_PARTITION_SIZE),$(hide) echo "oem_size=$(BOARD_OEMIMAGE_PARTITION_SIZE)" >> $(1)) $(if $(BOARD_OEMIMAGE_JOURNAL_SIZE),$(hide) echo "oem_journal_size=$(BOARD_OEMIMAGE_JOURNAL_SIZE)" >> $(1)) @@ -1329,6 +1371,7 @@ $(if $(PRODUCT_SYSTEM_VERITY_PARTITION),$(hide) echo "system_verity_block_device $(if $(PRODUCT_VENDOR_VERITY_PARTITION),$(hide) echo "vendor_verity_block_device=$(PRODUCT_VENDOR_VERITY_PARTITION)" >> $(1)) $(if $(PRODUCT_PRODUCT_VERITY_PARTITION),$(hide) echo "product_verity_block_device=$(PRODUCT_PRODUCT_VERITY_PARTITION)" >> $(1)) $(if $(PRODUCT_SYSTEM_EXT_VERITY_PARTITION),$(hide) echo "system_ext_verity_block_device=$(PRODUCT_SYSTEM_EXT_VERITY_PARTITION)" >> $(1)) +$(if $(PRODUCT_VENDOR_DLKM_VERITY_PARTITION),$(hide) echo "vendor_dlkm_verity_block_device=$(PRODUCT_VENDOR_DLKM_VERITY_PARTITION)" >> $(1)) $(if $(PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot=$(PRODUCT_SUPPORTS_VBOOT)" >> $(1)) $(if $(PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_key=$(PRODUCT_VBOOT_SIGNING_KEY)" >> $(1)) $(if $(PRODUCT_SUPPORTS_VBOOT),$(hide) echo "vboot_subkey=$(PRODUCT_VBOOT_SIGNING_SUBKEY)" >> $(1)) @@ -1377,6 +1420,14 @@ $(if $(BOARD_AVB_ENABLE),\ $(hide) echo "avb_odm_key_path=$(BOARD_AVB_ODM_KEY_PATH)" >> $(1) $(hide) echo "avb_odm_algorithm=$(BOARD_AVB_ODM_ALGORITHM)" >> $(1) $(hide) echo "avb_odm_rollback_index_location=$(BOARD_AVB_ODM_ROLLBACK_INDEX_LOCATION)" >> $(1))) +$(if $(BOARD_AVB_ENABLE),$(hide) echo "avb_vendor_dlkm_hashtree_enable=$(BOARD_AVB_ENABLE)" >> $(1)) +$(if $(BOARD_AVB_ENABLE),\ + $(hide) echo "avb_vendor_dlkm_add_hashtree_footer_args=$(BOARD_AVB_VENDOR_DLKM_ADD_HASHTREE_FOOTER_ARGS)" >> $(1)) +$(if $(BOARD_AVB_ENABLE),\ + $(if $(BOARD_AVB_VENDOR_DLKM_KEY_PATH),\ + $(hide) echo "avb_vendor_dlkm_key_path=$(BOARD_AVB_VENDOR_DLKM_KEY_PATH)" >> $(1) + $(hide) echo "avb_vendor_dlkm_algorithm=$(BOARD_AVB_VENDOR_DLKM_ALGORITHM)" >> $(1) + $(hide) echo "avb_vendor_dlkm_rollback_index_location=$(BOARD_AVB_VENDOR_DLKM_ROLLBACK_INDEX_LOCATION)" >> $(1))) $(if $(filter true,$(BOARD_USES_RECOVERY_AS_BOOT)),\ $(hide) echo "recovery_as_boot=true" >> $(1)) $(if $(filter true,$(BOARD_BUILD_SYSTEM_ROOT_IMAGE)),\ @@ -1414,6 +1465,9 @@ endif ifdef BUILDING_ODM_IMAGE PROP_DICTIONARY_IMAGES += odm endif +ifdef BUILDING_VENDOR_DLKM_IMAGE + PROP_DICTIONARY_IMAGES += vendor_dlkm +endif define generate-userimage-prop-dictionary $(call generate-image-prop-dictionary,$(1),$(PROP_DICTIONARY_IMAGES),$(2)) endef @@ -2406,6 +2460,9 @@ endif ifdef BUILDING_ODM_IMAGE echo "-D $(TARGET_OUT_ODM)" >> $@.lst endif +ifdef BUILDING_VENDOR_DLKM_IMAGE + echo "-D $(TARGET_OUT_VENDOR_DLKM)" >> $@.lst +endif ifneq ($(PDK_PLATFORM_JAVA_ZIP_CONTENTS),) echo "-C $(OUT_DIR)" >> $@.lst for f in $(filter-out $(PRIVATE_DEX_FILES),$(addprefix -f $(OUT_DIR)/,$(PDK_PLATFORM_JAVA_ZIP_CONTENTS))); do \ @@ -2667,6 +2724,34 @@ define create-vendor-odm-symlink endef endif +# Create symlinks for vendor_dlkm on devices with a vendor_dlkm partition: +# /vendor/lib/modules -> /vendor_dlkm/lib/modules +# +# On devices with a vendor_dlkm partition, +# - /vendor/lib/modules is a symlink to a directory that stores vendor DLKMs. +# - /vendor_dlkm/{etc,...} store other vendor_dlkm files directly. The vendor_dlkm partition is +# mounted at /vendor_dlkm at runtime and the symlinks created in system/core/rootdir/Android.mk +# are hidden. +# On devices without a vendor_dlkm partition, +# - /vendor/lib/modules stores vendor DLKMs directly. +# - /vendor_dlkm/{etc,...} are symlinks to directories that store other vendor_dlkm files. +# See system/core/rootdir/Android.mk for a list of created symlinks. +# The vendor DLKMs and other vendor_dlkm files must not be accessed using other paths because they +# are not guaranteed to exist on all devices. +ifdef BOARD_USES_VENDOR_DLKMIMAGE +define create-vendor-vendor_dlkm-symlink +$(hide) if [ -d $(TARGET_OUT_VENDOR)/lib/modules ] && [ ! -h $(TARGET_OUT_VENDOR)/lib/modules ]; then \ + echo 'Non-symlink $(TARGET_OUT_VENDOR)/lib/modules detected!' 1>&2; \ + echo 'You cannot install files to $(TARGET_OUT_VENDOR)/lib/modules while building a separate vendor_dlkm.img!' 1>&2; \ + exit 1; \ +fi +$(hide) ln -sf /vendor_dlkm/lib/modules $(TARGET_OUT_VENDOR)/lib/modules +endef +else +define create-vendor-vendor_dlkm-symlink +endef +endif + vendorimage_intermediates := \ $(call intermediates-dir-for,PACKAGING,vendor) BUILT_VENDORIMAGE_TARGET := $(PRODUCT_OUT)/vendor.img @@ -2674,6 +2759,7 @@ define build-vendorimage-target $(call pretty,"Target vendor fs image: $(INSTALLED_VENDORIMAGE_TARGET)") @mkdir -p $(TARGET_OUT_VENDOR) $(call create-vendor-odm-symlink) + $(call create-vendor-vendor_dlkm-symlink) @mkdir -p $(vendorimage_intermediates) && rm -rf $(vendorimage_intermediates)/vendor_image_info.txt $(call generate-image-prop-dictionary, $(vendorimage_intermediates)/vendor_image_info.txt,vendor,skip_fsck=true) PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \ @@ -2873,6 +2959,61 @@ $(eval $(call copy-one-file,$(BOARD_PREBUILT_ODMIMAGE),$(INSTALLED_ODMIMAGE_TARG endif # ----------------------------------------------------------------- +# vendor_dlkm partition image +ifdef BUILDING_VENDOR_DLKM_IMAGE +INTERNAL_VENDOR_DLKMIMAGE_FILES := \ + $(filter $(TARGET_OUT_VENDOR_DLKM)/%,\ + $(ALL_DEFAULT_INSTALLED_MODULES)\ + $(ALL_PDK_FUSION_FILES)) \ + $(PDK_FUSION_SYMLINK_STAMP) +# platform.zip depends on $(INTERNAL_VENDOR_DLKMIMAGE_FILES). +$(INSTALLED_PLATFORM_ZIP) : $(INTERNAL_VENDOR_DLKMIMAGE_FILES) + +INSTALLED_FILES_FILE_VENDOR_DLKM := $(PRODUCT_OUT)/installed-files-vendor_dlkm.txt +INSTALLED_FILES_JSON_VENDOR_DLKM := $(INSTALLED_FILES_FILE_VENDOR_DLKM:.txt=.json) +$(INSTALLED_FILES_FILE_VENDOR_DLKM): .KATI_IMPLICIT_OUTPUTS := $(INSTALLED_FILES_JSON_VENDOR_DLKM) +$(INSTALLED_FILES_FILE_VENDOR_DLKM) : $(INTERNAL_VENDOR_DLKMIMAGE_FILES) $(FILESLIST) $(FILESLIST_UTIL) + @echo Installed file list: $@ + @mkdir -p $(dir $@) + @rm -f $@ + $(hide) $(FILESLIST) $(TARGET_OUT_VENDOR_DLKM) > $(@:.txt=.json) + $(hide) $(FILESLIST_UTIL) -c $(@:.txt=.json) > $@ + +vendor_dlkmimage_intermediates := \ + $(call intermediates-dir-for,PACKAGING,vendor_dlkm) +BUILT_VENDOR_DLKMIMAGE_TARGET := $(PRODUCT_OUT)/vendor_dlkm.img +define build-vendor_dlkmimage-target + $(call pretty,"Target vendor_dlkm fs image: $(INSTALLED_VENDOR_DLKMIMAGE_TARGET)") + @mkdir -p $(TARGET_OUT_VENDOR_DLKM) + @mkdir -p $(vendor_dlkmimage_intermediates) && rm -rf $(vendor_dlkmimage_intermediates)/vendor_dlkm_image_info.txt + $(call generate-userimage-prop-dictionary, $(vendor_dlkmimage_intermediates)/vendor_dlkm_image_info.txt, skip_fsck=true) + PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH \ + $(BUILD_IMAGE) \ + $(TARGET_OUT_VENDOR_DLKM) $(vendor_dlkmimage_intermediates)/vendor_dlkm_image_info.txt \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) $(TARGET_OUT) + $(call assert-max-image-size,$(INSTALLED_VENDOR_DLKMIMAGE_TARGET),$(BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE)) +endef + +# We just build this directly to the install location. +INSTALLED_VENDOR_DLKMIMAGE_TARGET := $(BUILT_VENDOR_DLKMIMAGE_TARGET) +$(INSTALLED_VENDOR_DLKMIMAGE_TARGET): \ + $(INTERNAL_USERIMAGES_DEPS) \ + $(INTERNAL_VENDOR_DLKMIMAGE_FILES) \ + $(INSTALLED_FILES_FILE_VENDOR_DLKM) + $(build-vendor_dlkmimage-target) + +.PHONY: vendor_dlkmimage-nodeps vdnod +vendor_dlkmimage-nodeps vdnod: | $(INTERNAL_USERIMAGES_DEPS) + $(build-vendor_dlkmimage-target) + +sync: $(INTERNAL_VENDOR_DLKMIMAGE_FILES) + +else ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE +INSTALLED_VENDOR_DLKMIMAGE_TARGET := $(PRODUCT_OUT)/vendor_dlkm.img +$(eval $(call copy-one-file,$(BOARD_PREBUILT_VENDOR_DLKMIMAGE),$(INSTALLED_VENDOR_DLKMIMAGE_TARGET))) +endif + +# ----------------------------------------------------------------- # dtbo image ifdef BOARD_PREBUILT_DTBOIMAGE INSTALLED_DTBOIMAGE_TARGET := $(PRODUCT_OUT)/dtbo.img @@ -3028,6 +3169,10 @@ BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS += \ --prop com.android.build.odm.fingerprint:$(BUILD_FINGERPRINT_FROM_FILE) \ --prop com.android.build.odm.os_version:$(PLATFORM_VERSION) +BOARD_AVB_VENDOR_DLKM_ADD_HASHTREE_FOOTER_ARGS += \ + --prop com.android.build.vendor_dlkm.fingerprint:$(BUILD_FINGERPRINT_FROM_FILE) \ + --prop com.android.build.vendor_dlkm.os_version:$(PLATFORM_VERSION_LAST_STABLE) + BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS += \ --prop com.android.build.dtbo.fingerprint:$(BUILD_FINGERPRINT_FROM_FILE) @@ -3047,6 +3192,11 @@ BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS += \ --prop com.android.build.odm.security_patch:$(ODM_SECURITY_PATCH) endif +ifdef VENDOR_DLKM_SECURITY_PATCH +BOARD_AVB_VENDOR_DLKM_ADD_HASHTREE_FOOTER_ARGS += \ + --prop com.android.build.vendor_dlkm.security_patch:$(VENDOR_DLKM_SECURITY_PATCH) +endif + BOOT_FOOTER_ARGS := BOARD_AVB_BOOT_ADD_HASH_FOOTER_ARGS VENDOR_BOOT_FOOTER_ARGS := BOARD_AVB_VENDOR_BOOT_ADD_HASH_FOOTER_ARGS DTBO_FOOTER_ARGS := BOARD_AVB_DTBO_ADD_HASH_FOOTER_ARGS @@ -3056,6 +3206,7 @@ RECOVERY_FOOTER_ARGS := BOARD_AVB_RECOVERY_ADD_HASH_FOOTER_ARGS PRODUCT_FOOTER_ARGS := BOARD_AVB_PRODUCT_ADD_HASHTREE_FOOTER_ARGS SYSTEM_EXT_FOOTER_ARGS := BOARD_AVB_SYSTEM_EXT_ADD_HASHTREE_FOOTER_ARGS ODM_FOOTER_ARGS := BOARD_AVB_ODM_ADD_HASHTREE_FOOTER_ARGS +VENDOR_DLKM_FOOTER_ARGS := BOARD_AVB_VENDOR_DLKM_ADD_HASHTREE_FOOTER_ARGS # Helper function that checks and sets required build variables for an AVB chained partition. # $(1): the partition to enable AVB chain, e.g., boot or system or vbmeta_system. @@ -3150,6 +3301,10 @@ ifdef INSTALLED_ODMIMAGE_TARGET $(eval $(call check-and-set-avb-args,odm)) endif +ifdef INSTALLED_VENDOR_DLKMIMAGE_TARGET +$(eval $(call check-and-set-avb-args,vendor_dlkm)) +endif + ifdef INSTALLED_DTBOIMAGE_TARGET $(eval $(call check-and-set-avb-args,dtbo)) endif @@ -3230,6 +3385,9 @@ define extract-avb-chain-public-keys $(if $(BOARD_AVB_ODM_KEY_PATH),\ $(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_ODM_KEY_PATH) \ --output $(1)/odm.avbpubkey) + $(if $(BOARD_AVB_VENDOR_DLKM_KEY_PATH),\ + $(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_VENDOR_DLKM_KEY_PATH) \ + --output $(1)/vendor_dlkm.avbpubkey) $(if $(BOARD_AVB_DTBO_KEY_PATH),\ $(hide) $(AVBTOOL) extract_public_key --key $(BOARD_AVB_DTBO_KEY_PATH) \ --output $(1)/dtbo.avbpubkey) @@ -3312,6 +3470,7 @@ $(INSTALLED_VBMETAIMAGE_TARGET): \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) \ $(INSTALLED_ODMIMAGE_TARGET) \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) \ $(INSTALLED_DTBOIMAGE_TARGET) \ $(INSTALLED_CUSTOMIMAGES_TARGET) \ $(INSTALLED_RECOVERYIMAGE_TARGET) \ @@ -3334,7 +3493,9 @@ endif # BOARD_AVB_ENABLE # ----------------------------------------------------------------- # Check VINTF of build +# Note: vendor_dlkm does not have VINTF files. ifeq (,$(TARGET_BUILD_UNBUNDLED)) + intermediates := $(call intermediates-dir-for,PACKAGING,check_vintf_all) check_vintf_all_deps := @@ -4119,6 +4280,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \ $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) \ $(INSTALLED_VBMETAIMAGE_TARGET) \ $(INSTALLED_ODMIMAGE_TARGET) \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) \ $(INSTALLED_DTBOIMAGE_TARGET) \ $(INSTALLED_CUSTOMIMAGES_TARGET) \ $(INTERNAL_SYSTEMOTHERIMAGE_FILES) \ @@ -4134,6 +4296,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \ $(PRODUCT_PRODUCT_BASE_FS_PATH) \ $(PRODUCT_SYSTEM_EXT_BASE_FS_PATH) \ $(PRODUCT_ODM_BASE_FS_PATH) \ + $(PRODUCT_VENDOR_DLKM_BASE_FS_PATH) \ $(LPMAKE) \ $(SELINUX_FC) \ $(INSTALLED_MISC_INFO_TARGET) \ @@ -4151,6 +4314,7 @@ $(BUILT_TARGET_FILES_PACKAGE): \ $(call create-system-product-symlink) $(call create-system-system_ext-symlink) $(call create-vendor-odm-symlink) + $(call create-vendor-vendor_dlkm-symlink) $(hide) rm -rf $@ $@.list $(zip_root) $(hide) mkdir -p $(dir $@) $(zip_root) ifneq (,$(INSTALLED_RECOVERYIMAGE_TARGET)$(filter true,$(BOARD_USES_RECOVERY_AS_BOOT))) @@ -4271,6 +4435,11 @@ ifdef BUILDING_ODM_IMAGE $(hide) $(call package_files-copy-root, \ $(TARGET_OUT_ODM),$(zip_root)/ODM) endif +ifdef BUILDING_VENDOR_DLKM_IMAGE + @# Contents of the vendor_dlkm image + $(hide) $(call package_files-copy-root, \ + $(TARGET_OUT_VENDOR_DLKM),$(zip_root)/VENDOR_DLKM) +endif ifdef BUILDING_SYSTEM_OTHER_IMAGE @# Contents of the system_other image $(hide) $(call package_files-copy-root, \ @@ -4316,6 +4485,10 @@ ifneq ($(PRODUCT_ODM_BASE_FS_PATH),) $(hide) cp $(PRODUCT_ODM_BASE_FS_PATH) \ $(zip_root)/META/$(notdir $(PRODUCT_ODM_BASE_FS_PATH)) endif +ifneq ($(PRODUCT_VENDOR_DLKM_BASE_FS_PATH),) + $(hide) cp $(PRODUCT_VENDOR_DLKM_BASE_FS_PATH) \ + $(zip_root)/META/$(notdir $(PRODUCT_VENDOR_DLKM_BASE_FS_PATH)) +endif ifeq ($(TARGET_OTA_ALLOW_NON_AB),true) ifneq ($(INSTALLED_RECOVERYIMAGE_TARGET),) $(hide) PATH=$(INTERNAL_USERIMAGES_BINARY_PATHS):$$PATH MKBOOTIMG=$(MKBOOTIMG) \ @@ -4361,6 +4534,10 @@ ifdef BOARD_PREBUILT_ODMIMAGE $(hide) mkdir -p $(zip_root)/IMAGES $(hide) cp $(INSTALLED_ODMIMAGE_TARGET) $(zip_root)/IMAGES/ endif +ifdef BOARD_PREBUILT_VENDOR_DLKIMMAGE + $(hide) mkdir -p $(zip_root)/IMAGES + $(hide) cp $(INSTALLED_VENDOR_DLKIMMAGE_TARGET) $(zip_root)/IMAGES/ +endif ifdef BOARD_PREBUILT_DTBOIMAGE $(hide) mkdir -p $(zip_root)/PREBUILT_IMAGES $(hide) cp $(INSTALLED_DTBOIMAGE_TARGET) $(zip_root)/PREBUILT_IMAGES/ @@ -4392,6 +4569,9 @@ endif ifdef BUILDING_ODM_IMAGE $(hide) $(call fs_config,$(zip_root)/ODM,odm/) > $(zip_root)/META/odm_filesystem_config.txt endif +ifdef BUILDING_VENDOR_DLKM_IMAGE + $(hide) $(call fs_config,$(zip_root)/VENDOR_DLKM,vendor_dlkm/) > $(zip_root)/META/vendor_dlkm_filesystem_config.txt +endif @# ROOT always contains the files for the root under normal boot. $(hide) $(call fs_config,$(zip_root)/ROOT,) > $(zip_root)/META/root_filesystem_config.txt ifeq ($(BOARD_USES_RECOVERY_AS_BOOT),true) @@ -4550,6 +4730,7 @@ $(SYMBOLS_ZIP): $(INSTALLED_SYSTEMIMAGE_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) \ $(INSTALLED_ODMIMAGE_TARGET) \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) \ $(updater_dep) endif $(SYMBOLS_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,symbols)/filelist @@ -4575,7 +4756,8 @@ $(COVERAGE_ZIP): $(INSTALLED_SYSTEMIMAGE_TARGET) \ $(INSTALLED_VENDORIMAGE_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) \ - $(INSTALLED_ODMIMAGE_TARGET) + $(INSTALLED_ODMIMAGE_TARGET) \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) endif $(COVERAGE_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,coverage)/filelist $(COVERAGE_ZIP): $(SOONG_ZIP) @@ -4652,6 +4834,7 @@ $(PROGUARD_DICT_ZIP): \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) \ $(INSTALLED_ODMIMAGE_TARGET) \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) \ $(updater_dep) endif $(PROGUARD_DICT_ZIP): PRIVATE_LIST_FILE := $(call intermediates-dir-for,PACKAGING,proguard)/filelist @@ -4890,6 +5073,17 @@ odmimage: $(INSTALLED_QEMU_ODMIMAGE) droidcore: $(INSTALLED_QEMU_ODMIMAGE) endif +ifdef INSTALLED_VENDOR_DLKMIMAGE_TARGET +INSTALLED_QEMU_VENDOR_DLKMIMAGE := $(PRODUCT_OUT)/vendor_dlkm-qemu.img +$(INSTALLED_QEMU_VENDOR_DLKMIMAGE): $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) $(MK_QEMU_IMAGE_SH) $(SGDISK_HOST) + @echo Create vendor_dlkm-qemu.img + (export SGDISK=$(SGDISK_HOST); $(MK_QEMU_IMAGE_SH) $(INSTALLED_VENDOR_DLKMIMAGE_TARGET)) + +vendor_dlkmimage: $(INSTALLED_QEMU_VENDOR_DLKMIMAGE) +droidcore: $(INSTALLED_QEMU_VENDOR_DLKMIMAGE) +endif + + QEMU_VERIFIED_BOOT_PARAMS := $(PRODUCT_OUT)/VerifiedBootParams.textproto $(QEMU_VERIFIED_BOOT_PARAMS): $(INSTALLED_VBMETAIMAGE_TARGET) $(INSTALLED_SYSTEMIMAGE_TARGET) \ $(MK_VBMETA_BOOT_KERNEL_CMDLINE_SH) $(AVBTOOL) diff --git a/core/binary.mk b/core/binary.mk index a70a047a62..6c1c4db816 100644 --- a/core/binary.mk +++ b/core/binary.mk @@ -71,12 +71,8 @@ ifeq (,$(strip $(my_cc))$(strip $(my_cxx))) my_pool := $(GOMA_OR_RBE_POOL) endif -# TODO(b/158212027): Remove `$(COVERAGE_PATHS)` from this condition when all users have been moved -# to `NATIVE_COVERAGE_PATHS`. -ifneq (,$(strip $(foreach dir,$(COVERAGE_PATHS) $(NATIVE_COVERAGE_PATHS),$(filter $(dir)%,$(LOCAL_PATH))))) -# TODO(b/158212027): Remove `$(COVERAGE_EXCLUDE_PATHS)` from this condition when all users have been -# moved to `NATIVE_COVERAGE_EXCLUDE_PATHS`. -ifeq (,$(strip $(foreach dir,$(COVERAGE_EXCLUDE_PATHS) $(NATIVE_COVERAGE_EXCLUDE_PATHS),$(filter $(dir)%,$(LOCAL_PATH))))) +ifneq (,$(strip $(foreach dir,$(NATIVE_COVERAGE_PATHS),$(filter $(dir)%,$(LOCAL_PATH))))) +ifeq (,$(strip $(foreach dir,$(NATIVE_COVERAGE_EXCLUDE_PATHS),$(filter $(dir)%,$(LOCAL_PATH))))) my_native_coverage := true else my_native_coverage := false diff --git a/core/board_config.mk b/core/board_config.mk index a6e586d2ea..70c15895ea 100644 --- a/core/board_config.mk +++ b/core/board_config.mk @@ -72,12 +72,15 @@ _board_strip_readonly_list += \ BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE \ BOARD_ODMIMAGE_PARTITION_SIZE \ BOARD_ODMIMAGE_FILE_SYSTEM_TYPE \ + BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE \ + BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE \ # Logical partitions related variables. _dynamic_partitions_var_list += \ BOARD_SYSTEMIMAGE_PARTITION_RESERVED_SIZE \ BOARD_VENDORIMAGE_PARTITION_RESERVED_SIZE \ BOARD_ODMIMAGE_PARTITION_RESERVED_SIZE \ + BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE \ BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE \ BOARD_SYSTEM_EXTIMAGE_PARTITION_RESERVED_SIZE \ BOARD_SUPER_PARTITION_SIZE \ @@ -512,6 +515,40 @@ endif .KATI_READONLY := BUILDING_SYSTEM_EXT_IMAGE ########################################### +# Now we can substitute with the real value of TARGET_COPY_OUT_VENDOR_DLKM +ifeq ($(TARGET_COPY_OUT_VENDOR_DLKM),$(_vendor_dlkm_path_placeholder)) + TARGET_COPY_OUT_VENDOR_DLKM := $(TARGET_COPY_OUT_VENDOR)/vendor_dlkm +else ifeq ($(filter vendor_dlkm system/vendor/vendor_dlkm vendor/vendor_dlkm,$(TARGET_COPY_OUT_VENDOR_DLKM)),) + $(error TARGET_COPY_OUT_VENDOR_DLKM must be either 'vendor_dlkm', 'system/vendor/vendor_dlkm' or 'vendor/vendor_dlkm', seeing '$(TARGET_COPY_OUT_VENDOR_DLKM)'.) +endif +PRODUCT_COPY_FILES := $(subst $(_vendor_dlkm_path_placeholder),$(TARGET_COPY_OUT_VENDOR_DLKM),$(PRODUCT_COPY_FILES)) + +BOARD_USES_VENDOR_DLKMIMAGE := +ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE + BOARD_USES_VENDOR_DLKMIMAGE := true +endif +ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE + BOARD_USES_VENDOR_DLKMIMAGE := true +endif +$(call check_image_config,vendor_dlkm) + +BUILDING_VENDOR_DLKM_IMAGE := +ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),) + ifdef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE + BUILDING_VENDOR_DLKM_IMAGE := true + endif +else ifeq ($(PRODUCT_BUILD_VENDOR_DLKM_IMAGE),true) + BUILDING_VENDOR_DLKM_IMAGE := true + ifndef BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE + $(error PRODUCT_BUILD_VENDOR_DLKM_IMAGE set to true, but BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE not defined) + endif +endif +ifdef BOARD_PREBUILT_VENDOR_DLKMIMAGE + BUILDING_VENDOR_DLKM_IMAGE := +endif +.KATI_READONLY := BUILDING_VENDOR_DLKM_IMAGE + +########################################### # Now we can substitute with the real value of TARGET_COPY_OUT_ODM ifeq ($(TARGET_COPY_OUT_ODM),$(_odm_path_placeholder)) TARGET_COPY_OUT_ODM := $(TARGET_COPY_OUT_VENDOR)/odm diff --git a/core/config.mk b/core/config.mk index a5b8ef7ccd..2689d80322 100644 --- a/core/config.mk +++ b/core/config.mk @@ -151,6 +151,8 @@ $(KATI_obsolete_var \ $(KATI_obsolete_var TARGET_PREFER_32_BIT TARGET_PREFER_32_BIT_APPS TARGET_PREFER_32_BIT_EXECUTABLES) $(KATI_obsolete_var PRODUCT_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT_WHITELIST,Use PRODUCT_ARTIFACT_SYSTEM_CERTIFICATE_REQUIREMENT_ALLOW_LIST.) $(KATI_obsolete_var PRODUCT_ARTIFACT_PATH_REQUIREMENT_WHITELIST,Use PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST.) +$(KATI_obsolete_var COVERAGE_PATHS,Use NATIVE_COVERAGE_PATHS instead) +$(KATI_obsolete_var COVERAGE_EXCLUDE_PATHS,Use NATIVE_COVERAGE_EXCLUDE_PATHS instead) # Used to force goals to build. Only use for conditionally defined goals. .PHONY: FORCE @@ -928,6 +930,13 @@ $(error Should not define BOARD_ODMIMAGE_PARTITION_SIZE and \ endif endif +ifneq ($(BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE),) +ifneq ($(BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE),) +$(error Should not define BOARD_VENDOR_DLKMIMAGE_PARTITION_SIZE and \ + BOARD_VENDOR_DLKMIMAGE_PARTITION_RESERVED_SIZE together) +endif +endif + ifneq ($(BOARD_PRODUCTIMAGE_PARTITION_SIZE),) ifneq ($(BOARD_PRODUCTIMAGE_PARTITION_RESERVED_SIZE),) $(error Should not define BOARD_PRODUCTIMAGE_PARTITION_SIZE and \ @@ -963,7 +972,7 @@ $(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \ ) # BOARD_*_PARTITION_LIST: a list of the following tokens -valid_super_partition_list := system vendor product system_ext odm +valid_super_partition_list := system vendor product system_ext odm vendor_dlkm $(foreach group,$(call to-upper,$(BOARD_SUPER_PARTITION_GROUPS)), \ $(if $(filter-out $(valid_super_partition_list),$(BOARD_$(group)_PARTITION_LIST)), \ $(error BOARD_$(group)_PARTITION_LIST contains invalid partition name \ diff --git a/core/dex_preopt_odex_install.mk b/core/dex_preopt_odex_install.mk index f738c3e8ba..3d5f68aa01 100644 --- a/core/dex_preopt_odex_install.mk +++ b/core/dex_preopt_odex_install.mk @@ -304,7 +304,7 @@ ifdef LOCAL_DEX_PREOPT for i in $$(zipinfo -1 $(my_dexpreopt_zip)); \ do mkdir -p $(PRODUCT_OUT)/$$(dirname $$i); \ done && \ - ( unzip -qo -d $(PRODUCT_OUT) $(my_dexpreopt_zip) 2>&1 | grep -v "zipfile is empty"; exit $${PIPESTATUS[0]} ) || \ + ( unzip -qoDD -d $(PRODUCT_OUT) $(my_dexpreopt_zip) 2>&1 | grep -v "zipfile is empty"; exit $${PIPESTATUS[0]} ) || \ ( code=$$?; if [ $$code -ne 0 -a $$code -ne 1 ]; then exit $$code; fi ) $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) diff --git a/core/envsetup.mk b/core/envsetup.mk index 3aff0079ca..1fb4605881 100644 --- a/core/envsetup.mk +++ b/core/envsetup.mk @@ -253,6 +253,7 @@ _vendor_path_placeholder := ||VENDOR-PATH-PH|| _product_path_placeholder := ||PRODUCT-PATH-PH|| _system_ext_path_placeholder := ||SYSTEM_EXT-PATH-PH|| _odm_path_placeholder := ||ODM-PATH-PH|| +_vendor_dlkm_path_placeholder := ||VENDOR_DLKM-PATH-PH|| TARGET_COPY_OUT_VENDOR := $(_vendor_path_placeholder) TARGET_COPY_OUT_VENDOR_RAMDISK := vendor-ramdisk TARGET_COPY_OUT_PRODUCT := $(_product_path_placeholder) @@ -261,6 +262,7 @@ TARGET_COPY_OUT_PRODUCT := $(_product_path_placeholder) TARGET_COPY_OUT_PRODUCT_SERVICES := $(_product_path_placeholder) TARGET_COPY_OUT_SYSTEM_EXT := $(_system_ext_path_placeholder) TARGET_COPY_OUT_ODM := $(_odm_path_placeholder) +TARGET_COPY_OUT_VENDOR_DLKM := $(_vendor_dlkm_path_placeholder) # Returns the non-sanitized version of the path provided in $1. define get_non_asan_path @@ -719,6 +721,40 @@ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED := $(TARGET_OUT_ODM_ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS \ $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_ODM_APPS_PRIVILEGED +TARGET_OUT_VENDOR_DLKM := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_VENDOR_DLKM) + +TARGET_OUT_VENDOR_DLKM_ETC := $(TARGET_OUT_VENDOR_DLKM)/etc +.KATI_READONLY := \ + TARGET_OUT_VENDOR_DLKM_ETC + +# Unlike other partitions, vendor_dlkm should only contain kernel modules. +TARGET_OUT_VENDOR_DLKM_EXECUTABLES := +TARGET_OUT_VENDOR_DLKM_OPTIONAL_EXECUTABLES := +TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES := +TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE := +TARGET_OUT_VENDOR_DLKM_JAVA_LIBRARIES := +TARGET_OUT_VENDOR_DLKM_APPS := +TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED := +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_EXECUTABLES := +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES := +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE := +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS := +$(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED := +$(KATI_obsolete_var \ + TARGET_OUT_VENDOR_DLKM_EXECUTABLES \ + TARGET_OUT_VENDOR_DLKM_OPTIONAL_EXECUTABLES \ + TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES \ + TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE \ + TARGET_OUT_VENDOR_DLKM_JAVA_LIBRARIES \ + TARGET_OUT_VENDOR_DLKM_APPS \ + TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_EXECUTABLES \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_SHARED_LIBRARIES \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_RENDERSCRIPT_BITCODE \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS \ + $(TARGET_2ND_ARCH_VAR_PREFIX)TARGET_OUT_VENDOR_DLKM_APPS_PRIVILEGED \ + , vendor_dlkm should not contain any executables, libraries, or apps) + TARGET_OUT_PRODUCT := $(PRODUCT_OUT)/$(TARGET_COPY_OUT_PRODUCT) TARGET_OUT_PRODUCT_EXECUTABLES := $(TARGET_OUT_PRODUCT)/bin .KATI_READONLY := TARGET_OUT_PRODUCT diff --git a/core/jacoco.mk b/core/jacoco.mk index 148bb045ec..e8fb89bf6c 100644 --- a/core/jacoco.mk +++ b/core/jacoco.mk @@ -47,7 +47,7 @@ $(my_unzipped_timestamp_path): PRIVATE_FULL_CLASSES_PRE_JACOCO_JAR := $(LOCAL_FU $(my_unzipped_timestamp_path): $(LOCAL_FULL_CLASSES_PRE_JACOCO_JAR) rm -rf $(PRIVATE_UNZIPPED_PATH) $@ mkdir -p $(PRIVATE_UNZIPPED_PATH) - unzip -q $(PRIVATE_FULL_CLASSES_PRE_JACOCO_JAR) \ + unzip -qDD $(PRIVATE_FULL_CLASSES_PRE_JACOCO_JAR) \ -d $(PRIVATE_UNZIPPED_PATH) \ $(PRIVATE_INCLUDE_ARGS) (cd $(PRIVATE_UNZIPPED_PATH) && rm -rf $(PRIVATE_EXCLUDE_ARGS)) diff --git a/core/java_prebuilt_internal.mk b/core/java_prebuilt_internal.mk index 95ae2f8d45..6ee1ae1d71 100644 --- a/core/java_prebuilt_internal.mk +++ b/core/java_prebuilt_internal.mk @@ -126,11 +126,8 @@ $(my_src_jar) : .KATI_IMPLICIT_OUTPUTS := $(my_src_proguard_options) $(my_src_jar) : .KATI_IMPLICIT_OUTPUTS += $(my_src_android_manifest) $(my_src_jar) : $(my_src_aar) $(hide) rm -rf $(dir $@) && mkdir -p $(dir $@) $(dir $@)/res - $(hide) unzip -qo -d $(dir $@) $< - # Make sure the extracted classes.jar has a new timestamp. - $(hide) touch $@ + $(hide) unzip -qoDD -d $(dir $@) $< # Make sure the proguard and AndroidManifest.xml files exist - # and have a new timestamp. $(hide) touch $(dir $@)/proguard.txt $(hide) touch $(dir $@)/AndroidManifest.xml diff --git a/core/main.mk b/core/main.mk index 812cce0235..8ac07173a7 100644 --- a/core/main.mk +++ b/core/main.mk @@ -102,15 +102,6 @@ ifeq (true,$(EMMA_INSTRUMENT_STATIC)) EMMA_INSTRUMENT := true endif -# TODO(b/158212027): Turn this into an error when all users have been moved to -# `NATIVE_COVERAGE_PATHS` and `NATIVE_COVERAGE_EXCLUDE_PATHS`. -ifneq ($(COVERAGE_PATHS),) - $(warning Variable COVERAGE_PATHS is deprecated. Please use NATIVE_COVERAGE_PATHS instead.) -endif -ifneq ($(COVERAGE_EXCLUDE_PATHS),) - $(warning Variable COVERAGE_EXCLUDE_PATHS is deprecated. Please use NATIVE_COVERAGE_EXCLUDE_PATHS instead.) -endif - ifeq (true,$(EMMA_INSTRUMENT)) # Adding the jacoco library can cause the inclusion of # some typically banned classes @@ -1150,7 +1141,8 @@ define resolve-product-relative-paths $(subst $(_product_path_placeholder),$(TARGET_COPY_OUT_PRODUCT),\ $(subst $(_system_ext_path_placeholder),$(TARGET_COPY_OUT_SYSTEM_EXT),\ $(subst $(_odm_path_placeholder),$(TARGET_COPY_OUT_ODM),\ - $(foreach p,$(1),$(call append-path,$(PRODUCT_OUT),$(p)$(2))))))) + $(subst $(_vendor_dlkm_path_placeholder),$(TARGET_COPY_OUT_VENDOR_DLKM),\ + $(foreach p,$(1),$(call append-path,$(PRODUCT_OUT),$(p)$(2)))))))) endef # Returns modules included automatically as a result of certain BoardConfig @@ -1528,6 +1520,9 @@ systemextimage: $(INSTALLED_SYSTEM_EXTIMAGE_TARGET) .PHONY: odmimage odmimage: $(INSTALLED_ODMIMAGE_TARGET) +.PHONY: vendor_dlkmimage +vendor_dlkmimage: $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) + .PHONY: systemotherimage systemotherimage: $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) @@ -1565,6 +1560,7 @@ droidcore: $(filter $(HOST_OUT_ROOT)/%,$(modules_to_install)) \ $(INSTALLED_VENDOR_DEBUG_RAMDISK_TARGET) \ $(INSTALLED_VENDOR_DEBUG_BOOTIMAGE_TARGET) \ $(INSTALLED_ODMIMAGE_TARGET) \ + $(INSTALLED_VENDOR_DLKMIMAGE_TARGET) \ $(INSTALLED_SUPERIMAGE_EMPTY_TARGET) \ $(INSTALLED_PRODUCTIMAGE_TARGET) \ $(INSTALLED_SYSTEMOTHERIMAGE_TARGET) \ @@ -1574,6 +1570,8 @@ droidcore: $(filter $(HOST_OUT_ROOT)/%,$(modules_to_install)) \ $(INSTALLED_FILES_JSON_VENDOR) \ $(INSTALLED_FILES_FILE_ODM) \ $(INSTALLED_FILES_JSON_ODM) \ + $(INSTALLED_FILES_FILE_VENDOR_DLKM) \ + $(INSTALLED_FILES_JSON_VENDOR_DLKM) \ $(INSTALLED_FILES_FILE_PRODUCT) \ $(INSTALLED_FILES_JSON_PRODUCT) \ $(INSTALLED_FILES_FILE_SYSTEM_EXT) \ @@ -1669,6 +1667,8 @@ else ifeq (,$(TARGET_BUILD_UNBUNDLED)) $(INSTALLED_FILES_JSON_VENDOR) \ $(INSTALLED_FILES_FILE_ODM) \ $(INSTALLED_FILES_JSON_ODM) \ + $(INSTALLED_FILES_FILE_VENDOR_DLKM) \ + $(INSTALLED_FILES_JSON_VENDOR_DLKM) \ $(INSTALLED_FILES_FILE_PRODUCT) \ $(INSTALLED_FILES_JSON_PRODUCT) \ $(INSTALLED_FILES_FILE_SYSTEM_EXT) \ @@ -1819,9 +1819,9 @@ modules: .PHONY: dump-files dump-files: - $(info product_target_FILES for $(TARGET_DEVICE) ($(INTERNAL_PRODUCT)):) - $(foreach p,$(sort $(product_target_FILES)),$(info : $(p))) - @echo Successfully dumped product file list + @echo "Target files for $(TARGET_PRODUCT)-$(TARGET_BUILD_VARIANT) ($(INTERNAL_PRODUCT)):" + @echo $(sort $(patsubst $(PRODUCT_OUT)/%,%,$(filter $(PRODUCT_OUT)/%,$(modules_to_install)))) | tr -s ' ' '\n' + @echo Successfully dumped product target file list. .PHONY: nothing nothing: diff --git a/core/product.mk b/core/product.mk index f531319ce4..740563f3fd 100644 --- a/core/product.mk +++ b/core/product.mk @@ -251,6 +251,7 @@ _product_single_value_vars += PRODUCT_VENDOR_VERITY_PARTITION _product_single_value_vars += PRODUCT_PRODUCT_VERITY_PARTITION _product_single_value_vars += PRODUCT_SYSTEM_EXT_VERITY_PARTITION _product_single_value_vars += PRODUCT_ODM_VERITY_PARTITION +_product_single_value_vars += PRODUCT_VENDOR_DLKM_VERITY_PARTITION _product_single_value_vars += PRODUCT_SYSTEM_SERVER_DEBUG_INFO _product_single_value_vars += PRODUCT_OTHER_JAVA_DEBUG_INFO @@ -278,6 +279,7 @@ _product_single_value_vars += PRODUCT_VENDOR_BASE_FS_PATH _product_single_value_vars += PRODUCT_PRODUCT_BASE_FS_PATH _product_single_value_vars += PRODUCT_SYSTEM_EXT_BASE_FS_PATH _product_single_value_vars += PRODUCT_ODM_BASE_FS_PATH +_product_single_value_vars += PRODUCT_VENDOR_DLKM_BASE_FS_PATH # The first API level this product shipped with _product_single_value_vars += PRODUCT_SHIPPING_API_LEVEL @@ -369,6 +371,7 @@ _product_single_value_vars += PRODUCT_BUILD_VENDOR_IMAGE _product_single_value_vars += PRODUCT_BUILD_PRODUCT_IMAGE _product_single_value_vars += PRODUCT_BUILD_SYSTEM_EXT_IMAGE _product_single_value_vars += PRODUCT_BUILD_ODM_IMAGE +_product_single_value_vars += PRODUCT_BUILD_VENDOR_DLKM_IMAGE _product_single_value_vars += PRODUCT_BUILD_CACHE_IMAGE _product_single_value_vars += PRODUCT_BUILD_RAMDISK_IMAGE _product_single_value_vars += PRODUCT_BUILD_USERDATA_IMAGE diff --git a/core/product_config.mk b/core/product_config.mk index 7a7c4b7e2b..d614e107c2 100644 --- a/core/product_config.mk +++ b/core/product_config.mk @@ -399,6 +399,7 @@ $(foreach image, \ PRODUCT \ SYSTEM_EXT \ ODM \ + VENDOR_DLKM \ CACHE \ RAMDISK \ USERDATA \ diff --git a/core/soong_android_app_set.mk b/core/soong_android_app_set.mk index c88489427a..c93bb3fac3 100644 --- a/core/soong_android_app_set.mk +++ b/core/soong_android_app_set.mk @@ -26,7 +26,7 @@ endef $(eval $(call extract-master-from-apk-set,$(LOCAL_PREBUILT_MODULE_FILE),$(LOCAL_APK_SET_MASTER_FILE))) # unzip returns 11 it there was nothing to extract, which is expected, # $(LOCAL_APK_SET_MASTER_FILE) has is already there. -LOCAL_POST_INSTALL_CMD := unzip -qo -j -d $(dir $(LOCAL_INSTALLED_MODULE)) \ +LOCAL_POST_INSTALL_CMD := unzip -qoDD -j -d $(dir $(LOCAL_INSTALLED_MODULE)) \ $(LOCAL_PREBUILT_MODULE_FILE) -x $(LOCAL_APK_SET_MASTER_FILE) || [[ $$? -eq 11 ]] $(LOCAL_INSTALLED_MODULE): PRIVATE_POST_INSTALL_CMD := $(LOCAL_POST_INSTALL_CMD) PACKAGES.$(LOCAL_MODULE).OVERRIDES := $(strip $(LOCAL_OVERRIDES_PACKAGES)) diff --git a/core/soong_config.mk b/core/soong_config.mk index b9e7a27060..c7bf61e3fb 100644 --- a/core/soong_config.mk +++ b/core/soong_config.mk @@ -116,12 +116,8 @@ $(call add_json_list, JavaCoverageExcludePaths, $(JAVA_COVERAGE_EXCLUDE $(call add_json_bool, GcovCoverage, $(filter true,$(NATIVE_COVERAGE))) $(call add_json_bool, ClangCoverage, $(filter true,$(CLANG_COVERAGE))) -# TODO(b/158212027): Remove `$(COVERAGE_PATHS)` from this list when all users have been moved to -# `NATIVE_COVERAGE_PATHS`. -$(call add_json_list, NativeCoveragePaths, $(COVERAGE_PATHS) $(NATIVE_COVERAGE_PATHS)) -# TODO(b/158212027): Remove `$(COVERAGE_EXCLUDE_PATHS)` from this list when all users have been -# moved to `NATIVE_COVERAGE_EXCLUDE_PATHS`. -$(call add_json_list, NativeCoverageExcludePaths, $(COVERAGE_EXCLUDE_PATHS) $(NATIVE_COVERAGE_EXCLUDE_PATHS)) +$(call add_json_list, NativeCoveragePaths, $(NATIVE_COVERAGE_PATHS)) +$(call add_json_list, NativeCoverageExcludePaths, $(NATIVE_COVERAGE_EXCLUDE_PATHS)) $(call add_json_bool, SamplingPGO, $(filter true,$(SAMPLING_PGO))) @@ -159,6 +155,7 @@ $(call add_json_bool, Uml, $(filter true,$(TARGET_ $(call add_json_bool, Use_lmkd_stats_log, $(filter true,$(TARGET_LMKD_STATS_LOG))) $(call add_json_str, VendorPath, $(TARGET_COPY_OUT_VENDOR)) $(call add_json_str, OdmPath, $(TARGET_COPY_OUT_ODM)) +$(call add_json_str, VendorDlkmPath, $(TARGET_COPY_OUT_VENDOR_DLKM)) $(call add_json_str, ProductPath, $(TARGET_COPY_OUT_PRODUCT)) $(call add_json_str, SystemExtPath, $(TARGET_COPY_OUT_SYSTEM_EXT)) $(call add_json_bool, MinimizeJavaDebugInfo, $(filter true,$(PRODUCT_MINIMIZE_JAVA_DEBUG_INFO))) @@ -176,6 +173,7 @@ $(call add_json_list, PgoAdditionalProfileDirs, $(PGO_ADDITIONAL_PROFIL $(call add_json_list, BoardVendorSepolicyDirs, $(BOARD_VENDOR_SEPOLICY_DIRS) $(BOARD_SEPOLICY_DIRS)) $(call add_json_list, BoardOdmSepolicyDirs, $(BOARD_ODM_SEPOLICY_DIRS)) +$(call add_json_list, BoardVendorDlkmSepolicyDirs, $(BOARD_VENDOR_DLKM_SEPOLICY_DIRS)) $(call add_json_list, BoardPlatPublicSepolicyDirs, $(BOARD_PLAT_PUBLIC_SEPOLICY_DIR)) $(call add_json_list, BoardPlatPrivateSepolicyDirs, $(BOARD_PLAT_PRIVATE_SEPOLICY_DIR)) $(call add_json_list, BoardSepolicyM4Defs, $(BOARD_SEPOLICY_M4DEFS)) diff --git a/core/sysprop.mk b/core/sysprop.mk index f1311ed81d..99c7ebd58a 100644 --- a/core/sysprop.mk +++ b/core/sysprop.mk @@ -14,7 +14,7 @@ # limitations under the License. # -# sysprop.mk defines rules for generating <partition>/build.prop files +# sysprop.mk defines rules for generating <partition>/[etc/]build.prop files # ----------------------------------------------------------------- # property_overrides_split_enabled @@ -59,7 +59,7 @@ define generate-common-build-props endef -# Rule for generating <partition>/build.prop file +# Rule for generating <partition>/[etc/]build.prop file # # $(1): partition name # $(2): path to the output @@ -313,7 +313,6 @@ $(eval $(call build-properties,system,$(INSTALLED_BUILD_PROP_TARGET),\ $(_prop_files_),$(_prop_vars_),\ $(_blacklist_names_))) - # ----------------------------------------------------------------- # vendor/build.prop # @@ -351,7 +350,7 @@ $(eval $(call build-properties,\ $(PRODUCT_VENDOR_PROPERTY_BLACKLIST))) # ----------------------------------------------------------------- -# product/build.prop +# product/etc/build.prop # _prop_files_ := $(if $(TARGET_PRODUCT_PROP),\ @@ -364,7 +363,7 @@ _prop_vars_ := \ ADDITIONAL_PRODUCT_PROPERTIES \ PRODUCT_PRODUCT_PROPERTIES -INSTALLED_PRODUCT_BUILD_PROP_TARGET := $(TARGET_OUT_PRODUCT)/build.prop +INSTALLED_PRODUCT_BUILD_PROP_TARGET := $(TARGET_OUT_PRODUCT)/etc/build.prop $(eval $(call build-properties,\ product,\ $(INSTALLED_PRODUCT_BUILD_PROP_TARGET),\ @@ -385,8 +384,6 @@ _prop_vars_ := \ ADDITIONAL_ODM_PROPERTIES \ PRODUCT_ODM_PROPERTIES -# Note the 'etc' sub directory. For the reason, see -# I0733c277baa67c549bb45599abb70aba13fbdbcf INSTALLED_ODM_BUILD_PROP_TARGET := $(TARGET_OUT_ODM)/etc/build.prop $(eval $(call build-properties,\ odm,\ @@ -395,8 +392,17 @@ $(eval $(call build-properties,\ $(_prop_vars_),\ $(empty))) +# ---------------------------------------------------------------- +# vendor_dlkm/etc/build.prop +# + +INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET := $(TARGET_OUT_VENDOR_DLKM)/etc/build.prop +$(eval $(call build-properties,\ + vendor_dlkm,\ + $(INSTALLED_VENDOR_DLKM_BUILD_PROP_TARGET))) + # ----------------------------------------------------------------- -# system_ext/build.prop +# system_ext/etc/build.prop # _prop_files_ := $(if $(TARGET_SYSTEM_EXT_PROP),\ $(TARGET_SYSTEM_EXT_PROP),\ @@ -406,7 +412,7 @@ _prop_files_ := $(if $(TARGET_SYSTEM_EXT_PROP),\ # TODO(b/117892318): don't allow duplicates so that the ordering doesn't matter _prop_vars_ := PRODUCT_SYSTEM_EXT_PROPERTIES -INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_EXT)/build.prop +INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET := $(TARGET_OUT_SYSTEM_EXT)/etc/build.prop $(eval $(call build-properties,\ system_ext,\ $(INSTALLED_SYSTEM_EXT_BUILD_PROP_TARGET),\ diff --git a/core/tasks/tools/compatibility.mk b/core/tasks/tools/compatibility.mk index 89b0b9b1bf..5d820d503a 100644 --- a/core/tasks/tools/compatibility.mk +++ b/core/tasks/tools/compatibility.mk @@ -30,6 +30,7 @@ out_dir := $(HOST_OUT)/$(test_suite_name)/android-$(test_suite_name) test_artifacts := $(COMPATIBILITY.$(test_suite_name).FILES) test_tools := $(HOST_OUT_JAVA_LIBRARIES)/hosttestlib.jar \ $(HOST_OUT_JAVA_LIBRARIES)/tradefed.jar \ + $(HOST_OUT_JAVA_LIBRARIES)/tradefed-no-fwk.jar \ $(HOST_OUT_JAVA_LIBRARIES)/tradefed-test-framework.jar \ $(HOST_OUT_JAVA_LIBRARIES)/loganalysis.jar \ $(HOST_OUT_JAVA_LIBRARIES)/compatibility-host-util.jar \ diff --git a/core/tasks/vendor_module_check.mk b/core/tasks/vendor_module_check.mk index b4c5a3bc61..89a34d6f6e 100644 --- a/core/tasks/vendor_module_check.mk +++ b/core/tasks/vendor_module_check.mk @@ -108,10 +108,10 @@ ifneq (,$(filter path all, $(_restrictions))) $(foreach m, $(_vendor_check_modules), \ $(if $(filter-out ,$(ALL_MODULES.$(m).INSTALLED)),\ - $(if $(filter $(TARGET_OUT_VENDOR)/% $(TARGET_OUT_ODM)/% $(HOST_OUT)/%, $(ALL_MODULES.$(m).INSTALLED)),,\ + $(if $(filter $(TARGET_OUT_VENDOR)/% $(TARGET_OUT_ODM)/% $(TARGET_OUT_VENDOR_DLKM)/% $(HOST_OUT)/%, $(ALL_MODULES.$(m).INSTALLED)),,\ $(error Error: vendor module "$(m)" in $(ALL_MODULES.$(m).PATH) \ in product "$(TARGET_PRODUCT)" being installed to \ - $(ALL_MODULES.$(m).INSTALLED) which is not in the vendor tree or odm tree)))) + $(ALL_MODULES.$(m).INSTALLED) which is not in the vendor, odm or vendor_dlkm tree)))) endif @@ -43,7 +43,9 @@ Common goals are: senod Quickly rebuild the system_ext image from built packages Stands for "SystemExt, NO Dependencies" onod Quickly rebuild the odm image from built packages - Stands for "ODM, NO Dependencies" + Stands for "Odm, NO Dependencies" + vdnod Quickly rebuild the vendor_dlkm image from built packages + Stands for "VendorDlkm, NO Dependencies" So, for example, you could run: diff --git a/rbesetup.sh b/rbesetup.sh index 145e1e8261..f9317a324f 100644 --- a/rbesetup.sh +++ b/rbesetup.sh @@ -23,3 +23,14 @@ function use_rbe() { RBE_re_proxy="${RBE_BINARIES_DIR}/reproxy" \ $@ } + +# This function detects if the uploader is available and sets the path of it to +# ANDROID_ENABLE_METRICS_UPLOAD. +function _export_metrics_uploader() { + local uploader_path="$(gettop)/vendor/google/misc/metrics_uploader_prebuilt/metrics_uploader.sh" + if [ -x "${uploader_path}" ]; then + export ANDROID_ENABLE_METRICS_UPLOAD="${uploader_path}" + fi +} + +_export_metrics_uploader diff --git a/target/board/BoardConfigGsiCommon.mk b/target/board/BoardConfigGsiCommon.mk index 0f36aaec14..d0aeb1c717 100644 --- a/target/board/BoardConfigGsiCommon.mk +++ b/target/board/BoardConfigGsiCommon.mk @@ -33,12 +33,25 @@ BOARD_USES_METADATA_PARTITION := true # updating the last seen rollback index in the tamper-evident storage. BOARD_AVB_ROLLBACK_INDEX := 0 -# Enable chain partition for system. -# GSI need to sign on system.img instead of vbmeta. +ifndef BUILDING_GSI +# Enable AVB chained partition for system. +# https://android.googlesource.com/platform/external/avb/+/master/README.md BOARD_AVB_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem BOARD_AVB_SYSTEM_ALGORITHM := SHA256_RSA2048 BOARD_AVB_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP) BOARD_AVB_SYSTEM_ROLLBACK_INDEX_LOCATION := 1 +else +# Enable vbmeta_system on GSI targets +BOARD_AVB_VBMETA_SYSTEM := system +BOARD_AVB_VBMETA_SYSTEM_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem +BOARD_AVB_VBMETA_SYSTEM_ALGORITHM := SHA256_RSA2048 +BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP) +BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 1 +BOARD_SUPER_PARTITION_SIZE := 3229614080 +BOARD_SUPER_PARTITION_GROUPS := gsi_dynamic_partitions +BOARD_GSI_DYNAMIC_PARTITIONS_PARTITION_LIST := system +BOARD_GSI_DYNAMIC_PARTITIONS_SIZE := 3221225472 +endif # Enable chain partition for boot, mainly for GKI images. BOARD_AVB_BOOT_KEY_PATH := external/avb/test/data/testkey_rsa2048.pem diff --git a/target/board/generic/BoardConfig.mk b/target/board/generic/BoardConfig.mk index 8624ed72b3..87c16daade 100644 --- a/target/board/generic/BoardConfig.mk +++ b/target/board/generic/BoardConfig.mk @@ -30,6 +30,8 @@ TARGET_CPU_ABI := armeabi-v7a TARGET_CPU_ABI2 := armeabi include build/make/target/board/BoardConfigGsiCommon.mk + +ifndef BUILDING_GSI include build/make/target/board/BoardConfigEmuCommon.mk BOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800 @@ -44,3 +46,4 @@ WPA_SUPPLICANT_VERSION := VER_0_8_X WIFI_DRIVER_FW_PATH_PARAM := "/dev/null" WIFI_DRIVER_FW_PATH_STA := "/dev/null" WIFI_DRIVER_FW_PATH_AP := "/dev/null" +endif diff --git a/target/board/generic_x86/BoardConfig.mk b/target/board/generic_x86/BoardConfig.mk index 83d7eccc7a..c40c15b23b 100644 --- a/target/board/generic_x86/BoardConfig.mk +++ b/target/board/generic_x86/BoardConfig.mk @@ -21,6 +21,7 @@ TARGET_ARCH_VARIANT := x86 TARGET_PRELINK_MODULE := false include build/make/target/board/BoardConfigGsiCommon.mk +ifndef BUILDING_GSI include build/make/target/board/BoardConfigEmuCommon.mk # Resize to 4G to accomodate ASAN and CTS @@ -38,3 +39,4 @@ WPA_SUPPLICANT_VERSION := VER_0_8_X WIFI_DRIVER_FW_PATH_PARAM := "/dev/null" WIFI_DRIVER_FW_PATH_STA := "/dev/null" WIFI_DRIVER_FW_PATH_AP := "/dev/null" +endif diff --git a/target/board/generic_x86_64/BoardConfig.mk b/target/board/generic_x86_64/BoardConfig.mk index 07bbc071ac..660ec6e7fe 100755 --- a/target/board/generic_x86_64/BoardConfig.mk +++ b/target/board/generic_x86_64/BoardConfig.mk @@ -24,6 +24,7 @@ TARGET_2ND_ARCH_VARIANT := x86_64 TARGET_PRELINK_MODULE := false include build/make/target/board/BoardConfigGsiCommon.mk +ifndef BUILDING_GSI include build/make/target/board/BoardConfigEmuCommon.mk BOARD_USERDATAIMAGE_PARTITION_SIZE := 576716800 @@ -40,3 +41,4 @@ WPA_SUPPLICANT_VERSION := VER_0_8_X WIFI_DRIVER_FW_PATH_PARAM := "/dev/null" WIFI_DRIVER_FW_PATH_STA := "/dev/null" WIFI_DRIVER_FW_PATH_AP := "/dev/null" +endif diff --git a/target/product/gsi_release.mk b/target/product/gsi_release.mk index a61585e670..5421ee06fc 100644 --- a/target/product/gsi_release.mk +++ b/target/product/gsi_release.mk @@ -24,6 +24,8 @@ # - etc. # +BUILDING_GSI := true + # Exclude all files under system/product and system/system_ext PRODUCT_ARTIFACT_PATH_REQUIREMENT_ALLOWED_LIST += \ system/product/% \ diff --git a/target/product/mainline_system_arm64.mk b/target/product/mainline_system_arm64.mk index 60035c13ea..e536e55509 100644 --- a/target/product/mainline_system_arm64.mk +++ b/target/product/mainline_system_arm64.mk @@ -26,6 +26,7 @@ PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := true PRODUCT_BUILD_CACHE_IMAGE := false PRODUCT_BUILD_ODM_IMAGE := false +PRODUCT_BUILD_VENDOR_DLKM_IMAGE := false PRODUCT_BUILD_PRODUCT_IMAGE := false PRODUCT_BUILD_RAMDISK_IMAGE := false PRODUCT_BUILD_SYSTEM_IMAGE := true diff --git a/target/product/mainline_system_x86.mk b/target/product/mainline_system_x86.mk index a30a1fcb4f..484ae30760 100644 --- a/target/product/mainline_system_x86.mk +++ b/target/product/mainline_system_x86.mk @@ -25,6 +25,7 @@ PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := true PRODUCT_BUILD_CACHE_IMAGE := false PRODUCT_BUILD_ODM_IMAGE := false +PRODUCT_BUILD_VENDOR_DLKM_IMAGE := false PRODUCT_BUILD_PRODUCT_IMAGE := false PRODUCT_BUILD_RAMDISK_IMAGE := false PRODUCT_BUILD_SYSTEM_IMAGE := true diff --git a/target/product/mainline_system_x86_64.mk b/target/product/mainline_system_x86_64.mk index 473ff7236f..ad31f81c02 100644 --- a/target/product/mainline_system_x86_64.mk +++ b/target/product/mainline_system_x86_64.mk @@ -26,6 +26,7 @@ PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := true PRODUCT_BUILD_CACHE_IMAGE := false PRODUCT_BUILD_ODM_IMAGE := false +PRODUCT_BUILD_VENDOR_DLKM_IMAGE := false PRODUCT_BUILD_PRODUCT_IMAGE := false PRODUCT_BUILD_RAMDISK_IMAGE := false PRODUCT_BUILD_SYSTEM_IMAGE := true diff --git a/target/product/mainline_system_x86_arm.mk b/target/product/mainline_system_x86_arm.mk index 2e01cde768..24f1ad70e0 100644 --- a/target/product/mainline_system_x86_arm.mk +++ b/target/product/mainline_system_x86_arm.mk @@ -25,6 +25,7 @@ PRODUCT_ENFORCE_ARTIFACT_PATH_REQUIREMENTS := true PRODUCT_BUILD_CACHE_IMAGE := false PRODUCT_BUILD_ODM_IMAGE := false +PRODUCT_BUILD_VENDOR_DLKM_IMAGE := false PRODUCT_BUILD_PRODUCT_IMAGE := false PRODUCT_BUILD_RAMDISK_IMAGE := false PRODUCT_BUILD_SYSTEM_IMAGE := true diff --git a/tools/fs_config/Android.mk b/tools/fs_config/Android.mk index 64fabe62f7..60b51b6133 100644 --- a/tools/fs_config/Android.mk +++ b/tools/fs_config/Android.mk @@ -27,11 +27,12 @@ endif system_android_filesystem_config := system/core/include/private/android_filesystem_config.h system_capability_header := bionic/libc/kernel/uapi/linux/capability.h -# List of supported vendor, oem, odm, product and system_ext Partitions +# List of supported vendor, oem, odm, vendor_dlkm, product and system_ext Partitions fs_config_generate_extra_partition_list := $(strip \ $(if $(BOARD_USES_VENDORIMAGE)$(BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE),vendor) \ $(if $(BOARD_USES_OEMIMAGE)$(BOARD_OEMIMAGE_FILE_SYSTEM_TYPE),oem) \ $(if $(BOARD_USES_ODMIMAGE)$(BOARD_ODMIMAGE_FILE_SYSTEM_TYPE),odm) \ + $(if $(BOARD_USES_VENDOR_DLKMIMAGE)$(BOARD_VENDOR_DLKMIMAGE_FILE_SYSTEM_TYPE),vendor_dlkm) \ $(if $(BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE),product) \ $(if $(BOARD_SYSTEM_EXTIMAGE_FILE_SYSTEM_TYPE),system_ext) \ ) @@ -282,6 +283,57 @@ $(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_G endif +ifneq ($(filter vendor_dlkm,$(fs_config_generate_extra_partition_list)),) +################################## +# Generate the vendor_dlkm/etc/fs_config_dirs binary file for the target +# Add fs_config_dirs or fs_config_dirs_vendor_dlkm to PRODUCT_PACKAGES in +# the device make file to enable +include $(CLEAR_VARS) + +LOCAL_MODULE := fs_config_dirs_vendor_dlkm +LOCAL_MODULE_CLASS := ETC +LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs +LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_DLKM)/etc +include $(BUILD_SYSTEM)/base_rules.mk +$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config) +$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_CAP_HDR := $(system_capability_header) +$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN) +$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config) $(system_capability_header) + @mkdir -p $(dir $@) + $< fsconfig \ + --aid-header $(PRIVATE_ANDROID_FS_HDR) \ + --capability-header $(PRIVATE_ANDROID_CAP_HDR) \ + --partition vendor_dlkm \ + --dirs \ + --out_file $@ \ + $(or $(PRIVATE_TARGET_FS_CONFIG_GEN),/dev/null) + +################################## +# Generate the vendor_dlkm/etc/fs_config_files binary file for the target +# Add fs_config_files of fs_config_files_vendor_dlkm to PRODUCT_PACKAGES in +# the device make file to enable +include $(CLEAR_VARS) + +LOCAL_MODULE := fs_config_files_vendor_dlkm +LOCAL_MODULE_CLASS := ETC +LOCAL_INSTALLED_MODULE_STEM := fs_config_files +LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_DLKM)/etc +include $(BUILD_SYSTEM)/base_rules.mk +$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(system_android_filesystem_config) +$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_CAP_HDR := $(system_capability_header) +$(LOCAL_BUILT_MODULE): PRIVATE_TARGET_FS_CONFIG_GEN := $(TARGET_FS_CONFIG_GEN) +$(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_GEN) $(system_android_filesystem_config) $(system_capability_header) + @mkdir -p $(dir $@) + $< fsconfig \ + --aid-header $(PRIVATE_ANDROID_FS_HDR) \ + --capability-header $(PRIVATE_ANDROID_CAP_HDR) \ + --partition vendor_dlkm \ + --files \ + --out_file $@ \ + $(or $(PRIVATE_TARGET_FS_CONFIG_GEN),/dev/null) + +endif + ifneq ($(filter product,$(fs_config_generate_extra_partition_list)),) ################################## # Generate the product/etc/fs_config_dirs binary file for the target diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py index 723fe94b3e..284c89adb0 100644 --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -281,6 +281,22 @@ def AddOdm(output_zip): return img.name +def AddVendorDlkm(output_zip): + """Turn the contents of VENDOR_DLKM into an vendor_dlkm image and store it in output_zip.""" + + img = OutputFile(output_zip, OPTIONS.input_tmp, "IMAGES", "vendor_dlkm.img") + if os.path.exists(img.name): + logger.info("vendor_dlkm.img already exists; no need to rebuild...") + return img.name + + block_list = OutputFile( + output_zip, OPTIONS.input_tmp, "IMAGES", "vendor_dlkm.map") + CreateImage( + OPTIONS.input_tmp, OPTIONS.info_dict, "vendor_dlkm", img, + block_list=block_list) + return img.name + + def AddDtbo(output_zip): """Adds the DTBO image. @@ -736,7 +752,7 @@ def AddImagesToTargetFiles(filename): has_boot = OPTIONS.info_dict.get("no_boot") != "true" has_vendor_boot = OPTIONS.info_dict.get("vendor_boot") == "true" - # {vendor,odm,product,system_ext}.img are unlike system.img or + # {vendor,odm,product,system_ext,vendor_dlkm}.img are unlike system.img or # system_other.img. Because it could be built from source, or dropped into # target_files.zip as a prebuilt blob. We consider either of them as # {vendor,product,system_ext}.img being available, which could be @@ -749,6 +765,13 @@ def AddImagesToTargetFiles(filename): OPTIONS.info_dict.get("building_odm_image") == "true") or os.path.exists( os.path.join(OPTIONS.input_tmp, "IMAGES", "odm.img"))) + has_vendor_dlkm = ((os.path.isdir(os.path.join(OPTIONS.input_tmp, + "VENDOR_DLKM")) and + OPTIONS.info_dict.get("building_vendor_dlkm_image") + == "true") or + os.path.exists( + os.path.join(OPTIONS.input_tmp, "IMAGES", + "vendor_dlkm.img"))) has_product = ((os.path.isdir(os.path.join(OPTIONS.input_tmp, "PRODUCT")) and OPTIONS.info_dict.get("building_product_image") == "true") or os.path.exists( @@ -874,6 +897,10 @@ def AddImagesToTargetFiles(filename): banner("odm") partitions['odm'] = AddOdm(output_zip) + if has_vendor_dlkm: + banner("vendor_dlkm") + partitions['vendor_dlkm'] = AddVendorDlkm(output_zip) + if has_system_other: banner("system_other") AddSystemOther(output_zip) diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index 7567346493..dbfb4851c3 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -708,6 +708,29 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): d["extfs_rsv_pct"] = "0" copy_prop("odm_reserved_size", "partition_reserved_size") copy_prop("odm_selinux_fc", "selinux_fc") + elif mount_point == "vendor_dlkm": + copy_prop("avb_vendor_dlkm_hashtree_enable", "avb_hashtree_enable") + copy_prop("avb_vendor_dlkm_add_hashtree_footer_args", + "avb_add_hashtree_footer_args") + copy_prop("avb_vendor_dlkm_key_path", "avb_key_path") + copy_prop("avb_vendor_dlkm_algorithm", "avb_algorithm") + copy_prop("avb_vendor_dlkm_salt", "avb_salt") + copy_prop("vendor_dlkm_fs_type", "fs_type") + copy_prop("vendor_dlkm_size", "partition_size") + if not copy_prop("vendor_dlkm_journal_size", "journal_size"): + d["journal_size"] = "0" + copy_prop("vendor_dlkm_verity_block_device", "verity_block_device") + copy_prop("ext4_share_dup_blocks", "ext4_share_dup_blocks") + copy_prop("vendor_dlkm_squashfs_compressor", "squashfs_compressor") + copy_prop("vendor_dlkm_squashfs_compressor_opt", "squashfs_compressor_opt") + copy_prop("vendor_dlkm_squashfs_block_size", "squashfs_block_size") + copy_prop("vendor_dlkm_squashfs_disable_4k_align", "squashfs_disable_4k_align") + copy_prop("vendor_dlkm_base_fs_file", "base_fs_file") + copy_prop("vendor_dlkm_extfs_inode_count", "extfs_inode_count") + if not copy_prop("vendor_dlkm_extfs_rsv_pct", "extfs_rsv_pct"): + d["extfs_rsv_pct"] = "0" + copy_prop("vendor_dlkm_reserved_size", "partition_reserved_size") + copy_prop("vendor_dlkm_selinux_fc", "selinux_fc") elif mount_point == "oem": copy_prop("fs_type", "fs_type") copy_prop("oem_size", "partition_size") @@ -752,6 +775,8 @@ def GlobalDictFromImageProp(image_prop, mount_point): copy_prop("partition_size", "vendor_size") elif mount_point == "odm": copy_prop("partition_size", "odm_size") + elif mount_point == "vendor_dlkm": + copy_prop("partition_size", "vendor_dlkm_size") elif mount_point == "product": copy_prop("partition_size", "product_size") elif mount_point == "system_ext": @@ -791,6 +816,8 @@ def main(argv): mount_point = "vendor" elif image_filename == "odm.img": mount_point = "odm" + elif image_filename == "vendor_dlkm.img": + mount_point = "vendor_dlkm" elif image_filename == "oem.img": mount_point = "oem" elif image_filename == "product.img": diff --git a/tools/releasetools/check_target_files_signatures.py b/tools/releasetools/check_target_files_signatures.py index 8c1bb9a6ed..6e02e4d6f5 100755 --- a/tools/releasetools/check_target_files_signatures.py +++ b/tools/releasetools/check_target_files_signatures.py @@ -120,19 +120,18 @@ class CertDB(object): def __init__(self): self.certs = {} - def Add(self, cert, name=None): - if cert in self.certs: + def Add(self, cert_digest, subject, name=None): + if cert_digest in self.certs: if name: - self.certs[cert] = self.certs[cert] + "," + name + self.certs[cert_digest] = self.certs[cert_digest] + "," + name else: if name is None: - name = "unknown cert %s (%s)" % (common.sha1(cert).hexdigest()[:12], - GetCertSubject(cert)) - self.certs[cert] = name + name = "unknown cert %s (%s)" % (cert_digest[:12], subject) + self.certs[cert_digest] = name - def Get(self, cert): - """Return the name for a given cert.""" - return self.certs.get(cert, None) + def Get(self, cert_digest): + """Return the name for a given cert digest.""" + return self.certs.get(cert_digest, None) def FindLocalCerts(self): to_load = [] @@ -148,7 +147,10 @@ class CertDB(object): cert = common.ParseCertificate(f.read()) name, _ = os.path.splitext(i) name, _ = os.path.splitext(name) - self.Add(cert, name) + + cert_sha1 = common.sha1(cert).hexdigest() + cert_subject = GetCertSubject(cert) + self.Add(cert_sha1, cert_subject, name) ALL_CERTS = CertDB() @@ -184,7 +186,7 @@ class APK(object): def __init__(self, full_filename, filename): self.filename = filename - self.certs = None + self.cert_digests = frozenset() self.shared_uid = None self.package = None @@ -195,22 +197,68 @@ class APK(object): finally: Pop() - def RecordCerts(self, full_filename): - out = set() + def ReadCertsDeprecated(self, full_filename): + print("reading certs in deprecated way for {}".format(full_filename)) + cert_digests = set() with zipfile.ZipFile(full_filename) as apk: - pkcs7 = None for info in apk.infolist(): filename = info.filename if (filename.startswith("META-INF/") and info.filename.endswith((".DSA", ".RSA"))): pkcs7 = apk.read(filename) cert = CertFromPKCS7(pkcs7, filename) - out.add(cert) - ALL_CERTS.Add(cert) - if not pkcs7: - AddProblem("no signature") + if not cert: + continue + cert_sha1 = common.sha1(cert).hexdigest() + cert_subject = GetCertSubject(cert) + ALL_CERTS.Add(cert_sha1, cert_subject) + cert_digests.add(cert_sha1) + if not cert_digests: + AddProblem("No signature found") + return + self.cert_digests = frozenset(cert_digests) - self.certs = frozenset(out) + def RecordCerts(self, full_filename): + """Parse and save the signature of an apk file.""" + + # Dump the cert info with apksigner + cmd = ["apksigner", "verify", "--print-certs", full_filename] + p = common.Run(cmd, stdout=subprocess.PIPE) + output, _ = p.communicate() + if p.returncode != 0: + self.ReadCertsDeprecated(full_filename) + return + + # Sample output: + # Signer #1 certificate DN: ... + # Signer #1 certificate SHA-256 digest: ... + # Signer #1 certificate SHA-1 digest: ... + # ... + certs_info = {} + certificate_regex = re.compile(r"(Signer #[0-9]+) (certificate .*):(.*)") + for line in output.splitlines(): + m = certificate_regex.match(line) + if not m: + continue + signer, key, val = m.group(1), m.group(2), m.group(3) + if certs_info.get(signer): + certs_info[signer].update({key.strip(): val.strip()}) + else: + certs_info.update({signer: {key.strip(): val.strip()}}) + if not certs_info: + AddProblem("Failed to parse cert info") + return + + cert_digests = set() + for signer, props in certs_info.items(): + subject = props.get("certificate DN") + digest = props.get("certificate SHA-1 digest") + if not subject or not digest: + AddProblem("Failed to parse cert subject or digest") + return + ALL_CERTS.Add(digest, subject) + cert_digests.add(digest) + self.cert_digests = frozenset(cert_digests) def ReadManifest(self, full_filename): p = common.Run(["aapt2", "dump", "xmltree", full_filename, "--file", @@ -316,8 +364,8 @@ class TargetFiles(object): print("uid %s is shared by packages with different cert sets:" % (uid,)) for apk in apks: print("%-*s [%s]" % (self.max_pkg_len, apk.package, apk.filename)) - for cert in apk.certs: - print(" ", ALL_CERTS.Get(cert)) + for digest in apk.cert_digests: + print(" ", ALL_CERTS.Get(digest)) print() def CheckExternalSignatures(self): @@ -328,25 +376,30 @@ class TargetFiles(object): # predexopting. Consider it an error if this app is now # signed with any key that is present in our tree. apk = self.apks_by_basename[apk_filename] - name = ALL_CERTS.Get(apk.cert) - if not name.startswith("unknown "): + signed_with_external = False + for digest in apk.cert_digests: + name = ALL_CERTS.Get(digest) + if name and name.startswith("unknown "): + signed_with_external = True + + if not signed_with_external: Push(apk.filename) AddProblem("hasn't been signed with EXTERNAL cert") Pop() def PrintCerts(self): """Display a table of packages grouped by cert.""" - by_cert = {} + by_digest = {} for apk in self.apks.values(): - for cert in apk.certs: - by_cert.setdefault(cert, []).append((apk.package, apk)) + for digest in apk.cert_digests: + by_digest.setdefault(digest, []).append((apk.package, apk)) - order = [(-len(v), k) for (k, v) in by_cert.items()] + order = [(-len(v), k) for (k, v) in by_digest.items()] order.sort() - for _, cert in order: - print("%s:" % (ALL_CERTS.Get(cert),)) - apks = by_cert[cert] + for _, digest in order: + print("%s:" % (ALL_CERTS.Get(digest),)) + apks = by_digest[digest] apks.sort() for _, apk in apks: if apk.shared_uid: @@ -366,15 +419,15 @@ class TargetFiles(object): max_pkg_len = max(self.max_pkg_len, other.max_pkg_len) - by_certpair = {} + by_digestpair = {} for i in all_apks: if i in self.apks: if i in other.apks: # in both; should have same set of certs - if self.apks[i].certs != other.apks[i].certs: - by_certpair.setdefault((other.apks[i].certs, - self.apks[i].certs), []).append(i) + if self.apks[i].cert_digests != other.apks[i].cert_digests: + by_digestpair.setdefault((other.apks[i].cert_digests, + self.apks[i].cert_digests), []).append(i) else: print("%s [%s]: new APK (not in comparison target_files)" % ( i, self.apks[i].filename)) @@ -383,10 +436,10 @@ class TargetFiles(object): print("%s [%s]: removed APK (only in comparison target_files)" % ( i, other.apks[i].filename)) - if by_certpair: + if by_digestpair: AddProblem("some APKs changed certs") Banner("APK signing differences") - for (old, new), packages in sorted(by_certpair.items()): + for (old, new), packages in sorted(by_digestpair.items()): for i, o in enumerate(old): if i == 0: print("was", ALL_CERTS.Get(o)) diff --git a/tools/releasetools/check_target_files_vintf.py b/tools/releasetools/check_target_files_vintf.py index 95d09cc177..79005df4d9 100755 --- a/tools/releasetools/check_target_files_vintf.py +++ b/tools/releasetools/check_target_files_vintf.py @@ -46,6 +46,7 @@ DIR_SEARCH_PATHS = { '/product': ('PRODUCT', 'SYSTEM/product'), '/odm': ('ODM', 'VENDOR/odm', 'SYSTEM/vendor/odm'), '/system_ext': ('SYSTEM_EXT', 'SYSTEM/system_ext'), + # vendor_dlkm does not have VINTF files. } UNZIP_PATTERN = ['META/*', '*/build.prop'] diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 8bbc35e53f..a26f9e4097 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -110,13 +110,20 @@ SPECIAL_CERT_STRINGS = ("PRESIGNED", "EXTERNAL") # that system_other is not in the list because we don't want to include its # descriptor into vbmeta.img. AVB_PARTITIONS = ('boot', 'dtbo', 'odm', 'product', 'recovery', 'system', - 'system_ext', 'vendor', 'vendor_boot') + 'system_ext', 'vendor', 'vendor_boot', 'vendor_dlkm') # Chained VBMeta partitions. AVB_VBMETA_PARTITIONS = ('vbmeta_system', 'vbmeta_vendor') # Partitions that should have their care_map added to META/care_map.pb -PARTITIONS_WITH_CARE_MAP = ('system', 'vendor', 'product', 'system_ext', 'odm') +PARTITIONS_WITH_CARE_MAP = ( + 'system', + 'vendor', + 'product', + 'system_ext', + 'odm', + 'vendor_dlkm', +) class ErrorCode(object): @@ -655,7 +662,8 @@ def LoadInfoDict(input_file, repacking=False): input_file, "META", "root_filesystem_config.txt") # Redirect {partition}_base_fs_file for each of the named partitions. - for part_name in ["system", "vendor", "system_ext", "product", "odm"]: + for part_name in ["system", "vendor", "system_ext", "product", "odm", + "vendor_dlkm"]: key_name = part_name + "_base_fs_file" if key_name not in d: continue diff --git a/tools/releasetools/merge_target_files.py b/tools/releasetools/merge_target_files.py index ed42b20d28..ad991caab6 100755 --- a/tools/releasetools/merge_target_files.py +++ b/tools/releasetools/merge_target_files.py @@ -197,6 +197,7 @@ DEFAULT_VENDOR_ITEM_LIST = ( 'PREBUILT_IMAGES/*', 'RADIO/*', 'VENDOR/*', + 'VENDOR_DLKM/*', ) # VENDOR_EXTRACT_SPECIAL_ITEM_LIST is a list of items to extract from the @@ -223,6 +224,7 @@ SINGLE_BUILD_PARTITIONS = ( 'SYSTEM/', 'SYSTEM_OTHER/', 'VENDOR/', + 'VENDOR_DLKM/', ) diff --git a/tools/releasetools/ota_from_target_files.py b/tools/releasetools/ota_from_target_files.py index 7fb0a77172..f114f6383b 100755 --- a/tools/releasetools/ota_from_target_files.py +++ b/tools/releasetools/ota_from_target_files.py @@ -277,7 +277,8 @@ AB_PARTITIONS = 'META/ab_partitions.txt' UNZIP_PATTERN = ['IMAGES/*', 'META/*', 'OTA/*', 'RADIO/*'] # Files to be unzipped for target diffing purpose. TARGET_DIFFING_UNZIP_PATTERN = ['BOOT', 'RECOVERY', 'SYSTEM/*', 'VENDOR/*', - 'PRODUCT/*', 'SYSTEM_EXT/*', 'ODM/*'] + 'PRODUCT/*', 'SYSTEM_EXT/*', 'ODM/*', + 'VENDOR_DLKM/*'] RETROFIT_DAP_UNZIP_PATTERN = ['OTA/super_*.img', AB_PARTITIONS] # Images to be excluded from secondary payload. We essentially only keep @@ -285,7 +286,7 @@ RETROFIT_DAP_UNZIP_PATTERN = ['OTA/super_*.img', AB_PARTITIONS] SECONDARY_PAYLOAD_SKIPPED_IMAGES = [ 'boot', 'dtbo', 'modem', 'odm', 'product', 'radio', 'recovery', 'system_ext', 'vbmeta', 'vbmeta_system', 'vbmeta_vendor', 'vendor', - 'vendor_boot'] + 'vendor_boot', 'vendor_dlkm'] class PayloadSigner(object): @@ -668,7 +669,8 @@ def GetBlockDifferences(target_zip, source_zip, target_info, source_info, assert blockimgdiff_version >= 3 block_diff_dict = collections.OrderedDict() - partition_names = ["system", "vendor", "product", "odm", "system_ext"] + partition_names = ["system", "vendor", "product", "odm", "system_ext", + "vendor_dlkm"] for partition in partition_names: if not HasPartition(target_zip, partition): continue diff --git a/tools/releasetools/validate_target_files.py b/tools/releasetools/validate_target_files.py index 8763825e6d..2e3aa74de6 100755 --- a/tools/releasetools/validate_target_files.py +++ b/tools/releasetools/validate_target_files.py @@ -236,6 +236,15 @@ def ValidateInstallRecoveryScript(input_tmp, info_dict): logging.info('Done checking %s', script_path) +# Symlink files in `src` to `dst`, if the files do not +# already exists in `dst` directory. +def symlinkIfNotExists(src, dst): + if not os.path.isdir(src): + return + for filename in os.listdir(src): + if os.path.exists(os.path.join(dst, filename)): + continue + os.symlink(os.path.join(src, filename), os.path.join(dst, filename)) def ValidateVerifiedBootImages(input_tmp, info_dict, options): """Validates the Verified Boot related images. @@ -257,6 +266,12 @@ def ValidateVerifiedBootImages(input_tmp, info_dict, options): Raises: AssertionError: On any verification failure. """ + # See bug 159299583 + # After commit 5277d1015, some images (e.g. acpio.img and tos.img) are no + # longer copied from RADIO to the IMAGES folder. But avbtool assumes that + # images are in IMAGES folder. So we symlink them. + symlinkIfNotExists(os.path.join(input_tmp, "RADIO"), + os.path.join(input_tmp, "IMAGES")) # Verified boot 1.0 (images signed with boot_signer and verity_signer). if info_dict.get('boot_signer') == 'true': logging.info('Verifying Verified Boot images...') |