diff --git a/tools/releasetools/add_img_to_target_files.py b/tools/releasetools/add_img_to_target_files.py index f31d416c3..bc2667d16 100755 --- a/tools/releasetools/add_img_to_target_files.py +++ b/tools/releasetools/add_img_to_target_files.py @@ -135,10 +135,6 @@ def CreateImage(input_dir, info_dict, what, block_list=None): image_props["fs_config"] = fs_config if block_list: image_props["block_list"] = block_list - if image_props.get("system_root_image") == "true": - image_props["ramdisk_dir"] = os.path.join(input_dir, "BOOT/RAMDISK") - image_props["ramdisk_fs_config"] = os.path.join( - input_dir, "META/boot_filesystem_config.txt") succ = build_image.BuildImage(os.path.join(input_dir, what), image_props, img) diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index 8934c77ae..74a5452f1 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -413,6 +413,7 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): copy_prop("system_verity_block_device", "verity_block_device") copy_prop("system_root_image", "system_root_image") copy_prop("ramdisk_dir", "ramdisk_dir") + copy_prop("ramdisk_fs_config", "ramdisk_fs_config") copy_prop("has_ext4_reserved_blocks", "has_ext4_reserved_blocks") elif mount_point == "data": # Copy the generic fs type first, override with specific one if available. diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index cffb4bdc1..0d8ca343f 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -145,15 +145,20 @@ def LoadInfoDict(input_file, input_dir=None): if "fstab_version" not in d: d["fstab_version"] = "1" - # During building, we use the "file_contexts" in the out/ directory tree. - # It is no longer available when (re)generating from target_files zip. So - # when generating from target_files zip, we look for a copy under META/ - # first, if not available search under BOOT/RAMDISK/. Note that we may need - # a different file_contexts to build images than the one running on device, - # such as when enabling system_root_image. In that case, we must have the - # one for building copied to META/. + # A few properties are stored as links to the files in the out/ directory. + # It works fine with the build system. However, they are no longer available + # when (re)generating from target_files zip. If input_dir is not None, we + # are doing repacking. Redirect those properties to the actual files in the + # unzipped directory. if input_dir is not None: + # We carry a copy of file_contexts under META/. If not available, search + # BOOT/RAMDISK/. Note that sometimes we may need a different file_contexts + # to build images than the one running on device, such as when enabling + # system_root_image. In that case, we must have the one for image + # generation copied to META/. fc_config = os.path.join(input_dir, "META", "file_contexts") + if d.get("system_root_image") == "true": + assert os.path.exists(fc_config) if not os.path.exists(fc_config): fc_config = os.path.join(input_dir, "BOOT", "RAMDISK", "file_contexts") if not os.path.exists(fc_config): @@ -162,6 +167,12 @@ def LoadInfoDict(input_file, input_dir=None): if fc_config: d["selinux_fc"] = fc_config + # Similarly we need to redirect "ramdisk_dir" and "ramdisk_fs_config". + if d.get("system_root_image") == "true": + d["ramdisk_dir"] = os.path.join(input_dir, "ROOT") + d["ramdisk_fs_config"] = os.path.join( + input_dir, "META", "root_filesystem_config.txt") + try: data = read_helper("META/imagesizes.txt") for line in data.split("\n"):