u-boot-2009.11.y Makefile分析 (一)

make XXX_defconfig

我们编译u-boot,一般第一步使用make xxx_config,现在来分析下这个makefile目标的执行

首先在源码目录下Makefile中,找到这个目标

%config: scripts_basic outputmakefile FORCE
	$(Q)$(MAKE) $(build)=scripts/kconfig $@

这个目标依赖与三个目标,scripts_basic outputmakefile FORCE

  • scrpts_basic
scripts_basic:
	$(Q)$(MAKE) $(build)=scripts/basic
	$(Q)rm -f .tmp_quiet_recordmcount

此目标的命令中,其他的都好理解,但是$(build)=scripts/basic令人困惑。从语法上来看,build应该是一个makefile变量,搜索源码目录下Makefile,未见到此变量的声明,所以其应该在包含的makefile文件中,make也没有此内置的变量。
在scripts/Kbuild.include中找到此变量,

###
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
# Usage:
# $(Q)$(MAKE) $(build)=dir
build := -f $(srctree)/scripts/Makefile.build obj

其中srctree一般为.,所以

build := -f ./scripts/Makefile.build obj

$(Q)$(MAKE) $(build)=scripts/basic可被替换为
$(Q)$(MAKE) -f ./scripts/Makefile.build obj=scripts/basic
这样,相当于执行make命令,指定makefile文件为./scripts/Makefile.build,传入参数为obj=scripts/basic
scripts/Makefile.build这个文件我们就不展开讲了,这个文件主要是调用目标目录的Makefile

进入到scripts/basic目录下,

fixdep  fixdep.c  Makefile

只有三个文件,可见此目录下,只是生成fixdep工具,那么这个工具是用来干什么的,我们暂不分析,给出结论

Usage: fixdep <depfile> <target> <cmdline>

编译时,编译器会根据选项-MD自动生成依赖文件*.d,用fixdep更新*.d文件生成新的依赖格式

  • outputmakefile
outputmakefile:

空目标,暂不考虑

  • FROCE
FORCE:

这是一个空目标,凡是依赖于这个目标的目标,每次都要重新生成

三个依赖目标已经分析完,接下来给分析%config的命令

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

等价于

 	make  -f ./scripts/Makefile.build obj=scripts/kconfig  xxx_config

进入到scripts/kconfig目录下,在其Makefile中,有以下部分

%_defconfig: $(obj)/conf
	$(Q)$< $(silent) --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)

这里的obj,就是scripts/kconfig,
上面等价于

XXX_defconfig: scripts/kconfig/conf
	scripts/kconfig/conf  --defconfig=arch/../configs/s32v234evb_defconfig Kconfig

conf这个文件,在这里也不细细分析了

Usage: ./conf [-s] [option] <kconfig-file>
[option] is _one_ of the following:
  --listnewconfig         List new options
  --oldaskconfig          Start a new configuration using a line-oriented program
  --oldconfig             Update a configuration using a provided .config as base
  --syncconfig            Similar to oldconfig but generates configuration in
                          include/{generated/,config/}
  --olddefconfig          Same as oldconfig but sets new symbols to their default value
  --oldnoconfig           An alias of olddefconfig
  --defconfig <file>      New config with default defined in <file>
  --savedefconfig <file>  Save the minimal current configuration to <file>
  --allnoconfig           New config where all options are answered with no
  --allyesconfig          New config where all options are answered with yes
  --allmodconfig          New config where all options are answered with mod
  --alldefconfig          New config with all symbols set to default
  --randconfig            New config with random answer to all options

这里使用这个文件,是根据XXX_defconfig文件中的内容,生成.config。

这篇文章,只是讲了流程,有些地方没有展开去讲,以后若有机会,会把conf和Makefile.build拿出来分析。
若有错误,敬请指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值