Android编译环境,lunch的时候会进行product和variant的选择,比如说lunch xxx-eng得到的结果如下:
1 | victor@victor-HP:~/master$ lunch xxx-eng |
因此我们可以取得几个环境变量,TARGET_BUILD_VARIANT=eng和TARGET_PRODUCT=xxx,输入env命令就可以查看当前系统当前shell下的环境变量。我们想根据TARGET_BUILD_VARIANT的值为eng或者user来选择在uboot或kernel中开关某个功能。
解决思路:
在lunch后我们可以获得TARGET_BUILD_VARIANT的值,判断其为eng或者user,然后相应的export出一个环境变量,最后在uboot或kernel中的Makefile中判断环境变量传递相应的宏。
export环境变量
在build/envsetup.sh文件中的function lunch()函数的最后添加如下判断。
1 | unset ENABLE_ALL_CONSOLE |
function lunch()的函数是用户执行lunch xxx-eng调用的,unset ENABLE_ALL_CONSOLE是为了清除上次残留的环境变量,在这里我们增加对$product和$variant的判断。
在Makefile中添加环境变量的判断,如下:
1 | ifeq ($(ENABLE_ALL_CONSOLE),true) |
往KBUILD_CPPFLAGS中的变量添加-DCONFIG_ENABLE_ALL_CONSOLE的值。KBUILD_CPPFLAGS在编译kernel或uboot的时候会传递给gcc编译器,而gcc编译器支持-D的参数,用于定义一个宏。这样,我们就可以在uboot或kernel中的代码使用CONFIG_ENABLE_ALL_CONSOLE的宏了。
1 | -D name |