1 make_ext4fs -l 268435456 -a system out/target/product/Mary/system.img.ext4 out/target/product/Mary/system 2 Creating filesystem with parameters: 3 Size: 167772160 4 Block size: 4096 5 Blocks per group: 32768 6 Inodes per group: 5120 7 Inode size: 256 8 Journal blocks: 1024 9 Label: 10 Blocks: 40960 11 Block groups: 2 12 Reserved block group size: 15 13 error: do_inode_allocate_extents: Failed to allocate 119 blocks 14 15 make: *** [out/target/product/Mary/obj/PACKAGING/systemimage_intermediates/system.img] 错误 4 16 make: *** 正在删除文件“out/target/product/Mary/obj/PACKAGING/systemimage_intermediates/system.img”
这个错误是由于增加了预置apk,导致system.img超过了分配的空间大小导致的。
修改device/softwinner/crane-gm-g9/BoardConfig.mk里BOARD_SYSTEMIMAGE_PARTITION_SIZE的大小为536870912,即把.img的文件大小从256M扩展为512M。在我们系统里,除了要修改此处,还要修改打包配置文件:lichee3.0/tools/pack/chips/sun4i/configs/crane/gm-g9/sys_config.fex把partition user/data的空间缩小,把system的空间开大(打包系统以后再记录)。
2. 为什么把apk放在目录device/softwinner/crane-gm-g9/pre/下就能把apk预置到系统呢?
首先看一下device/softwinner/crane-gm-g9/下面的几个mk文件:
find $(2) -name "$(1)" | $(SED_EXTENDED) "s:($(2)/?(.*)):\\1\\:$(3)/\\2:" | sed "s://:/:g"
3.BOARD_SYSTEMIMAGE_PARTITION_SIZE在哪里起作用呢?
在 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) -f $(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)
由上面代码可知,当需要生成ext格式的img时,会读入这个宏变量来生成system.img,否则生成yaffs2文件。