Android Kernel如何确定使用哪个defconfig文件?
答案:
device/厂商名/项目名/AndroidBoard.mk 决定了使用哪个def_config文件
1. 项目控制的AndroidBoard.mk
以device/qcom/sm6150/AndroidBoard.mk为例子
因为KERNEL_DEFCONFIG被定义为sdmsteppe-perf_defconfig、sdmsteppe_defconfig文件,所以kernel编译时会使用这两个中的一个。
#----------------------------------------------------------------------
# Compile Linux Kernel
#----------------------------------------------------------------------
ifeq ($(KERNEL_DEFCONFIG),)
ifeq ($(TARGET_BUILD_VARIANT),user)
KERNEL_DEFCONFIG := vendor/sdmsteppe-perf_defconfig
else
KERNEL_DEFCONFIG := vendor/sdmsteppe_defconfig
endif
endif
而TARGET_BUILD_VARIANT变量是在Android编译系统中定义的
这个变量决定了编译的是userdebug还是eng版本
也会决定具体是使用sdmsteppe-perf_defconfig,还是sdmsteppe_defconfig文件
2. 控制kernel编译的AndroidKernel.mk
在内核源码中的kernel/msm-4.14/AndroidKernel.mk文件确定了具体使用哪个config文件
ifeq ($(shell echo $(KERNEL_DEFCONFIG) | grep vendor),)
KERNEL_DEFCONFIG := vendor/$(KERNEL_DEFCONFIG)
endif