分类: LINUX
2011-03-29 10:11:07
设定BUILD_TINY_ANDROID=true , building system 产生一个简单的image , 以测试硬体的可用度。 此功能用于移植的早期阶段,以快速bring up
[66:bring up ..todo]
HOST_BUILD_TYPE 和TARGET_BUILD_TYPE 指定building system 产生binary 的目的为debug 或release 。 透过设定此二变数,能产生包含debug information 的binry 。
66:当前是了解,浅
=========================================================================
Product 设定的读取
product的设定来自于build/target/product/AndroidProduct.mk和vendor子目录下的AndroidProduct.mk 。
building system透过find指令,找出所有可能的AndroidProduct.mk。
AndroidProduct.mk里定义PRODUCT_MAKEFILES变数,列举所有实际定义product的makefile。
这些makefile各自定义独立的product 。 product相关参数,存成PRODUCTS..形式的变数。
并将makefile 路径存在PRODUCTS 变数。 因此,透过PRODUCTS 能取得所有的product 路径/名称, 并透过PRODUCTS..形式的变数取得内容。
Board Level 设定
和目标平台主板相关之设定,例如使用了什么装置、driver 等,或是是否需要编译bootloader 、 kernel 等,都是在BoardConfig.mk 里设定。 同样,每张主板可以有不同设定,存在不同目录下的BoardConfig.mk ,以find 寻找如下档案:
TARGET_DEVICE 是product 所定义,因此同一个BoardConfig.mk 可被多个product 所使用。 一个TARGET_DEVICE ,通常只有一个BoardConfig.mk 。 BoardConfig.mk 会被直接include 到building system 的name space 里。 因此,一些module 的enable/disable ,可以在BoardConfig.mk 以对映不同的主板。
Rules
在module的定义档 .mk里,可定义module的tag, LOCAL_MODULE_TAGS,以分类这些module。 每一个product可以指定需要的tag (PRODUCT_TAGS),使building system只编译标示这些tag的module。 在build/core/main.mk里,所有标示特定tag的module收集为ALL_DEFAULT_INSTALLED_MODULES ,并include build/core/Makefile处理。
build/core/Makefile 为这些module 产生rule ,并使产生image 的goal depend on 这些rule ,使这些module 被编译。
结论
的building system其实不是那么复杂。 在了解之后,也不是那么难修改。 但, GNU make的一些语法,所building system使用一些不是那么直觉的用法,使的building system较难了解。 但,花点心思就能克服。