有如下需求
项目AIR与G30P用同一个LCD代码,但是两个项目的LCD代码稍有区别,现在是想在LCD中通过宏控制来达到AIR和G30P项目走不同代码
当然你可以给AIR和G30P项目将LCD代码分开,这不是此文讨论内容
MTK平台根据特定项目定义一个驱动中用到的宏方法
如想定义一个项目宏在Kernel/driver下这个宏都能在驱动代码中使用
按如下步骤
1:在kernel/drivers/Kconfig增加如下
config CUSTOM_PROJECT_NAME
string "CUSTOM_PROJECT_NAME"
2:在kernel的配置文件中添加如下
kernel-3.18/arch/arm64/configs/xxxx_debug_defconfig
kernel-3.18/arch/arm64/configs/xxxx_defconfig
CONFIG_CUSTOM_PROJECT_NAME="air_m65_5u"
3:在kernel/drivers/Makefile中增加如下
CUSTOM_PROJECT_NAME := $(addprefix -D, $(shell echo $(CONFIG_CUSTOM_PROJECT_NAME) | tr a-z A-Z))
subdir-ccflags-y += $(CUSTOM_PROJECT_NAME)
CUSTOM_PROJECT_NAME := $(addprefix -D, $(shell echo $(CONFIG_CUSTOM_PROJECT_NAME) | tra-z A-Z))
subdir-ccflags-y += $(CUSTOM_PROJECT_NAME)
//此shell echo $(CONFIG_CUSTOM_PROJECT_NAME) | tr a-z A-Z 作用是将调用shell中德echo和tr及管道将CONFIG_CUSTOM_PROJECT_NAME的值全改成大写
// $(addprefix prefix,namelist)是将namelist中得每一个都加上前缀prefix
$(warning wangchaoqun $(CUSTOM_PROJECT_NAME))
//此句话供调试用,可以在编译的log中搜索wangchaoqun看是否有 wangchaoqun -DAIR_M65_5U,有说明宏定义成功
这样就在kernel/drivers/目录下的驱动代码可以使用AIR_M65_5U这个宏了
如
#ifdef AIR_M65_5U
xxx
#else
xxx
#endif
同理对于lk的驱动只需要在
vendor/mediatek/proprietary/bootable/bootloader/lk/project/air_m65_5u.mk
加上
DEFINES += AIR_M65_5U
$(warning wangchaoqun $(DEFINES))
就可以在lk驱动中使用
#ifdef AIR_M65_5U
xxx
#else
xxx
#endif