1. 程式人生 > 實用技巧 >Android 編譯系統 defconfig檔案的確定

Android 編譯系統 defconfig檔案的確定

Android 編譯系統 defconfig檔案的確定

背景

經常在驅動改動的時候,同時改動2個檔案,才知道他們分別對應不同的編譯結果。

路徑 對應版本
kernel/msm-4.4/arch/arm64/configs/sdm660_defconfig debug版本
kernel/msm-4.4/arch/arm64/configs/sdm660-perf_defconfig user 版本

解析

1)命令執行追溯

source build/envsetup.sh

執行envsetup.sh指令碼,把(TARGET_DEVICE)/BoardConfig.mk包含了進來:

function gettop () {
	local TOPFILE=build/core/envsetup.mk
	# ...
}

build/core/envsetup.mk:
board_config_mk := \
    $(strip $(sort $(wildcard \
    $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)/BoardConfig.mk \
    $(shell test -d device && find -L device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
    $(shell test -d vendor && find -L vendor -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \
)))

BoardConfig.mk中有如下內容:

ifeq ($(KERNEL_DEFCONFIG),) # 如果make命令中未指定KERNEL_DEFCONFIG的值,則在此處指定它的值
	ifeq ($(TARGET_BUILD_VARIANT),user)
		KERNEL_DEFCONFIG := msm8909-1gb-perf_defconfig
	else
		KERNEL_DEFCONFIG := msm8909-1gb_defconfig
	endif
endif

include kernel/AndroidKernel.mk

2)檢視Kernel/AndroidKernel.mk

KERNEL_HEADER_DEFCONFIG := $(strip$(KERNEL_HEADER_DEFCONFIG))

ifeq ($(KERNEL_HEADER_DEFCONFIG),)
	KERNEL_HEADER_DEFCONFIG:= $(KERNEL_DEFCONFIG)
endif

KERNEL_OUT :=$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ
KERNEL_CONFIG :=$(KERNEL_OUT)/.config       #----目標檔案

$(KERNEL_CONFIG): $(KERNEL_OUT)
$(MAKE) -C kernel O=../$(KERNEL_OUT)ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG)
$(hide) if [ ! -z"$(KERNEL_CONFIG_OVERRIDE)" ]; then /
echo "Overridingkernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; /
echo$(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; /
$(MAKE) -C kernelO=../$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE)oldconfig; fi

3)kernel/scripts/kconfig/Makefile

%_defconfig: $(obj)/conf
	$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)

在編譯核心時執行上述命令生成.config檔案,該命令展開後如下所示:

scripts/kconfig/conf --defconfig=arch/arm64/configs/.msmxxx_defconfig Kconfig

其中.msmxxx_defconfig的值就是KERNEL_DEFCONFIG的值