zoukankan      html  css  js  c++  java
  • 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的值

  • 相关阅读:
    车辆年检、强险、车船税的关系
    .Net下几种ORM
    Windows 刷新图标命令
    VUE-CLI + AntV G6 兼容IE11
    CentOS 7 下安装 JIRA 8.7 和 Confluence 7.3
    .Net Core,VUE,VS Code,Sql Sugar,Element UI学习笔记
    Nginx 缓存代理
    java对象锁和类锁
    线程的生命周期
    数据库分库分表
  • 原文地址:https://www.cnblogs.com/schips/p/how_to_local_the_deconfig_in_android_building_system.html
Copyright © 2011-2022 走看看