框架:
在openplatform 目录下:执行make -->调用Openplatform/Makefile
Makefile 包括 sdk/build/core/Main.mak
细节:
Main.mak 文件:
-->include config.mak
-->include sysconfig_version.mak
1. 通过git获取平台(platform)目前的修正版本。
2. 进入内核目录,获取当前的修正版本。
3. 设置当前的设备名为 gplus
4. 获取当前主机存在多少个cpu
5. 当编译 make openplatform 时, 会依次编译chkconfig,buildspec,sdk,以及product。
6. 当编译 make clean 时,会依次编译product_clean, sdk_clean
7. 当编译make all 时,会依次编译android_version, buildspec,android,kernel, sdk,product。
8. 当编译make all_clean 时,会依次编译kernel_clean, android_clean, product_clean, 及sdk_clean。
9. 当然在每次编译时,都会检测当前的系统编译版本,与设置版本是否一致,这个部分应该是系统重新配置的时候,或者说第一次配置的时候,有很多选项是需要重新配置的。
10. 查看sdk/os 目录下是否存在kernel目录。
11. Firstwork shell部分需要查询一下,这里会检测是否会有新的分支。
12. 检测产品生成目录东东,具体细节不详,待学习。
13. 输出配置的,产品,目标平台,主机,内核目录,内核版本,平台版本,另外还设置了,android分支变量,android时间并产生version.h 头文件。
14. 当编译make config 时,会调用配置界面,包括目标平台,平台的一些具体硬件支持特性,这个部分细节如何实现,还待学习。
15. Config_clean删除out 目录,并且删除产品配置的mak文件,这个文件应该是我们在第一次配置的时候,我们选择的产品特性。
16. Switch 不知道到底做了什么事情。
17. Atouch 清除android 平台相关的模块,进入anroid目录,配置envsetup.sh 里面的类似mm,mmm等函数,并选择启动的生成目标。
18. Android 主要是设置环境的变量,包括source build/envsetup.sh及lunch 对应的选项,并且会去执行make clean。
19. 设置andorid 生成目标机的一些系统目录,包括etc/obj等。
20. 设置修订的时间,分支,以及远端情况。这里再次使用了sed,sed这个部分必须学习一下。
21. Kernel 部分,主要是删除kernel 的生成目录,并重新编译,并将新生成的镜像文件拷贝到新建的kernel输出目录中去,并且还做
22.Kernel_clean 主要是进入kernel 源代码位置,执行make clean
23. sdk 编译sdk, 进入sdk 目录,然后执行make all
24. 进入sdk目录,然后执行make clean,并删除sdk 的host目录。
25. product 主要是进入product 目录,并执行make -j 加上cpu的核数。
26. product_clean 同之前的clean 一样。
27. firmware 应该是进入product 的目录,然后进行编译,目标不知道是不是我们的firmware.bin 文件。
28.openplatform_release 这个部分,不知道做了什么,需要进入script/openplatform_release.sh文件进行查看。
29. kernel_release
在这里会判断最开始设置的是83000,还是3502 ic。
30. kernel_unpack 进入sdk/os 目录,对kernel_patch 进行打包,执行patch_kernel.sh(这个需要详细看一下),删除kernel_patch 目录。
31.updater_release
新建outdater_release 目录,新建outdater_release/product 目录。
执行updater_release.sh,不知道到底做了什么,需要执行查看。
Config.mk 设置当前平台的一些配置变量。
->include product_config.mk
->include buildspec.mk
->include envsetup.mk 主要设置用户的编译全局变量
->include defination.mk 标准的编译系统定义
->include HOST_linux – x86.mk 主要设置编译工具的相关信息。
1. 配置使用/bin/sh
2. 设置编译系统的路径BUILD_SYSTEM
3. 设置产品相关的生成文件的存放路径
4. 设置SDK/BIN 等对应的生成文件的存放目录。
5. 设置编译系统的内部文件,主要作用是:清理变量,生成对应的app, 主机静态库,共享库,以及可执行文件,打包,java对应的库,复制头文件,anroid 文档生成等。
6. 设置内核生成文件的存放目录,包括Image文件,ko文件,根文件系统等。(initramfs需要查一下)
7. 设置在编译过程中的提示字符串变量,比如AR, CC, LD, 编译是否成功公用信息。
8. 编译生成.c.o 文件,编译生成.S.o文件, (这里需要查询一下,makefile中 @ $符号的使用情况,以及echo $@的具体含义)
Sysconfig_version.mak
1. 配置编译系统版本
product_config.mk
其仅仅是设置一个product 变量,product 变量由公司,android版本,面向的产品等等组成。
buildspec.mk 文件
1. 设置编译变量,user, debug, eng 三种。
2. 设置默认安装模块
3. 设置TARGET_BUILD_TYPE, 设置为调试版本,或者发布版本。
4. 设置可以打开debug 的模块。
5. 设置工具链的前缀。
6. 设置输出目录
Definitions.mk 文件:
1. 主要包括: ALL_DOCS ,ALL_MODULES, ALL_DEFAULT_INSTALLED_MODULES,ALL_MODULE_TAG 等。
2. 一些常用的宏my-dir, true-or-empty, print-vars,all-makefiles-under,all-java-files-under等,这个部分需要学习一下makefile的一些规则。
3. Transform-aidl-to-java,这不就是将aidl 转化为对应的java文件么。
4. Transform-host-c-or-s-to-o-no-deps将.c及.s文件编译成目标文件。
5. Transform-host-o-to-static-lib这不就是将目标文件打包成静态库么。
6. Transform-o-to-share-lib将目标文件打包成共享库。
7. Transform-o-to-executeable-inner生成可执行文件。
8. Unzip-jar-files解压文件。
该文件信息量太大,需要后期抓时间补充。