From afdd7c74bc7f228b63b0bdec61a524060933e7c9 Mon Sep 17 00:00:00 2001 From: Devin Moore Date: Mon, 13 Dec 2021 22:04:08 +0000 Subject: [PATCH] Update releasetools for new init_boot.img This new init_boot.img contains the ramdisk that used to reside in the boot.img file. Test: set BOARD_PREBUILT_INIT_BOOT_IMAGE to an external init_boot.img - Check that "m" pulls in the init_boot.img to out/target/product/vsoc_x86_64/ - Check that "m dist" adds the init_boot.img to aosp_cf_x86_64_phone-img-eng.devinmoore.zip Test: atest --host releasetools_test Bug: 203698939 Change-Id: If7ef2cf093e5e525529c7c44333c0f40f6ba0764 --- tools/releasetools/add_img_to_target_files.py | 12 ++++++++++ tools/releasetools/common.py | 23 ++++++++++++------- tools/releasetools/img_from_target_files.py | 2 +- tools/releasetools/sign_target_files_apks.py | 1 + .../test_sign_target_files_apks.py | 6 +++++ 5 files changed, 35 insertions(+), 9 deletions(-) diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py index 2a4b56ba85..0c39827414 100644 --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -759,6 +759,7 @@ def AddImagesToTargetFiles(filename): has_recovery = OPTIONS.info_dict.get("no_recovery") != "true" 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" # {vendor,odm,product,system_ext,vendor_dlkm,odm_dlkm, system, system_other}.img @@ -819,6 +820,17 @@ def AddImagesToTargetFiles(filename): if output_zip: boot_image.AddToZip(output_zip) + if has_init_boot: + banner("init_boot") + init_boot_image = common.GetBootableImage( + "IMAGES/init_boot.img", "init_boot.img", OPTIONS.input_tmp, "INIT_BOOT") + if init_boot_image: + partitions['init_boot'] = os.path.join(OPTIONS.input_tmp, "IMAGES", "init_boot.img") + if not os.path.exists(partitions['init_boot']): + init_boot_image.WriteToDir(OPTIONS.input_tmp) + if output_zip: + init_boot_image.AddToZip(output_zip) + if has_vendor_boot: banner("vendor_boot") vendor_boot_image = common.GetVendorBootImage( diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 64ac95aaff..6ec1b94687 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -111,7 +111,7 @@ SPECIAL_CERT_STRINGS = ("PRESIGNED", "EXTERNAL") # descriptor into vbmeta.img. When adding a new entry here, the # AVB_FOOTER_ARGS_BY_PARTITION in sign_target_files_apks need to be updated # accordingly. -AVB_PARTITIONS = ('boot', 'dtbo', 'odm', 'product', 'pvmfw', 'recovery', +AVB_PARTITIONS = ('boot', 'init_boot', 'dtbo', 'odm', 'product', 'pvmfw', 'recovery', 'system', 'system_ext', 'vendor', 'vendor_boot', 'vendor_dlkm', 'odm_dlkm') @@ -130,7 +130,7 @@ PARTITIONS_WITH_CARE_MAP = [ ] # Partitions with a build.prop file -PARTITIONS_WITH_BUILD_PROP = PARTITIONS_WITH_CARE_MAP + ['boot'] +PARTITIONS_WITH_BUILD_PROP = PARTITIONS_WITH_CARE_MAP + ['boot', 'init_boot'] # See sysprop.mk. If file is moved, add new search paths here; don't remove # existing search paths. @@ -935,9 +935,9 @@ class PartitionBuildProps(object): def FromInputFile(input_file, name, placeholder_values=None, ramdisk_format=RamdiskFormat.LZ4): """Loads the build.prop file and builds the attributes.""" - if name == "boot": + if name in ("boot", "init_boot"): data = PartitionBuildProps._ReadBootPropFile( - input_file, ramdisk_format=ramdisk_format) + input_file, name, ramdisk_format=ramdisk_format) else: data = PartitionBuildProps._ReadPartitionPropFile(input_file, name) @@ -946,15 +946,16 @@ class PartitionBuildProps(object): return props @staticmethod - def _ReadBootPropFile(input_file, ramdisk_format): + def _ReadBootPropFile(input_file, partition_name, ramdisk_format): """ Read build.prop for boot image from input_file. Return empty string if not found. """ + image_path = 'IMAGES/' + partition_name + '.img' try: - boot_img = ExtractFromInputFile(input_file, 'IMAGES/boot.img') + boot_img = ExtractFromInputFile(input_file, image_path) except KeyError: - logger.warning('Failed to read IMAGES/boot.img') + logger.warning('Failed to read %s', image_path) return '' prop_file = GetBootImageBuildProp(boot_img, ramdisk_format=ramdisk_format) if prop_file is None: @@ -1539,6 +1540,8 @@ def _BuildBootableImage(image_name, sourcedir, fs_config_file, info_dict=None, logger.info("Excluded kernel binary from recovery image.") else: kernel = "kernel" + elif partition_name == "init_boot": + pass else: kernel = image_name.replace("boot", "kernel") kernel = kernel.replace(".img", "") @@ -1593,6 +1596,8 @@ def _BuildBootableImage(image_name, sourcedir, fs_config_file, info_dict=None, # Fall back to "mkbootimg_args" for recovery image # in case "recovery_mkbootimg_args" is not set. args = info_dict.get("mkbootimg_args") + elif partition_name == "init_boot": + args = info_dict.get("mkbootimg_init_args") else: args = info_dict.get("mkbootimg_args") if args and args.strip(): @@ -1752,9 +1757,11 @@ def GetBootableImage(name, prebuilt_name, unpack_dir, tree_subdir, logger.info("building image from target_files %s...", tree_subdir) # With system_root_image == "true", we don't pack ramdisk into the boot image. + # With init_boot == "true", we don't pack the ramdisk into boot.img. # Unless "recovery_as_boot" is specified, in which case we carry the ramdisk # for recovery. - has_ramdisk = (info_dict.get("system_root_image") != "true" or + has_ramdisk = ((info_dict.get("system_root_image") != "true" and + info_dict.get("init_boot") != "true") or prebuilt_name != "boot.img" or info_dict.get("recovery_as_boot") == "true") diff --git a/tools/releasetools/img_from_target_files.py b/tools/releasetools/img_from_target_files.py index cbb51e1788..0b2b1870c1 100755 --- a/tools/releasetools/img_from_target_files.py +++ b/tools/releasetools/img_from_target_files.py @@ -124,7 +124,7 @@ def EntriesForUserImages(input_file): for image_path in [name for name in namelist if name.startswith('IMAGES/')]: image = os.path.basename(image_path) - if OPTIONS.bootable_only and image not in('boot.img', 'recovery.img', 'bootloader'): + if OPTIONS.bootable_only and image not in('boot.img', 'recovery.img', 'bootloader', 'init_boot.img'): continue if not image.endswith('.img') and image != 'bootloader': continue diff --git a/tools/releasetools/sign_target_files_apks.py b/tools/releasetools/sign_target_files_apks.py index 562698096a..8b837b8ed9 100755 --- a/tools/releasetools/sign_target_files_apks.py +++ b/tools/releasetools/sign_target_files_apks.py @@ -201,6 +201,7 @@ OPTIONS.allow_gsi_debug_sepolicy = False AVB_FOOTER_ARGS_BY_PARTITION = { 'boot': 'avb_boot_add_hash_footer_args', + 'init_boot': 'avb_init_boot_add_hash_footer_args', 'dtbo': 'avb_dtbo_add_hash_footer_args', 'product': 'avb_product_add_hashtree_footer_args', 'recovery': 'avb_recovery_add_hash_footer_args', diff --git a/tools/releasetools/test_sign_target_files_apks.py b/tools/releasetools/test_sign_target_files_apks.py index 92dca9aee0..0f13add290 100644 --- a/tools/releasetools/test_sign_target_files_apks.py +++ b/tools/releasetools/test_sign_target_files_apks.py @@ -62,6 +62,9 @@ name="apex.apexd_test_different_app.apex" public_key="system/apex/apexd/apexd_te 'avb_boot_add_hash_footer_args': ('--prop com.android.build.boot.os_version:R ' '--prop com.android.build.boot.security_patch:2019-09-05'), + 'avb_init_boot_add_hash_footer_args': + ('--prop com.android.build.boot.os_version:R ' + '--prop com.android.build.boot.security_patch:2019-09-05'), 'avb_system_add_hashtree_footer_args': ('--prop com.android.build.system.os_version:R ' '--prop com.android.build.system.security_patch:2019-09-05 ' @@ -77,6 +80,9 @@ name="apex.apexd_test_different_app.apex" public_key="system/apex/apexd/apexd_te 'avb_boot_add_hash_footer_args': ('--prop com.android.build.boot.os_version:R ' '--prop com.android.build.boot.security_patch:2019-09-05'), + 'avb_init_boot_add_hash_footer_args': + ('--prop com.android.build.boot.os_version:R ' + '--prop com.android.build.boot.security_patch:2019-09-05'), 'avb_system_add_hashtree_footer_args': ('--prop com.android.build.system.os_version:R ' '--prop com.android.build.system.security_patch:2019-09-05 '