1. android (ICS)模拟器里的system.img
用unyaffs工具,可以解压出system目录文件
参考:http://blog.csdn.net/tuhuolong/article/details/6397085
2.MTK android ICS 或 GB 编译出的system.img
用simg2img工具,转换后,可以挂载成ext4分区。
参考:http://hi.baidu.com/love_yuoyuo/item/0aceeb8ad6f1a9c0ef083d8a
3.mlogic android ICS编译出的system.img
还没有找到解压的方法。
通过查看编译脚本,可以发现,打包工具被amlogic做了更改:
device/amlogic/f16ref/BoardConfig.mk
# Recovery TARGET_USE_AMLOGIC_MKYAFFS_TOOL := true TARGET_AMLOGIC_MKYAFFSIMG_TOOL := mkyaffsimage4K.dat TARGET_AMLOGIC_KERNEL := $(PRODUCT_OUT)/uImage TARGET_AMLOGIC_RECOVERY_KERNEL := $(PRODUCT_OUT)/uImage_recovery
build/core/config.mk
ifeq ($(TARGET_USE_AMLOGIC_MKYAFFS_TOOL),true) MKYAFFS2 := $(HOST_OUT_EXECUTABLES)/$(TARGET_AMLOGIC_MKYAFFSIMG_TOOL) else MKYAFFS2 := $(HOST_OUT_EXECUTABLES)/mkyaffs2image$(HOST_EXECUTABLE_SUFFIX) endif # TARGET_USE_AMLOGIC_MKYAFFS_TOOL == true
build/core/Makefile
ifeq ($(INTERNAL_USERIMAGES_USE_EXT),true) ## generate an ext image # $(1): output file define build-systemimage-target @echo "Target system fs image: $(1)" $(call build-userimage-ext-target,$(TARGET_OUT),$(1),system,$(INTERNAL_USERIMAGES_EXT_VARIANT),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE)) endef else # INTERNAL_USERIMAGES_USE_EXT != true ## generate a yaffs2 image # $(1): output file define build-systemimage-target @echo "Target system fs image: $(1)" @mkdir -p $(dir $(1)) $(hide) $(MKYAFFS2) $(mkyaffs2_extra_flags) $(TARGET_OUT) $(1) endef endif # INTERNAL_USERIMAGES_USE_EXT $(BUILT_SYSTEMIMAGE): $(FULL_SYSTEMIMAGE_DEPS) $(INSTALLED_FILES_FILE) $(call build-systemimage-target,$@) INSTALLED_SYSTEMIMAGE := $(PRODUCT_OUT)/system.img SYSTEMIMAGE_SOURCE_DIR := $(TARGET_OUT)
$(INSTALLED_SYSTEMIMAGE): $(BUILT_SYSTEMIMAGE) $(RECOVERY_FROM_BOOT_PATCH) | $(ACP) @echo "Install system fs image: $@" $(copy-file-to-target) $(hide) $(call assert-max-image-size,$@ $(RECOVERY_FROM_BOOT_PATCH),$(BOARD_SYSTEMIMAGE_PARTITION_SIZE),yaffs) systemimage: $(INSTALLED_SYSTEMIMAGE)
以上是编译systemimage的脚本。可以大概看出,systemimage基本上要么是ext格式,要么是yaffs格式。
只不过有些厂家把yaffs打包格式做了修改,所以导致不能用unyaffs工具解包的情况。
上面的是没有定义EXT格式的,所以用的是yaffs的打包工具。而MTK的则定义了EXT4格式,所以采用的是make_ext4fs(源码:system/extras/ext4_utils/)的打包工具。
脚本如下:
# eMMC support ifeq ($(MTK_EMMC_SUPPORT),yes) TARGET_USERIMAGES_USE_EXT4:=true TARGET_USERIMAGES_SPARSE_EXT_DISABLED := false endif