core & tools: system_dlkm: add dynamic partition
Converts existing static partition support to a dynamic partition. Bug: 200082547 Test: TH Signed-off-by: Ramji Jiyani <ramjiyani@google.com> Change-Id: Ifd6d0c2a04e947b16f8b241e99cca594a1d315ae
This commit is contained in:
@@ -42,13 +42,14 @@ ifeq (,$(wildcard $(vendor_capability_header)))
|
||||
vendor_capability_header := $(system_capability_header)
|
||||
endif
|
||||
|
||||
# List of supported vendor, oem, odm, vendor_dlkm and odm_dlkm Partitions
|
||||
# List of supported vendor, oem, odm, vendor_dlkm, odm_dlkm, and system_dlkm 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_USES_ODM_DLKMIMAGE)$(BOARD_ODM_DLKMIMAGE_FILE_SYSTEM_TYPE),odm_dlkm) \
|
||||
$(if $(BOARD_USES_SYSTEM_DLKMIMAGE)$(BOARD_SYSTEM_DLKMIMAGE_FILE_SYSTEM_TYPE),system_dlkm) \
|
||||
)
|
||||
|
||||
##################################
|
||||
@@ -502,6 +503,63 @@ $(LOCAL_BUILT_MODULE): $(LOCAL_PATH)/fs_config_generator.py $(TARGET_FS_CONFIG_G
|
||||
|
||||
endif
|
||||
|
||||
ifneq ($(filter system_dlkm,$(fs_config_generate_extra_partition_list)),)
|
||||
##################################
|
||||
# Generate the system_dlkm/etc/fs_config_dirs binary file for the target
|
||||
# Add fs_config_dirs or fs_config_dirs_nonsystem to PRODUCT_PACKAGES
|
||||
# in the device make file to enable
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := _fs_config_dirs_system_dlkm
|
||||
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
|
||||
LOCAL_LICENSE_CONDITIONS := notice
|
||||
LOCAL_NOTICE_FILE := build/soong/licenses/LICENSE
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_INSTALLED_MODULE_STEM := fs_config_dirs
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_DLKM)/etc
|
||||
include $(BUILD_SYSTEM)/base_rules.mk
|
||||
$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(vendor_android_filesystem_config)
|
||||
$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_CAP_HDR := $(vendor_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) $(vendor_android_filesystem_config) $(vendor_capability_header)
|
||||
@mkdir -p $(dir $@)
|
||||
$< fsconfig \
|
||||
--aid-header $(PRIVATE_ANDROID_FS_HDR) \
|
||||
--capability-header $(PRIVATE_ANDROID_CAP_HDR) \
|
||||
--partition system_dlkm \
|
||||
--dirs \
|
||||
--out_file $@ \
|
||||
$(or $(PRIVATE_TARGET_FS_CONFIG_GEN),/dev/null)
|
||||
|
||||
##################################
|
||||
# Generate the system_dlkm/etc/fs_config_files binary file for the target
|
||||
# Add fs_config_files or fs_config_files_nonsystem to PRODUCT_PACKAGES
|
||||
# in the device make file to enable
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := _fs_config_files_system_dlkm
|
||||
LOCAL_LICENSE_KINDS := SPDX-license-identifier-Apache-2.0
|
||||
LOCAL_LICENSE_CONDITIONS := notice
|
||||
LOCAL_NOTICE_FILE := build/soong/licenses/LICENSE
|
||||
LOCAL_MODULE_CLASS := ETC
|
||||
LOCAL_INSTALLED_MODULE_STEM := fs_config_files
|
||||
LOCAL_MODULE_PATH := $(TARGET_OUT_SYSTEM_DLKM)/etc
|
||||
include $(BUILD_SYSTEM)/base_rules.mk
|
||||
$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_FS_HDR := $(vendor_android_filesystem_config)
|
||||
$(LOCAL_BUILT_MODULE): PRIVATE_ANDROID_CAP_HDR := $(vendor_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) $(vendor_android_filesystem_config) $(vendor_capability_header)
|
||||
@mkdir -p $(dir $@)
|
||||
$< fsconfig \
|
||||
--aid-header $(PRIVATE_ANDROID_FS_HDR) \
|
||||
--capability-header $(PRIVATE_ANDROID_CAP_HDR) \
|
||||
--partition system_dlkm \
|
||||
--files \
|
||||
--out_file $@ \
|
||||
$(or $(PRIVATE_TARGET_FS_CONFIG_GEN),/dev/null)
|
||||
|
||||
endif
|
||||
|
||||
ifneq ($(BOARD_USES_PRODUCTIMAGE)$(BOARD_PRODUCTIMAGE_FILE_SYSTEM_TYPE),)
|
||||
##################################
|
||||
# Generate the product/etc/fs_config_dirs binary file for the target
|
||||
|
@@ -275,6 +275,21 @@ def AddOdmDlkm(output_zip):
|
||||
block_list=block_list)
|
||||
return img.name
|
||||
|
||||
def AddSystemDlkm(output_zip):
|
||||
"""Turn the contents of SystemDlkm into an system_dlkm image and store it in output_zip."""
|
||||
|
||||
img = OutputFile(output_zip, OPTIONS.input_tmp, "IMAGES", "system_dlkm.img")
|
||||
if os.path.exists(img.name):
|
||||
logger.info("system_dlkm.img already exists; no need to rebuild...")
|
||||
return img.name
|
||||
|
||||
block_list = OutputFile(
|
||||
output_zip, OPTIONS.input_tmp, "IMAGES", "system_dlkm.map")
|
||||
CreateImage(
|
||||
OPTIONS.input_tmp, OPTIONS.info_dict, "system_dlkm", img,
|
||||
block_list=block_list)
|
||||
return img.name
|
||||
|
||||
|
||||
def AddDtbo(output_zip):
|
||||
"""Adds the DTBO image.
|
||||
@@ -761,14 +776,14 @@ def AddImagesToTargetFiles(filename):
|
||||
has_boot = OPTIONS.info_dict.get("no_boot") != "true"
|
||||
has_init_boot = OPTIONS.info_dict.get("init_boot") == "true"
|
||||
has_vendor_boot = OPTIONS.info_dict.get("vendor_boot") == "true"
|
||||
has_system_dlkm = OPTIONS.info_dict.get("system_dlkm") == "true"
|
||||
|
||||
# {vendor,odm,product,system_ext,vendor_dlkm,odm_dlkm, system, system_other}.img
|
||||
# {vendor,odm,product,system_ext,vendor_dlkm,odm_dlkm, system_dlkm, system, system_other}.img
|
||||
# can be built from source, or dropped into target_files.zip as a prebuilt blob.
|
||||
has_vendor = HasPartition("vendor")
|
||||
has_odm = HasPartition("odm")
|
||||
has_vendor_dlkm = HasPartition("vendor_dlkm")
|
||||
has_odm_dlkm = HasPartition("odm_dlkm")
|
||||
has_system_dlkm = HasPartition("system_dlkm")
|
||||
has_product = HasPartition("product")
|
||||
has_system_ext = HasPartition("system_ext")
|
||||
has_system = HasPartition("system")
|
||||
@@ -832,19 +847,6 @@ def AddImagesToTargetFiles(filename):
|
||||
if output_zip:
|
||||
init_boot_image.AddToZip(output_zip)
|
||||
|
||||
if has_system_dlkm:
|
||||
banner("system_dlkm")
|
||||
system_dlkm_image = common.GetSystemDlkmImage(
|
||||
"IMAGES/system_dlkm.img", "system_dlkm.img", OPTIONS.input_tmp, "SYSTEM_DLKM")
|
||||
if system_dlkm_image:
|
||||
partitions['system_dlkm'] = os.path.join(OPTIONS.input_tmp, "IMAGES", "system_dlkm.img")
|
||||
if not os.path.exists(partitions['system_dlkm']):
|
||||
system_dlkm_image.WriteToDir(OPTIONS.input_tmp)
|
||||
if output_zip:
|
||||
system_dlkm_image.AddToZip(output_zip)
|
||||
else:
|
||||
logger.error("Couldn't locate system_dlkm.img; skipping...")
|
||||
|
||||
if has_vendor_boot:
|
||||
banner("vendor_boot")
|
||||
vendor_boot_image = common.GetVendorBootImage(
|
||||
@@ -897,6 +899,7 @@ def AddImagesToTargetFiles(filename):
|
||||
("odm", has_odm, AddOdm, []),
|
||||
("vendor_dlkm", has_vendor_dlkm, AddVendorDlkm, []),
|
||||
("odm_dlkm", has_odm_dlkm, AddOdmDlkm, []),
|
||||
("system_dlkm", has_system_dlkm, AddSystemDlkm, []),
|
||||
("system_other", has_system_other, AddSystemOther, []),
|
||||
)
|
||||
for call in add_partition_calls:
|
||||
|
@@ -651,6 +651,7 @@ def ImagePropFromGlobalDict(glob_dict, mount_point):
|
||||
"oem",
|
||||
"product",
|
||||
"system",
|
||||
"system_dlkm",
|
||||
"system_ext",
|
||||
"system_other",
|
||||
"vendor",
|
||||
@@ -773,6 +774,8 @@ def GlobalDictFromImageProp(image_prop, mount_point):
|
||||
copy_prop("partition_size", "vendor_dlkm_size")
|
||||
elif mount_point == "odm_dlkm":
|
||||
copy_prop("partition_size", "odm_dlkm_size")
|
||||
elif mount_point == "system_dlkm":
|
||||
copy_prop("partition_size", "system_dlkm_size")
|
||||
elif mount_point == "product":
|
||||
copy_prop("partition_size", "product_size")
|
||||
elif mount_point == "system_ext":
|
||||
@@ -816,6 +819,8 @@ def main(argv):
|
||||
mount_point = "vendor_dlkm"
|
||||
elif image_filename == "odm_dlkm.img":
|
||||
mount_point = "odm_dlkm"
|
||||
elif image_filename == "system_dlkm.img":
|
||||
mount_point = "system_dlkm"
|
||||
elif image_filename == "oem.img":
|
||||
mount_point = "oem"
|
||||
elif image_filename == "product.img":
|
||||
|
@@ -46,7 +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 and odm_dlkm does not have VINTF files.
|
||||
# vendor_dlkm, odm_dlkm, and system_dlkm does not have VINTF files.
|
||||
}
|
||||
|
||||
UNZIP_PATTERN = ['META/*', '*/build.prop']
|
||||
|
@@ -114,7 +114,7 @@ SPECIAL_CERT_STRINGS = ("PRESIGNED", "EXTERNAL")
|
||||
# accordingly.
|
||||
AVB_PARTITIONS = ('boot', 'init_boot', 'dtbo', 'odm', 'product', 'pvmfw', 'recovery',
|
||||
'system', 'system_ext', 'vendor', 'vendor_boot',
|
||||
'vendor_dlkm', 'odm_dlkm')
|
||||
'vendor_dlkm', 'odm_dlkm', 'system_dlkm')
|
||||
|
||||
# Chained VBMeta partitions.
|
||||
AVB_VBMETA_PARTITIONS = ('vbmeta_system', 'vbmeta_vendor')
|
||||
@@ -128,6 +128,7 @@ PARTITIONS_WITH_CARE_MAP = [
|
||||
'odm',
|
||||
'vendor_dlkm',
|
||||
'odm_dlkm',
|
||||
'system_dlkm',
|
||||
]
|
||||
|
||||
# Partitions with a build.prop file
|
||||
@@ -801,7 +802,7 @@ def LoadInfoDict(input_file, repacking=False):
|
||||
|
||||
# Redirect {partition}_base_fs_file for each of the named partitions.
|
||||
for part_name in ["system", "vendor", "system_ext", "product", "odm",
|
||||
"vendor_dlkm", "odm_dlkm"]:
|
||||
"vendor_dlkm", "odm_dlkm", "system_dlkm"]:
|
||||
key_name = part_name + "_base_fs_file"
|
||||
if key_name not in d:
|
||||
continue
|
||||
@@ -1245,6 +1246,7 @@ def PartitionMapFromTargetFiles(target_files_dir):
|
||||
"VENDOR_DLKM", "VENDOR/vendor_dlkm", "SYSTEM/vendor/vendor_dlkm"
|
||||
],
|
||||
"odm_dlkm": ["ODM_DLKM", "VENDOR/odm_dlkm", "SYSTEM/vendor/odm_dlkm"],
|
||||
"system_dlkm": ["SYSTEM_DLKM", "SYSTEM/system_dlkm"],
|
||||
}
|
||||
partition_map = {}
|
||||
for partition, subdirs in possible_subdirs.items():
|
||||
@@ -1835,23 +1837,6 @@ def GetBootableImage(name, prebuilt_name, unpack_dir, tree_subdir,
|
||||
return File(name, data)
|
||||
return None
|
||||
|
||||
def GetSystemDlkmImage(name, prebuilt_name, unpack_dir, tree_subdir,
|
||||
info_dict=None):
|
||||
"""Return a File object with the desired system dlkm image.
|
||||
Look for it under 'unpack_dir'/IMAGES or 'unpack_dir'/PREBUILT_IMAGES.
|
||||
"""
|
||||
|
||||
prebuilt_path = os.path.join(unpack_dir, "IMAGES", prebuilt_name)
|
||||
if os.path.exists(prebuilt_path):
|
||||
logger.info("Using prebuilt %s from IMAGES...", prebuilt_name)
|
||||
return File.FromLocalFile(name, prebuilt_path)
|
||||
|
||||
prebuilt_path = os.path.join(unpack_dir, "PREBUILT_IMAGES", prebuilt_name)
|
||||
if os.path.exists(prebuilt_path):
|
||||
logger.info("Using prebuilt %s from PREBUILT_IMAGES...", prebuilt_name)
|
||||
return File.FromLocalFile(name, prebuilt_path)
|
||||
|
||||
return None
|
||||
|
||||
def _BuildVendorBootImage(sourcedir, info_dict=None):
|
||||
"""Build a vendor boot image from the specified sourcedir.
|
||||
|
@@ -255,6 +255,7 @@ SINGLE_BUILD_PARTITIONS = (
|
||||
'VENDOR/',
|
||||
'VENDOR_DLKM/',
|
||||
'ODM_DLKM/',
|
||||
'SYSTEM_DLKM/',
|
||||
)
|
||||
|
||||
|
||||
|
@@ -316,15 +316,15 @@ AB_PARTITIONS = 'META/ab_partitions.txt'
|
||||
# Files to be unzipped for target diffing purpose.
|
||||
TARGET_DIFFING_UNZIP_PATTERN = ['BOOT', 'RECOVERY', 'SYSTEM/*', 'VENDOR/*',
|
||||
'PRODUCT/*', 'SYSTEM_EXT/*', 'ODM/*',
|
||||
'VENDOR_DLKM/*', 'ODM_DLKM/*']
|
||||
'VENDOR_DLKM/*', 'ODM_DLKM/*', 'SYSTEM_DLKM/*']
|
||||
RETROFIT_DAP_UNZIP_PATTERN = ['OTA/super_*.img', AB_PARTITIONS]
|
||||
|
||||
# Images to be excluded from secondary payload. We essentially only keep
|
||||
# 'system_other' and bootloader partitions.
|
||||
SECONDARY_PAYLOAD_SKIPPED_IMAGES = [
|
||||
'boot', 'dtbo', 'modem', 'odm', 'odm_dlkm', 'product', 'radio', 'recovery',
|
||||
'system_ext', 'vbmeta', 'vbmeta_system', 'vbmeta_vendor', 'vendor',
|
||||
'vendor_boot']
|
||||
'system_dlkm', 'system_ext', 'vbmeta', 'vbmeta_system', 'vbmeta_vendor',
|
||||
'vendor', 'vendor_boot']
|
||||
|
||||
|
||||
class PayloadSigner(object):
|
||||
|
@@ -206,6 +206,7 @@ AVB_FOOTER_ARGS_BY_PARTITION = {
|
||||
'product': 'avb_product_add_hashtree_footer_args',
|
||||
'recovery': 'avb_recovery_add_hash_footer_args',
|
||||
'system': 'avb_system_add_hashtree_footer_args',
|
||||
'system_dlkm': "avb_system_dlkm_add_hashtree_footer_args",
|
||||
'system_ext': 'avb_system_ext_add_hashtree_footer_args',
|
||||
'system_other': 'avb_system_other_add_hashtree_footer_args',
|
||||
'odm': 'avb_odm_add_hashtree_footer_args',
|
||||
|
Reference in New Issue
Block a user