.config生成

这篇博客详细介绍了Linux内核配置文件.config的生成步骤。从执行envsetup.sh开始,解析BoardConfig.mk,到Kernel/AndroidKernel.mk中确定KERNEL_DEFCONFIG,接着使用scripts/kconfig/Makefile和conf工具进行配置。最后在kernel/makefile及相关makefile.build文件中编译生成.conf文件,整个过程涉及到了配置文件的合并和依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)命令执行追溯

Sourcebuild/envsetup.sh

 

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

build/envsetup.sh:628:    localTOPFILE=build/core/envsetup.mk

-->build/core/envsetup.mk:161:          $(shell test -d device && find device -maxdepth 4 -path '*/$(TARGET_DEVICE)/BoardConfig.mk') \

 

下面为里面的内容

CPXXX/AndroidBoard.mk:34:includekernel/AndroidKernel.mk

 

device/yulong/CPXXX/AndroidBoard.mk

 

 21 ifeq ($(KERNEL_DEFCONFIG),)

 22    ifeq ($(TARGET_BUILD_VARIANT),user)

 23      KERNEL_DEFCONFIG := msm-perf_defconfig

 24    else

 25      KERNEL_DEFCONFIG:= msm_defconfig

 26    endif

 27 endif

 

(2)进入Kernel/AndroidKernel.mk

 24 KERNEL_HEADER_DEFCONFIG := $(strip$(KERNEL_HEADER_DEFCONFIG))

 25 ifeq ($(KERNEL_HEADER_DEFCONFIG),)

 26 KERNEL_HEADER_DEFCONFIG:= $(KERNEL_DEFCONFIG)

 27 endif

 

  50 KERNEL_OUT :=$(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ

 51 KERNEL_CONFIG :=$(KERNEL_OUT)/.config              //----------------------------目标文件

 

 99 $(KERNEL_CONFIG): $(KERNEL_OUT)

100         $(MAKE) -C kernel O=../$(KERNEL_OUT)ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG)

101         $(hide) if [ ! -z"$(KERNEL_CONFIG_OVERRIDE)" ]; then \

102                         echo "Overridingkernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \

103                         echo$(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \

104                         $(MAKE) -C kernelO=../$(KERNEL_OUT) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE)oldconfig; fi

 

(3)kernel/scripts/kconfig/Makefile

106 %_defconfig:$(obj)/conf

107         $(Q)bash$(srctree)/scripts/kconfig/yl_config.sh $@

108         $(Q)$<--defconfig=arch/$(SRCARCH)/configs/.$@ $(Kconfig)

 

由上面可知需要依赖scripts/kconfig/conf

 

(4)scripts/kconfig/conf工具生成如下:

156 conf-objs       := conf.o  zconf.tab.o

157 mconf-objs     := mconf.o zconf.tab.o $(lxdialog)

158 nconf-objs     := nconf.o zconf.tab.o nconf.gui.o

159kxgettext-objs  := kxgettext.ozconf.tab.o

160qconf-cxxobjs   := qconf.o

161 qconf-objs      := zconf.tab.o

162 gconf-objs      := gconf.o zconf.tab.o

163

164 hostprogs-y := conf

 

5)进入kernel/makefile

 793 export KBUILD_ALLDIRS := $(sort$(filter-out arch/%,$(vmlinux-alldirs)) arch Documentation include samples scripts tools virt)

进入kernel/scripts/makefile.build

114 ifneq($(hostprogs-y)$(hostprogs-m),)

115 include scripts/Makefile.host

116 endif

 

(6)进入scripts/Makefile.host

33 __hostprogs :=$(sort $(hostprogs-y) $(hostprogs-m))

//---------------为conf

45 host-cobjs      := $(sort $(foreachm,$(__hostprogs),$($(m)-objs)))

//----------------conf.o zconf.tab.o

 

125quiet_cmd_host-cmulti   = HOSTLD  $@

126       cmd_host-cmulti   = $(HOSTCC) $(HOSTLDFLAGS) -o $@ \

127                           $(addprefix$(obj)/,$($(@F)-objs)) \

128                           $(HOST_LOADLIBES)$(HOSTLOADLIBES_$(@F))

129 $(host-cmulti):$(obj)/%: $(host-cobjs)$(host-cshlib) FORCE

130         $(call if_changed,host-cmulti)

 

(7)回到kernel/scripts/kconfig/Makefile

$(Q)$<--defconfig=arch/$(SRCARCH)/configs/.$@ $(Kconfig)

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

 

需要了解多有的kconfig如何合在一起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值