uboot中 make xxx_config过程 defconfig

正文

make xxx_config实质上就是调用了

 

首先看MKCONFIG:

 

【注意】SRCTREE=源文件下的目录

之后的语句:

@(MKCONFIG)

(@:_config=) arm arm920t EmbedSky NULL s3c2440就相当于执行

#mkconfig xxx arm arm920t EmbedSky NULL s3c2440

#0

1  23  4

5  $6

于是乎就开始执行mkconfig;

 

[ "${BOARD_NAME}" ] 就是指明xxxx,上面的实例为100ask24x0

这里就会执行echo “Configuring for 100ask24x0 board...”

回到顶部

(1)建立软链接

之后就会执行:

 

ln -s asm-arm asm

【注意】

建立一个链接文件,为什么这么做呢?

在源文件中调用:

#include <asm/type.h>     //就相当于 include <asm-arm/type.h>

-------------------------------------------------------------------------

继续往下看:

 

 同样生成asm-arm/proc文件。

回到顶部

(2)生成config.mk文件

生成config.mk文件:

 

echo "ARCH = $2" > config.mk  //重定向

echo "CPU = $3"  >> config.mk  //追加到config.mk

echo "BOARD = $4" >> config.mk

之后由于5等于NULL,

6 = s3c2440,所以:

 

SOC = s3c24x0会定向到config.mk文件中;

config.mk内容:(在include文件夹中)

ARCH = arm

CPU = arm920t

BOARD = 100ask24x0

SOC = s3c24x0

回到顶部

(3)生成config.h

在uboot中APPEND = no

所以执行else分支的语句;

config.h也是在include文件夹中;

所以在config.h中的语句是:

 

查看配置命令执行过程具体打印

make mx6qsabresdandroid_config V=1

make -f ./scripts/Makefile.build obj=scripts/basic           1

rm -f .tmp_quiet_recordmcount                                        2

make -f ./scripts/Makefile.build obj=scripts/kconfig mx6qsabresdandroid_config     3

scripts/kconfig/conf  --defconfig=arch/../configs/mx6qsabresdandroid_defconfig Kconfig    4

执行过程分析

uboot顶层makefile

%config: scripts_basic outputmakefile FORCE

    $(Q)$(MAKE) $(build)=scripts/kconfig $@

scripts_basic:

    $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/basic           1

    $(Q)rm -f .tmp_quiet_recordmcount                                                           2

outputmakefile:

ifneq ($(KBUILD_SRC),)

    $(Q)ln -fsn $(srctree) source

    $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \

        $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)

endif

没有指定-O 参数,KBUILD_SRC为空,所以outputmakefile不执行

$(Q)$(MAKE) $(build)=scripts/kconfig $@

展开build得到

$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig  mx6qsabresdandroid_config    3

解析1命令

$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/basic

script/Makefile.build

prefix := tpl

src := $(patsubst $(prefix)/%,%,$(obj))

ifeq ($(obj),$(src))

prefix := spl

src := $(patsubst $(prefix)/%,%,$(obj))

ifeq ($(obj),$(src))

prefix := .

endif

endif

src =scripts/basic =obj的参数

kbuild-dir := $(if $(filter /%,$(src)),$(src),$(srctree)/$(src))

kbuild-file := $(if $(wildcard $(kbuild-dir)/Kbuild),$(kbuild-dir)/Kbuild,$(kbuild-dir)/Makefile)

include $(kbuild-file)

先查看./scripts/basic/Kbuild是否存在。如果存在。返回./scripts/basic/Kbuild。否则返回./scripts/basic/Makefile

include ./scripts/basic/Makefile

会编译出fixdep

解析3命令

$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/kconfig  mx6qsabresdandroid_config

script/Makefile.build

同理也会展开

include ./scripts/kconfig/Makefile (该文件通过patch包打进uboot源码)

script/kconfig/Makefile

%_config: %_defconfig

        @:

%_defconfig: $(obj)/conf

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

展开得到

scripts/kconfig/conf  --defconfig=arch/../configs/mx6qsabresdandroid_defconfig Kconfig     4

会先构建出conf

conf通过

conf_parse(Kconfig);来解析可选的配置信息,保存到一个链表中。

随后通过

conf_read(rpi_defconfig)读取默认的设置文件,并且生成新的配置文件

调用

conf_set_all_new_symbols更新关系链表

最后调用

conf_write写入到.config中

发布了41 篇原创文章 · 获赞 2 · 访问量 3266

猜你喜欢

转载自blog.csdn.net/qq_45683435/article/details/103768190
今日推荐