mirror of
				https://github.com/meizu-m86/twrp_multirom_m86
				synced 2025-11-04 06:15:41 +08:00 
			
		
		
		
	allow flashing sparse images
if the image has the right magic bytes to be a sparse image, use simg2img to flash the image create a rule to make a fully dynamic simg2img which results in a much smaller increase in gzip ramdisk size (2KB vs 40KB) Change-Id: I1b0f6bc127da46103888b1154a9bddd8ac02c01d
This commit is contained in:
		@@ -99,6 +99,7 @@ LOCAL_C_INCLUDES += \
 | 
			
		||||
    system/vold \
 | 
			
		||||
    system/extras/ext4_utils \
 | 
			
		||||
    system/core/adb \
 | 
			
		||||
    system/core/libsparse
 | 
			
		||||
 | 
			
		||||
LOCAL_C_INCLUDES += bionic external/openssl/include $(LOCAL_PATH)/libmincrypt/includes
 | 
			
		||||
ifeq ($(shell test $(PLATFORM_SDK_VERSION) -lt 23; echo $$?),0)
 | 
			
		||||
@@ -351,7 +352,8 @@ LOCAL_ADDITIONAL_DEPENDENCIES := \
 | 
			
		||||
    fsck.fat \
 | 
			
		||||
    fatlabel \
 | 
			
		||||
    mkfs.fat \
 | 
			
		||||
    permissive.sh
 | 
			
		||||
    permissive.sh \
 | 
			
		||||
    simg2img_twrp
 | 
			
		||||
 | 
			
		||||
ifneq ($(TARGET_ARCH), arm64)
 | 
			
		||||
    ifneq ($(TARGET_ARCH), x86_64)
 | 
			
		||||
@@ -586,6 +588,7 @@ include $(commands_recovery_local_path)/injecttwrp/Android.mk \
 | 
			
		||||
    $(commands_recovery_local_path)/dosfstools/Android.mk \
 | 
			
		||||
    $(commands_recovery_local_path)/etc/Android.mk \
 | 
			
		||||
    $(commands_recovery_local_path)/toybox/Android.mk \
 | 
			
		||||
    $(commands_recovery_local_path)/simg2img/Android.mk \
 | 
			
		||||
    $(commands_recovery_local_path)/libpixelflinger/Android.mk
 | 
			
		||||
 | 
			
		||||
ifeq ($(TW_INCLUDE_CRYPTO), true)
 | 
			
		||||
 
 | 
			
		||||
@@ -68,6 +68,7 @@ extern "C" {
 | 
			
		||||
#include <sys/xattr.h>
 | 
			
		||||
#include <linux/xattr.h>
 | 
			
		||||
#endif
 | 
			
		||||
#include <sparse_format.h>
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
 | 
			
		||||
@@ -407,12 +408,12 @@ bool TWPartition::Process_Fstab_Line(string Line, bool Display_Error) {
 | 
			
		||||
		} else if (Mount_Point == "/system_image") {
 | 
			
		||||
			Display_Name = "System Image";
 | 
			
		||||
			Backup_Display_Name = Display_Name;
 | 
			
		||||
			Can_Flash_Img = false;
 | 
			
		||||
			Can_Flash_Img = true;
 | 
			
		||||
			Can_Be_Backed_Up = true;
 | 
			
		||||
		} else if (Mount_Point == "/vendor_image") {
 | 
			
		||||
			Display_Name = "Vendor Image";
 | 
			
		||||
			Backup_Display_Name = Display_Name;
 | 
			
		||||
			Can_Flash_Img = false;
 | 
			
		||||
			Can_Flash_Img = true;
 | 
			
		||||
			Can_Be_Backed_Up = true;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
@@ -2375,7 +2376,24 @@ bool TWPartition::Flash_Image_DD(string Filename) {
 | 
			
		||||
	string Command;
 | 
			
		||||
 | 
			
		||||
	gui_msg(Msg("flashing=Flashing {1}...")(Display_Name));
 | 
			
		||||
 | 
			
		||||
	uint32_t magic = 0;
 | 
			
		||||
	int fd = open(Filename.c_str(), O_RDONLY);
 | 
			
		||||
	if (fd < 0) {
 | 
			
		||||
		gui_msg(Msg(msg::kError, "error_opening_strerr=Error opening: '{1}' ({2})")(Filename)(strerror(errno)));
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	if (read(fd, &magic, sizeof(magic)) != sizeof(magic)) {
 | 
			
		||||
		gui_msg(Msg(msg::kError, "error_opening_strerr=Error opening: '{1}' ({2})")(Filename)(strerror(errno)));
 | 
			
		||||
		close(fd);
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
	close(fd);
 | 
			
		||||
	if (magic == SPARSE_HEADER_MAGIC) {
 | 
			
		||||
		Command = "simg2img '" + Filename + "' " + Actual_Block_Device;
 | 
			
		||||
	} else {
 | 
			
		||||
		Command = "dd bs=8388608 if='" + Filename + "' of=" + Actual_Block_Device;
 | 
			
		||||
	}
 | 
			
		||||
	LOGINFO("Flash command: '%s'\n", Command.c_str());
 | 
			
		||||
	TWFunc::Exec_Cmd(Command);
 | 
			
		||||
	return true;
 | 
			
		||||
 
 | 
			
		||||
@@ -36,6 +36,7 @@ RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/e2fsck
 | 
			
		||||
RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/mke2fs
 | 
			
		||||
RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/tune2fs
 | 
			
		||||
RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/resize2fs
 | 
			
		||||
RELINK_SOURCE_FILES += $(TARGET_RECOVERY_ROOT_OUT)/sbin/simg2img
 | 
			
		||||
ifneq ($(TARGET_ARCH), x86_64)
 | 
			
		||||
    RELINK_SOURCE_FILES += $(TARGET_OUT_EXECUTABLES)/linker
 | 
			
		||||
endif
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								simg2img/Android.mk
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								simg2img/Android.mk
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
LOCAL_PATH := system/core/libsparse
 | 
			
		||||
 | 
			
		||||
include $(CLEAR_VARS)
 | 
			
		||||
LOCAL_SRC_FILES := simg2img.c \
 | 
			
		||||
	sparse_crc32.c
 | 
			
		||||
LOCAL_MODULE := simg2img_twrp
 | 
			
		||||
LOCAL_MODULE_STEM := simg2img
 | 
			
		||||
LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin
 | 
			
		||||
LOCAL_MODULE_TAGS := optional
 | 
			
		||||
LOCAL_SHARED_LIBRARIES := \
 | 
			
		||||
    libsparse \
 | 
			
		||||
    libz
 | 
			
		||||
LOCAL_CFLAGS := -Werror
 | 
			
		||||
include $(BUILD_EXECUTABLE)
 | 
			
		||||
		Reference in New Issue
	
	Block a user