Android openplatform 编译系统粗略学习笔记

时间:2022-01-14 16:28:14

 

框架:

 在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解压文件。

该文件信息量太大,需要后期抓时间补充。