make xxxx_defconfig 分析

2024-06-01 18:28
文章标签 分析 make xxxx defconfig

本文主要是介绍make xxxx_defconfig 分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 执行依赖scripts_basic
  • 执行依赖outputmakefile
  • 实现%config

make rpi_3_32b_defconfig V=1:

make -f ./scripts/Makefile.build obj=scripts/basiccc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -o scripts/basic/fixdep scripts/basic/fixdep.c   
rm -f .tmp_quiet_recordmcount
make -f ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfigcc -Wp,-MD,scripts/kconfig/.conf.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -c -o scripts/kconfig/conf.o scripts/kconfig/conf.cbison -oscripts/kconfig/zconf.tab.c -t -l scripts/kconfig/zconf.yflex -oscripts/kconfig/zconf.lex.c -L scripts/kconfig/zconf.lcc -Wp,-MD,scripts/kconfig/.zconf.tab.o.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11    -Iscripts/kconfig -c -o scripts/kconfig/zconf.tab.o scripts/kconfig/zconf.tab.ccc   -o scripts/kconfig/conf scripts/kconfig/conf.o scripts/kconfig/zconf.tab.o   
scripts/kconfig/conf  --defconfig=arch/../configs/rpi_3_32b_defconfig Kconfig
#
# configuration written to .config
#

make rpi_3_32b_defconfig :

  HOSTCC  scripts/basic/fixdepHOSTCC  scripts/kconfig/conf.oYACC    scripts/kconfig/zconf.tab.cLEX     scripts/kconfig/zconf.lex.cHOSTCC  scripts/kconfig/zconf.tab.oHOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#
94 	ifeq ("$(origin V)", "command line")
95 	  KBUILD_VERBOSE = $(V)
96 	endif
97 	ifndef KBUILD_VERBOSE
98 	  KBUILD_VERBOSE = 0
99 	endif
100
101	ifeq ($(KBUILD_VERBOSE),1)
102	  quiet =
103	  Q =
104	else
105	  quiet=quiet_
106	  Q = @
107	endif
......
481	scripts_basic:
482		$(Q)$(MAKE) $(build)=scripts/basic
483		$(Q)rm -f .tmp_quiet_recordmcount
......
492	outputmakefile:
493	ifneq ($(KBUILD_SRC),)
494		$(Q)ln -fsn $(srctree) source
495		$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
496			$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
497	endif
......	
563	%config: scripts_basic outputmakefile FORCE
564		$(Q)$(MAKE) $(build)=scripts/kconfig $@
......
2318 FORCE:

当在命令行中输入: make rpi_3_32b_defconfig V=1 时,94行条件成立,KBUILD_VERBOSE = 1,101行条件成立,quiet 和 Q 为空,则输出整个命令。
输入命令自动匹配顶层 Makefile 的第563 行并执行,由于目标 %config依赖 scripts_basic outputmakefileFORCE, 则执行顺序如下:

1. 执行依赖 scripts_basic 481-483行
2. 执行依赖 outputmakefile492-497行
3. 执行依赖 FORCE,什么都不做,2318行

执行依赖scripts_basic

481	scripts_basic:
482		$(Q)$(MAKE) $(build)=scripts/basic
483		$(Q)rm -f .tmp_quiet_recordmcount

$(build)在 scripts/Kbuild.include 文件【在顶层Makefile的386行引用】的第184行定义:

184	build := -f $(srctree)/scripts/Makefile.build obj

$(srctree)在顶层 Makefile 中定义为srctree = .,所以展开后为:

scripts_basic:make -f ./scripts/Makefile.build obj=scripts/basicrm -f .tmp_quiet_recordmcount

结果:由 ./scripts/Makefile.build 分析可知:打印并执行下列第2行的内容,生成scripts/basic/fixdep软件,将cmd_scripts/basic/fixdep := cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu11 -o scripts/basic/fixdep scripts/basic/fixdep.c 内容写入到scripts/basic/.fixdep.cmd文件中【此文件没有回自动创建】
回显1-3行

1 make -f ./scripts/Makefile.build obj=scripts/basic
2   cc -Wp,-MD,scripts/basic/.fixdep.d -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer   -std=gnu11     -o scripts/basic/fixdep scripts/basic/fixdep.c   
3 rm -f .tmp_quiet_recordmcount

执行依赖outputmakefile

492	outputmakefile:
493	ifneq ($(KBUILD_SRC),)
494		$(Q)ln -fsn $(srctree) source
495		$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
496			$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
497	endif

当输入make O=dir时,KBUILD_SRC=dir,由于这里没有O=,所以第493行条件不成立,这里什么都不做。

实现%config

由上面的分析可知,%config 的三个依赖 scripts_basic outputmakefileFORCE都已经实现。
1.依赖scripts_basic:为了生成scripts/basic/fixdep
2.依赖outputmakefile:什么都不做
3.依赖FORCE:什么都不做

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

最后执行第564行命令来生成最终目标%config,最终展开为:

563	%config: scripts_basic outputmakefile FORCE
564		make ./scripts/Makefile.build obj=scripts/kconfig rpi_3_32b_defconfig

结果:由 ./scripts/Makefile.build 分析可知:

这篇关于make xxxx_defconfig 分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021770

相关文章

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

Spring Boot Interceptor的原理、配置、顺序控制及与Filter的关键区别对比分析

《SpringBootInterceptor的原理、配置、顺序控制及与Filter的关键区别对比分析》本文主要介绍了SpringBoot中的拦截器(Interceptor)及其与过滤器(Filt... 目录前言一、核心功能二、拦截器的实现2.1 定义自定义拦截器2.2 注册拦截器三、多拦截器的执行顺序四、过

C++ scoped_ptr 和 unique_ptr对比分析

《C++scoped_ptr和unique_ptr对比分析》本文介绍了C++中的`scoped_ptr`和`unique_ptr`,详细比较了它们的特性、使用场景以及现代C++推荐的使用`uni... 目录1. scoped_ptr基本特性主要特点2. unique_ptr基本用法3. 主要区别对比4. u

Nginx内置变量应用场景分析

《Nginx内置变量应用场景分析》Nginx内置变量速查表,涵盖请求URI、客户端信息、服务器信息、文件路径、响应与性能等类别,这篇文章给大家介绍Nginx内置变量应用场景分析,感兴趣的朋友跟随小编一... 目录1. Nginx 内置变量速查表2. 核心变量详解与应用场景3. 实际应用举例4. 注意事项Ng

Java多种文件复制方式以及效率对比分析

《Java多种文件复制方式以及效率对比分析》本文总结了Java复制文件的多种方式,包括传统的字节流、字符流、NIO系列、第三方包中的FileUtils等,并提供了不同方式的效率比较,同时,还介绍了遍历... 目录1 背景2 概述3 遍历3.1listFiles()3.2list()3.3org.codeha

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺