make xxx_deconfig过程详解
- 1. 前言
- 2. 概述
- 3. build变量的定义
- 4. 目标%config的定义
- 4.1 依赖 scripts_basic
- 4.1.1 语句$(if $ (KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y))
- 4.1.2 语句 $(if $ (KBUILD_MODULES),$(obj-m) $(modorder-target))*
- 4.1.3 $(subdir-ym)
- 4.1.4 $(always) 重点关注
- 4.1.4.1 src的定义
- 4.1.4.2 kbuild-dir的定义
- 4.1.4.3 kbuild-file的定义
- 4.1.4.4 又在Makefile.build中包含include scripts/Makefile.lib
- 4.2 依赖 outputmakefile
- 4.3 依赖 FORCE
- 4.4 规则 $ (Q)$(MAKE) $(build)=scripts/kconfig $@
- 5 总结
UBOOT版本:uboot2018.03,开发板myimx8mmek240 。2. 概述Ubootb编译第一步通常是执行make xxx_config,在编译指定顶层目录生成.config文件,这种方式要求厂商提供一个基础的xxx_config文件(通常来说开发者不会通过执行make menuconfig从零开始配置,这个工作过量太大了) 。本文接下来的章节主要解析这条指令背后主要做了什么 。我是用的开发板执行命令为:make myimx8mmek240-8mm-2g_defconfig
3. build变量的定义在scripts/Kbuild.include 中定义:
#### Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=# Usage:# $(Q)$(MAKE) $(build)=dirbuild := -f $(srctree)/scripts/Makefile.build obj
4. 目标%config的定义在顶层Makefile中定义:# We need some generic definitions (do not try to remake the file).scripts/Kbuild.include: ;include scripts/Kbuild.include//注意这个引用......config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@%config: scripts_basic outputmakefile FORCE $(Q)$(MAKE) $(build)=scripts/kconfig $@
4.1 依赖 scripts_basic(参考:linux内核Makefile中的变量build— 过渡篇(五))# 顶层Makefile# Basic helpers built in scripts/PHONY += scripts_basicscripts_basic: $(Q)$(MAKE) $(build)=scripts/basic $(Q)rm -f .tmp_quiet_recordmcount
展开变量build# 顶层Makefile# Basic helpers built in scripts/PHONY += scripts_basicscripts_basic: $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.build obj=scripts/basic $(Q)rm -f .tmp_quiet_recordmcount
make -f $(srctree)/scripts/Makefile.build obj=scripts/basic的解析如下:这是一种不指定目标的情况,由于未指定目标,这时会使用Makefile.build中的默认目标__build 。然后更进一步,会使用$(obj)/Makefile(scripts/basic/Makefile)中定义的变量来进行目标匹配 。
__build在Makefile.build中的构建规则为:
__build: $(if $(KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y)) \$(if $(KBUILD_MODULES),$(obj-m) $(modorder-target)) \$(subdir-ym) $(always) @:
4.1.1 语句$(if $ (KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y))在顶层Makefile中,KBUILD_BUILTIN的定义如下:# note:顶层MakefileKBUILD_BUILTIN := 1export KBUILD_MODULES KBUILD_BUILTIN
该语句展开为:$(builtin-target) $(lib-target) $(extra-y)
(1)lib-target# note:顶层Makefileifneq ($(strip $(lib-y) $(lib-m) $(lib-)),) lib-target := $(obj)/lib.aendif
在此语句之前obj-y := ;obj-m := ;obj-未定义 。因此lib-target为空 。(2)builtin-target ???????
# note:顶层Makefileifneq ($(strip $(obj-y) $(obj-m) $(obj-) $(subdir-m) $(lib-target)),) builtin-target := $(obj)/built-in.oendif
在此语句之前obj-y := ; obj-m := ;obj-未定义 ; subdir-m := ;并且在所包含的文件中也没有给这些变量增加值 。lib-target 为空 。因此builtin-target为空 。(3)extra-y未定义 综上:语句$(if $ (KBUILD_BUILTIN),$(builtin-target) $(lib-target) $(extra-y))为空 。
4.1.2 语句 $(if $ (KBUILD_MODULES),$(obj-m) $(modorder-target))*在顶层Makefile中,KBUILD_BUILTIN的定义如下:
经验总结扩展阅读
- Ubuntu安装Docker及镜像加速器
- 2023年1月29日拆房好不好 2023年1月29日拆房吉日一览表
- 2023年1月29日搬新家吉日一览表 2023年1月29日是搬新家吉日吗
- 2023年1月29日拆迁吉日一览表 2023年农历正月初八宜拆迁吗
- 2023年农历正月初八宜乔迁吗 2023年1月29日乔迁吉日一览表
- 精选600个 唐姓女孩名字2023年属兔
- 取一个寓意好的名字 2023年女宝宝名字库300个
- 水果店名字独一无二 大气的水果店名字
- 丁火男喜欢一个人的表现 疼爱有加情投意合
- 适合文科内向男孩的专业有什么 学什么专业有前途