在编译Android代码时,有时想使用一个宏控制各个模块的功能开关(preloader、lk、kernel、android)。但是Android? device下的project config mk配置默认只对android的代码有效。如果想全局有效,需要修改Google的默认设计。
我们可以使用环境变量来实现,需要做的就是将环境变量转换为代码可使用的宏定义。
kernel默认的宏定义就是Kconfig文件的定义,而且Kconfig文件是可以读取到系统环境变量的。
实例:
导出环境变量 export BUILD_TEST=yes
首先将环境变量转换为config
再根据config控制模块编译
Kconfig修改:
config ENV_BUILD_TEST
string
option env="BUILD_TEST"
config LED_TEST
bool "led test build"
default y if ENV_BUILD_TEST="yes"
C文件修改:
#ifdef CONFIG_ENV_BUILD_TEST
printk("test");
#endif
如果C文件需要使用一个宏定义判断多个值,也是可以的,但是就必须将环境变量的值写为1,2,3等自然数。因为代码中条件编译判断值只支持数字,不支持字符串
例如:
export BUILD_TEST=1
Kconfig修改:
config ENV_BUILD_TEST
string
option env="BUILD_TEST"
config LED_TEST
bool "led test build"
default y if ENV_BUILD_TEST!=""
C代码:
#if (CONFIG_ENV_BUILD_TEST==1)
prink("1")
#elif (CONFIG_ENV_BUILD_TEST==2)
prink("2")
#endif
|