Android编译系统分析之几个关键点(二)
Android 编译系统解析系列文档
编译系统入口envsetup.sh解析
解析lunch的执行过程以及make执行过程中include文件的顺序
关注一些make执行过程中的几个关键点
对一些独特的语法结构进行解析
这篇文章的主要内容我们来分析关于BoardConfig.mk的一些关键的知识点
BoardConfig概览
BoardConfig 顾名思义,主要是配置一些Board(平台级)相关的东西,大致涉及的内容有arch架构(32还是64位),CPU的类型,Bootloader,Kernel,RadioImage等是否定义预编译,还有内核的一些page大小,固定的地址偏移等内容,总的来说,这个文件的主要内容就是定义一些与硬件相关的配置
使用方法
BoardConfig.mk文件的使用方法很简单,只需要在Android编译系统指定的三个位置创建BoardConfig.mk
这个名称的文件即可
使用范围
BoardConfig.mk文件的使用位置有三个build, device, vendor,不过文件的存在需要唯一,为什么是这三个位置,我们在稍后的解析中就可以看到
BoardConfig解析
关于BoardConfig.mk文件的解析的代码很短,所有代码只有20行多一点
1 | # Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE) |
从解析前的注释中,我们能简单的看出BoardConfig文件的存放位置:$(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)
其中SRC_TARGET_DIR在config.mk文件中已经定义,指向build/target
也就是说Android编译系统允许的BoardConfig.mk存在的位置有三个
- build/target/board/$(TARGET_DEVICE)
- vendor/*/$(TARGET_DEVICE)
- device/*/$(TARGET_DEVICE)
这三个位置除了固定深度4层之外,还指定了TARGET_DEVICE
的限制,这个TARGET_DEVICE
的内容是什么,如果你看过之前关于lunch的解析,你应该明白,这个值就是我们自己在product_makefile文件中定义的PRODUCT_DEVICE
这个值
Android编译系统要求这个文件是唯一的,所以在获取这三个位置的BoardConfig.mk之后,我们需要告诉使用者只需要一个BoardConfig.mk文件,然后加载这个BoardConfig.mk文件即可
当然,从代码实现的角度来说,实现多个BoardConfig.mk文件同时加载也没有问题,但是从代码维护的角度来说,这样不利于这部分配置文件的维护,所以还是放在一个文件内比较好
在加载完这个文件之后,我们还通过这个文件定义了一个变量TARGET_DEVICE_DIR
,我们将BoardConfig.mk文件存在的位置作为了我们后边要加载其他内容的目录,主要是用来作为kernel预编译以及一些信息的文件
至此,关于BoardConfig.mk文件的加载我们也已经解析完了
总结
- BoardConfig.mk文件的定义远远没有AndroidProduct.mk文件复杂,毕竟一个成型的Product,平台级别的配置基本已经定型了,我们无需要再做复杂的配置
- 我们可以看到对于一个Product可以有三个可选的位置放BoardConfig.mk文件,所以对于无法确定目标机型在哪个位置存放了这个配置文件,我们可以通过输出
TARGET_DEVICE_DIR
的值来判断
Android编译系统分析之几个关键点(二)
http://www.0xforee.top/2015/12/28/android-build-system-keypoint-second/