分析uboot中 make xxx_config过程

阅读目录

 

正文

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中
————————————————
版权声明:本文为CSDN博主「P_sg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014702107/article/details/81204292

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值