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 |