Android image 文件系统

       自己添加的一个新项目在编译过程中发现 sytem.ima 文件大小超标,网上已经有很多接这个问题的方法 (修改 BOARD_SYSTEMIMAGE_PARTITION_SIZE 的尺寸, BOARD_USERDATAIMAGE_PARTITION_SIZE ), 仔细的看看发现 system.img 编译成了 ext4 而不是 yaffs2,查看了一下 build 系统的Makefile。
1. 在 buildi/core/Makefile 中有如下的代码,如果 INTERNAL_USERIMAGES_USE_EXT 为 true 则编译 ext 文件系统,反之编译 yaffs2
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) -f $(mkyaffs2_extra_flags) $(TARGET_OUT) $(1)
endef
endif # INTERNAL_USERIMAGES_USE_EXT


2. 查看了一下 INTERNAL_USERIMAGES_USE_EXT 在Makefile 中的定义:

  
INTERNAL_USERIMAGES_EXT_VARIANT :=
   ifeq ($(TARGET_USERIMAGES_USE_EXT2), true)
      INTERNAL_USERIMAGES_USE_EXT := true;
      INTERNAL_USERIMAGES_EXT_VARIANT :=ext2
   else
   ifeq ($(TARGET_USERIMAGES_USE_EXT3), true)
      INTERNAL_USERIMAGES_USE_EXT := true
      INTERNAL_USERIMAGES_EXT_VARIANT :=ext3
   else
   ifeq ($(TARGET_USERIMAGES_USE_EXT4, true)
      INTERNAL_USERIMAGES_USE_EXT := true
      INTERNAL_USERIMAGES_EXT_VARIANT :=ext4
   endif
   endif
   endif


 默认情况下 TARGET_USERIMAGES_USE_EXT[234] 是没有定义的,也就是说默认情况下是把 system.img编译成 yaffs2 文件系统
 如果有需要,可以 在BoardConfig.mk 加入 TARGET_USERIMAGES_USE_EXT4:= true, 从而把 system.img 编译成为 ext4 文件系统, 修改之后,注意 init.rc 处 mount system.img 也要修改为 ext4.

     

你可能感兴趣的:(Android image 文件系统)