对两个命令的分析如下:
1/ . ./ccicenv/pid_env设置编译环境以及编译参数:
2/ make命令:
MSM的make命令全都需要在源码根目录下执行,直接查找整个./build/core/目录会找到很多PHONY目标。
简单介绍一部分如下:
>>make droid
默认的make对象,会编译整个Android系统
>>make aboot
编译bootloader
>>make bootimage
相当于把bootloader和kernel都编译出来然后合并成boot.img
>>make apps_only
只编译自带的应用
>>make docs
只编译文档
>>make SDK
只编译SDK
>>make checkapi
检查API
>>make update-api
根据API更新current.xml
>>make [lib-name]
编译某个由于LOCAL_MODULE标注的库,源代码所在目录中需要有Android.mk
eg:make libaudio
>>make clean
清除build的输出
>>make kernel
编译linux kernel,FSL平台是在./kernel/目录下执行,而MSM平台是在根目录下执行。
在./kernel/目录下执行make mrproper来清除linux内核的编译。
>>make kernelconfig
配置内核选项,FSL平台是在./kernel/目录下执行,而MSM平台是在根目录下执行。
重点分析一下linux kernel层的几个make目标,它们都是在./kernel/AndroidKernel.mk里面定义的。
其中kernelconfig的目标定义为:
kernelconfig: $(KERNEL_OUT) $(KERNEL_CONFIG)
env KCONFIG_NOTIMESTAMP=true \
$(MAKE) -C kernel O=../$(KERNEL_OUT) ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
cp $(KERNEL_OUT)/.config kernel/arch/arm/configs/$(KERNEL_DEFCONFIG)
其依赖定义为:
$(KERNEL_OUT):
mkdir -p $(KERNEL_OUT)
$(KERNEL_CONFIG): $(KERNEL_OUT)
$(MAKE) -C kernel O=../$(KERNEL_OUT) ARCH=arm CROSS_COMPILE=arm-eabi- $(KERNEL_DEFCONFIG)
因此,如果想在./kernel/目录下运行make menuconfig,根据项目的配置将上述脚本展开为:
mkdir -p ./out/target/product/pid/obj/KERNEL_OBJ
make -C kernel O=../out/target/product/pid/obj/KERNEL_OBJ/ ARCH=arm CROSS_COMPILE=arm-eabi- pid_defconfig
env KCONFIG_NOTIMESTAMP=true
make -C kernel O=../out/target/product/pid/obj/KERNEL_OBJ/ ARCH=arm CROSS_COMPILE=arm-eabi- menuconfig
(其中pid为产品名称)
如果不需要拷贝配置的结果,则最后cp那句。