diff options
-rw-r--r-- | core/Makefile | 12 | ||||
-rw-r--r-- | core/config.mk | 1 | ||||
-rw-r--r-- | tools/releasetools/Android.bp | 2 | ||||
-rwxr-xr-x | tools/releasetools/build_image.py | 45 | ||||
-rw-r--r-- | tools/releasetools/common.py | 8 |
5 files changed, 56 insertions, 12 deletions
diff --git a/core/Makefile b/core/Makefile index 5b0430fdb6..512dcae7ed 100644 --- a/core/Makefile +++ b/core/Makefile @@ -327,7 +327,7 @@ endif ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/make/target/product/security/testkey) BUILD_KEYS := test-keys else -BUILD_KEYS := dev-keys +BUILD_KEYS := release-keys endif BUILD_VERSION_TAGS += $(BUILD_KEYS) BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) @@ -1647,6 +1647,9 @@ DEFAULT_TARGET_RECOVERY_FSTYPE_MOUNT_OPTIONS := ext4=max_batch_time=0,commit=1,d ifneq (true,$(TARGET_USERIMAGES_SPARSE_EXT_DISABLED)) INTERNAL_USERIMAGES_SPARSE_EXT_FLAG := -s endif +ifneq (true,$(TARGET_USERIMAGES_SPARSE_EROFS_DISABLED)) + INTERNAL_USERIMAGES_SPARSE_EROFS_FLAG := -s +endif ifneq (true,$(TARGET_USERIMAGES_SPARSE_SQUASHFS_DISABLED)) INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG := -s endif @@ -1663,6 +1666,10 @@ 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),erofs),) +INTERNAL_USERIMAGES_DEPS += $(MKEROFSUSERIMG) +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),) INTERNAL_USERIMAGES_DEPS += $(MKSQUASHFSUSERIMG) endif @@ -1790,6 +1797,7 @@ $(hide) echo "ext_mkuserimg=$(notdir $(MKEXTUSERIMG))" >> $(1) $(if $(INTERNAL_USERIMAGES_EXT_VARIANT),$(hide) echo "fs_type=$(INTERNAL_USERIMAGES_EXT_VARIANT)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG),$(hide) echo "extfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EXT_FLAG)" >> $(1)) +$(if $(INTERNAL_USERIMAGES_SPARSE_EROFS_FLAG),$(hide) echo "erofs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_EROFS_FLAG)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG),$(hide) echo "squashfs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_SQUASHFS_FLAG)" >> $(1)) $(if $(INTERNAL_USERIMAGES_SPARSE_F2FS_FLAG),$(hide) echo "f2fs_sparse_flag=$(INTERNAL_USERIMAGES_SPARSE_F2FS_FLAG)" >> $(1)) $(if $(BOARD_EXT4_SHARE_DUP_BLOCKS),$(hide) echo "ext4_share_dup_blocks=$(BOARD_EXT4_SHARE_DUP_BLOCKS)" >> $(1)) @@ -4167,6 +4175,8 @@ INTERNAL_OTATOOLS_MODULES := \ mkbootimg \ mke2fs \ mke2fs.conf \ + mkfs.erofs \ + mkerofsimage.sh \ mkf2fsuserimg.sh \ mksquashfs \ mksquashfsimage.sh \ diff --git a/core/config.mk b/core/config.mk index c9efa116fc..fed4190f35 100644 --- a/core/config.mk +++ b/core/config.mk @@ -626,6 +626,7 @@ APICHECK := $(HOST_OUT_JAVA_LIBRARIES)/metalava$(COMMON_JAVA_PACKAGE_SUFFIX) FS_GET_STATS := $(HOST_OUT_EXECUTABLES)/fs_get_stats$(HOST_EXECUTABLE_SUFFIX) MKEXTUSERIMG := $(HOST_OUT_EXECUTABLES)/mkuserimg_mke2fs MKE2FS_CONF := system/extras/ext4_utils/mke2fs.conf +MKEROFSUSERIMG := $(HOST_OUT_EXECUTABLES)/mkerofsimage.sh MKSQUASHFSUSERIMG := $(HOST_OUT_EXECUTABLES)/mksquashfsimage.sh MKF2FSUSERIMG := $(HOST_OUT_EXECUTABLES)/mkf2fsuserimg.sh SIMG2IMG := $(HOST_OUT_EXECUTABLES)/simg2img$(HOST_EXECUTABLE_SUFFIX) diff --git a/tools/releasetools/Android.bp b/tools/releasetools/Android.bp index 4bacddc358..fafb886b76 100644 --- a/tools/releasetools/Android.bp +++ b/tools/releasetools/Android.bp @@ -49,6 +49,8 @@ python_defaults { required: [ "blk_alloc_to_base_fs", "e2fsck", + "mkerofsimage.sh", + "mkuserimg_mke2fs", "simg2img", "tune2fs", ], diff --git a/tools/releasetools/build_image.py b/tools/releasetools/build_image.py index ae0dfa0ab0..7f49845860 100755 --- a/tools/releasetools/build_image.py +++ b/tools/releasetools/build_image.py @@ -295,6 +295,22 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config): build_command.extend(["--inode_size", "256"]) if "selinux_fc" in prop_dict: build_command.append(prop_dict["selinux_fc"]) + elif fs_type.startswith("erofs"): + build_command = ["mkerofsimage.sh"] + build_command.extend([in_dir, out_file]) + if "erofs_sparse_flag" in prop_dict: + build_command.extend([prop_dict["erofs_sparse_flag"]]) + build_command.extend(["-m", prop_dict["mount_point"]]) + if target_out: + build_command.extend(["-d", target_out]) + if fs_config: + build_command.extend(["-C", fs_config]) + if "selinux_fc" in prop_dict: + build_command.extend(["-c", prop_dict["selinux_fc"]]) + if "timestamp" in prop_dict: + build_command.extend(["-T", str(prop_dict["timestamp"])]) + if "uuid" in prop_dict: + build_command.extend(["-U", prop_dict["uuid"]]) elif fs_type.startswith("squash"): build_command = ["mksquashfsimage.sh"] build_command.extend([in_dir, out_file]) @@ -358,13 +374,14 @@ def BuildImageMkfs(in_dir, prop_dict, out_file, target_out, fs_config): in_dir, du_str, int(prop_dict.get("partition_reserved_size", 0)), int(prop_dict.get("partition_reserved_size", 0)) // BYTES_IN_MB)) - print( - "The max image size for filesystem files is {} bytes ({} MB), out of a " - "total partition size of {} bytes ({} MB).".format( - int(prop_dict["image_size"]), - int(prop_dict["image_size"]) // BYTES_IN_MB, - int(prop_dict["partition_size"]), - int(prop_dict["partition_size"]) // BYTES_IN_MB)) + if ("image_size" in prop_dict and "partition_size" in prop_dict): + print( + "The max image size for filesystem files is {} bytes ({} MB), " + "out of a total partition size of {} bytes ({} MB).".format( + int(prop_dict["image_size"]), + int(prop_dict["image_size"]) // BYTES_IN_MB, + int(prop_dict["partition_size"]), + int(prop_dict["partition_size"]) // BYTES_IN_MB)) raise if run_e2fsck and prop_dict.get("skip_fsck") != "true": @@ -402,7 +419,7 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None): fs_type = prop_dict.get("fs_type", "") fs_spans_partition = True - if fs_type.startswith("squash"): + if fs_type.startswith("squash") or fs_type.startswith("erofs"): fs_spans_partition = False # Get a builder for creating an image that's to be verified by Verified Boot, @@ -412,7 +429,16 @@ def BuildImage(in_dir, prop_dict, out_file, target_out=None): if (prop_dict.get("use_dynamic_partition_size") == "true" and "partition_size" not in prop_dict): # If partition_size is not defined, use output of `du' + reserved_size. - size = GetDiskUsage(in_dir) + # For compressed file system, it's better to use the compressed size to avoid wasting space. + if fs_type.startswith("erofs"): + tmp_dict = prop_dict.copy() + if "erofs_sparse_flag" in tmp_dict: + tmp_dict.pop("erofs_sparse_flag") + BuildImageMkfs(in_dir, tmp_dict, out_file, target_out, fs_config) + size = GetDiskUsage(out_file) + os.remove(out_file) + else: + size = GetDiskUsage(in_dir) logger.info( "The tree size of %s is %d MB.", in_dir, size // BYTES_IN_MB) # If not specified, give us 16MB margin for GetDiskUsage error ... @@ -530,6 +556,7 @@ def ImagePropFromGlobalDict(glob_dict, mount_point): common_props = ( "extfs_sparse_flag", + "erofs_sparse_flag", "squashfs_sparse_flag", "f2fs_sparse_flag", "skip_fsck", diff --git a/tools/releasetools/common.py b/tools/releasetools/common.py index 76c2c97cb9..e40cbd75a3 100644 --- a/tools/releasetools/common.py +++ b/tools/releasetools/common.py @@ -1614,7 +1614,9 @@ def GetNonSparseImage(which, tmpdir, hashtree_info_generator=None): # The image and map files must have been created prior to calling # ota_from_target_files.py (since LMP). - assert os.path.exists(path) and os.path.exists(mappath) + assert os.path.exists(path) + if not os.path.exists(mappath): + mappath = None return images.FileImage(path, hashtree_info_generator=hashtree_info_generator) @@ -1643,7 +1645,9 @@ def GetSparseImage(which, tmpdir, input_zip, allow_shared_blocks, # The image and map files must have been created prior to calling # ota_from_target_files.py (since LMP). - assert os.path.exists(path) and os.path.exists(mappath) + assert os.path.exists(path) + if not os.path.exists(mappath): + mappath = None # In ext4 filesystems, block 0 might be changed even being mounted R/O. We add # it to clobbered_blocks so that it will be written to the target |