Linux内核defconfig在哪,如何确定使用的kernel defconfig和dts配置文件 比较实用 新手福利...

如何确定Dragonboard410c使用的kernel defconfig和dts配置文件

展开

各个平台内核defconfig配置文件一般都是在kernel/arch/arm64/configs/目录下,但往往这个目录下放了好几个项目的defconfig文件,那我们如何找到自己项目的对应defconfig文件呢?

一般我们编译前都会输入下面两条命令:

source build/envsetup.sh

lunch msm8916_64-userdebug

我们可以看到TARGET_PRODUCT=msm8916_64,我们直接去搜这个项目名

在这个目录下可以找到AndroidBoard.mk文件,打开可以发现

从前面知道TARGET_BUILD_VARIANT=userdebug,因此可以确定Dragonboard410c的defconfig配置文件是msm_defconfig

那对应的DTS文件又是哪些呢?

找高通平台的dts文件最直接简单的方法是直接看开机kernel log

过滤关键字

打开apq8016-sbc.dts文件

再打开include进来的apq8016-sbc.dtsi文件

这样,其他的dtsi文件也找到了。

补充:

高通平台defconfig文件的确定



(1)命令执行追溯

Source build/envsetup.sh

执行envsetup.sh脚本,把(TARGET_DEVICE)/BoardConfig.mk包含了进来:

build/envsetup.sh:

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的值

————————————————

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文件

e9a67a0a6cfa38ab2ca7dee0b7ab9a6a.png

2. 控制kernel编译的AndroidKernel.mk

在内核源码中的kernel/msm-4.14/AndroidKernel.mk文件确定了具体使用哪个config文件

ifeq ($(shell echo $(KERNEL_DEFCONFIG) | grep vendor),)

KERNEL_DEFCONFIG := vendor/$(KERNEL_DEFCONFIG)

endif

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值