本文转载自: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. word之删除图标目录之间的空行

    在生成图表目录时,发现Office word图表目录中多个标题之间的空行无法删除,我是自己建的标签,比如“图1-”.“图2-”…….“表1-”.“表2-”…… 发现“图1-”.“图2-”…….“表1- ...

  2. 20155228 2016-2017-2 《Java程序设计》第1周学习总结

    20155228 2016-2017-2 <Java程序设计>第1周学习总结 教材学习内容总结 这部分内容是以教材为基础,根据个人的理解来描述的,有的地方的理解和表述可能不规范甚至不正确, ...

  3. canvas添加水印

    <canvas id="canvas"></canvas><canvas id="water"></canvas> ...

  4. (Review cs231n) Gradient Vectorized

    注意: 1.每次更新,都要进行一次完整的forward和backward,想要进行更新,需要梯度,所以你需要前馈样本,马上反向求导,得到梯度,然后根据求得的梯度进行权值微调,完成权值更新. 2.前馈得 ...

  5. c# 类的知识

    在英语中类(class)是分类(classification)的根词.设计类的过程就是对信息进行分类,将相关信息放到有意义的实体中. 封装的目的: 封装就是定义类的重要原则.中心思想是:使用类的程序不 ...

  6. 转:Image与byte之间互转

    #region<Image 与 byte之间互转> /// <summary> /// 将一个byte转换成一个Bitmap对象 /// </summary> // ...

  7. Android百大框架排行榜

    Android百大框架排行榜 15类Android通用流行框架 - 流风,飘然的风 - 博客园https://www.cnblogs.com/zdz8207/p/android-opensource- ...

  8. POJ 2492 A Bug's Life (并查集)

    Background Professor Hopper is researching the sexual behavior of a rare species of bugs. He assumes ...

  9. JMX堆栈分析

    线程堆栈: 线程堆栈也称线程调用堆栈,是虚拟机中线程(包括锁)状态的一个瞬间快照,即系统在某一个时刻所有线程的运行状态,包括每一个线程的调用堆栈,锁的持有情况.虽然不同的虚拟机打印出来的格式有些不同, ...

  10. python之常量和变量

    局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...