自己添加的一个新项目在编译过程中发现 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
默认情况下 TARGET_USERIMAGES_USE_EXT[234] 是没有定义的,也就是说默认情况下是把 system.img编译成 yaffs2 文件系统
如果有需要,可以 在BoardConfig.mk 加入 TARGET_USERIMAGES_USE_EXT4:= true, 从而把 system.img 编译成为 ext4 文件系统, 修改之后,注意 init.rc 处 mount system.img 也要修改为 ext4.
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.