本文转载自:https://blog.csdn.net/ttxgz/article/details/7542380

1. 系统需要,把需要预置在系统的所有apk放在目录 device/softwinner/crane-gm-g9/pre/下,在编译android源码时,出现下面错误: 
 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文件:

AndroidBoard.mk
           只定义了LOCAL_PATH, 为当前目录 device/softwinner/crane-gm-g9

crane-gm-g9.mk
           定义宏PRODUCT_COPY_FILES, 加上了很多idc, rle, fstab,xml,init.rc等文件,也包含了当前目录下的所有apk;
                  -> 调用 find-copy-subdir-files(), 生成copy file的语义,而查看build/core/product_config.mk, 宏的定义如下:
    
         find $(2) -name "$(1)" | $(SED_EXTENDED) "s:($(2)/?(.*)):\\1\\:$(3)/\\2:" | sed "s://:/:g"

举个例子,例如:
                     PRODUCT_COPY_FILES +=  $(call find-copy-subdir-files, *.apk, *(LOCAL_PATH)/pre, system/preinstall)

如果device/softwinner/crane-gm-g9/pre下有a.apk,b.apk,那么上述调用等价于:

PRODUCT_COPY_FILES += device/softwinner/crane-gm-g9/a.apk:system/preinstall/a.apk \
                                                        device/softwinner/crane-gm-g9/b.apk:system/preinstall/b.apk

所以,PRODUCT_COPY_FILES是定义了所有需要copy到生成系统时需要copy的文件。把预置的apk放在device/softwinner/crane-gm-g9/pre/,相当于把apk放在生成系统的system/preinstall下。

定义宏PRODUCT_PROPERTY_OVERRIDES, 定义了语言,区域等persist的内容

BoardConfig.mk
           硬件和kernel相关的宏,例如CMDLINE,SYSTEMIMAGE_PARTITION_SIZE, sensor, wifi, gps, kernel base等设置

AndroidProducts.mk
           定义宏 PRODUCT_MAKEFILES为crane_gm_g9.mk

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文件。

关于BOARD_SYSTEMIMAGE_PARTITION_SIZE【转】的更多相关文章

  1. Android 某些配置记录

    1, system image 大小配置: devices/intel/baytrail/ffrd8/BoardConfig.mk :  BOARD_SYSTEMIMAGE_PARTITION_SIZ ...

  2. I.MX6 Android 5.1 快速合成系统

    /**************************************************************************** * I.MX6 Android 5.1 快速 ...

  3. Android系统Recovery工作原理之使用update.zip升级过程分析(一)

    通过分析update.zip包在具体Android系统升级的过程,来理解Android系统中Recovery模式服务的工作原理.我们先从update.zip包的制作开始,然后是Android系统的启动 ...

  4. Android常用的一些make命令(转载)--不错

    原文网址:http://blog.sina.com.cn/s/blog_abc7e49a01011y0n.html 1.make -jXX  XX表示数字,这个命令将编译Android系统并生成镜像, ...

  5. Android/Linux boot time优化

    基于analyze_boot.py分析Android/Linux的kernel boot时间 1.修改HiKey的BoardConfig.mk文件,使能initcall_debug,增加dmesg b ...

  6. 编译recovery及过程中的部分错误解决

    你必须使用32位或64位Ubuntu系统,关于如何建立编译环境和同步源码的指导,请自己查找有关指导的文章. 1, 安装所需要的包 2, 建立编译的环境,并同步CWM所需的源码,CyanogenMod源 ...

  7. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  8. Android/Linux boot time分析优化

    如果需要优化boot time,就需要一个量化的工具来分析每个阶段的时间消耗.这种类型的优化特别适合使用基于timeline的图表,有着明显的时间顺序.要求不但能给出整个流程消耗的时间,还要能对流程进 ...

  9. Android系统的镜像文件的打包过程

    在前面一篇文章中,我们分析了Android模块的编译过程.当Android系统的所有模块都编译好之后,我们就可以对编译出来的模块文件进行打包了.打包结果是获得一系列的镜像文件,例如system.img ...

随机推荐

  1. SQLSetConnectAttr

    SQLSetConnectAttr 函数定义: 用法类似于SQLSetEnvAttr,该函数是设置连接的各项属性用的 SQLRETURN SQLSetConnectAttr( SQLHDBC      ...

  2. Java集合-----Set详解

    Set是没有重复元素的集合,是无序的 1.HashSet HashSet它是线程不安全的       HashSet常用方法:   add(E element)  将指定的元素添加到此集合(如果尚未存 ...

  3. Java基础语法(三)

    七.方法 定义: 方法就是完成特定功能的代码块 在很多语言里面都有函数的定义 函数在Java中被称为方法 格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) { 函数体; ...

  4. npm 代理的设置和取消

    管理员权限下的控制台输入: 设置代理 npm config set proxy=http://127.0.0.1:8080 npm config set registry=http://registr ...

  5. Linux基础命令---显示域名ypdomainname

    ypdomainname   ypdomainname指令显示由函数“getdomainname”返回的主机域名,使用这个指令也可以设置一个主机NIS/YP域名. 此命令的适用范围:RedHat.RH ...

  6. VPS采用的几种常见技术(OVZ、Xen、KVM)介绍与对比

    很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ.Xen.KVM.Xen和HVM与PV. 在+XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用 ...

  7. bzoj4445 小凸想跑步

    题目链接 半平面交,注意直线方向!!! 对于凸包上任意一条边$LINE(p_i,p_{i+1})$都有$S_{\Delta{p_i} {p_{i + 1}}p} < S_{\Delta{p_0} ...

  8. python--表达式(运算表达式)

    运算表达式 python 的表达式包括:算术运算符,赋值运算符,比较运算符,成员运算符 算术运算符 运算符 描述 + 加 - 两个对象相加 - 减 - 得到负数或是一个数减去另一个数 * 乘 - 两个 ...

  9. SQL语句执行性能

    通过设置STATISTICS我们可以查看执行SQL时的系统情况.选项有PROFILE,IO ,TIME.介绍如下: SET STATISTICS PROFILE ON:显示分析.编译和执行查询所需的时 ...

  10. How to install john deere service advisor 4.2.005 on win 10 64bit

    How to install john deere service advisor 4.2.005 with the February 2016 data base disks on a machin ...