2014-10 u-boot make xxx_defconfig 过程分析
%config: scripts_basic outputmakefile FORCE
+$(Q)$(CONFIG_SHELL) $(srctree)/scripts/multiconfig.sh $@
scripts_basic:
$(Q)$(MAKE) $(build)=scripts/basic
$(Q)rm -f .tmp_quiet_recordmcount
outputmakefile:
ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree) source
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
endif
此时由于KBUILD_SRC为空,所以此条依赖条件并不执行。
依赖条件3:FORCE
FORCE:
执行命令:
+$(Q)$(CONFIG_SHELL) $(srctree)/scripts/multiconfig.sh $@
几个变量:
$(Q) = @
$(CONFIG_SHELL) = /bin/sh
$(MAKE) = make
$@ = %config
$(srctree) = .
所以依赖条件1变成:
scripts_basic:
@make $(build)=scripts/basic
@rm -f .tmp_quiet_recordmcount
$(build)的定义在:scripts/Kbuild.include
build := -f $(if $(KBUILD_SRC),$(srctree)/)scripts/Makefile.build obj
KBUILD_SRC为空,所以$(if $(KBUILD_SRC),$(srctree)/)也为空。
所以变为:build := -f scripts/Makefile.build obj
所以依赖条件1变为:
scripts_basic:
@make -f scripts/Makefile.build obj=scripts/basic
@rm -f .tmp_quiet_recordmcount
此时主目标变成:
%config: scripts_basic
+@/bin/sh ./scripts/multiconfig.sh %config
一、script_basic分析
scripts_basic:
@make -f scripts/Makefile.build obj=scripts/basic
@rm -f .tmp_quiet_recordmcount
在这里主要还是对@make -f scripts/Makefile.build obj=scripts/basic
这句命令的分析。
将obj = scripts/basic 这个变量名传入Makefile.build。
二、主目标分析
%config: scripts_basic
+@/bin/sh ./scripts/multiconfig.sh %config
加入我们输入的命令是:make trats_defconfig
那么得到:
trats_defconfig: scripts_basic
+@/bin/sh ./scripts/multiconfig.sh trats_defconfig
也就是将trats_defconfig这个文件传入multiconfig.sh脚本中,然后执行。
三、调用 multiconfig.sh 脚本过程分析
下面再来解析multiconfig.sh:
target=$1
case $target in
*_defconfig)
do_board_defconfig $target;;
esac
此时target = trats_defconfig 符合*_defconfig,执行:
do_board_defconfig trats_defconfig;
do_board_defconfig是一个内部函数,另外经过替换一些已知变量后得到:
大概意思是先把trats_defconfig复制一份到configs/.tmp_defconfig然后,
基本可以分为红色和粉红色两部分:
红色部分:
再次把.tmp_defconfig当作参数给run_make_config函数,run_make_config经过已知变量代换后变成:
最后一句再次调用build函数:
在这我们没有定义过SPL和TPL,所以跳过这一步。
最后,其实只有一句话:
make -f $srctree/scripts/Makefile.build obj=scripts/kconfig SRCARCH=.. KCONFIG_OBJDIR= .tmp_defconfig
四、Makefile.build分析
从二三节得到了两条待执行的指令:
make -f scripts/Makefile.build obj=scripts/basic
make -f scripts/Makefile.build obj=scripts/kconfig SRCARCH=.. KCONFIG_OBJDIR= .tmp_defconfig
先分析第1条:
make -f scripts/Makefile.build obj=scripts/basic
编译scripts/basic.c文件
再分析第2条:
把scripts/kconfig 先传入Makefile.build中,然后再将根据其初始化的值暴露到顶层Makefile中。
匹配kconfig/Makefile里的:
%_defconfig:$(obj)/conf
$(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
展开后:
.tmp_defconfig:scripts/kconfig/conf
@scripts/kconfig/conf —defconfig=arch/../configs/.tmp_defconfig Kconfig
这句话的意图很明显,先编译scripts/kconfig/conf.c生成scripts/kconfig/conf,然后输入两个参数:
—defconfig=arch/../configs/.tmp_defconfig
Kconfig
五、scripts/kconfig/conf.c 解析
详见以后博客。
2014-10 u-boot make xxx_defconfig 过程分析的更多相关文章
- Contest - 2014 SWJTU ACM 手速测试赛(2014.10.31)
题目列表: 2146 Problem A [手速]阔绰的Dim 2147 Problem B [手速]颓废的Dim 2148 Problem C [手速]我的滑板鞋 2149 Problem D [手 ...
- Linux - Eclipse CDT + GCC 安装(2014.10.2)
Eclipse CDT + GCC 安装 (2014.10.2) 本文地址:http://blog.csdn.net/caroline_wendy 1. 安装Eclipse,在官方站点下载Eclips ...
- App Store审核指南中文版(2014.10.11更新)
App Store审核指南中文版(2014.10.11更新) 2014-10-11 16:36 编辑: suiling 分类:AppStore研究 来源:CocoaChina 2 8657 App ...
- phpStudy + JspStudy 2014.10.02 下载
phpStudy + JspStudy 2014.10.02 下载 目标:让天下没有难配的php环境. phpStudy Linux版&Win版同步上线 支持Apache/Nginx/Teng ...
- 2014.10.5 再次学习LINUX
mesg 发送信息给root y n write/talk 写消息给 wall 给所有用户发送消息 ps -aux ps -elF pstree 命令行跳转:CTRL+a行首 CTRL+e行尾 CTR ...
- 【spring boot】10.spring boot下的单元测试
spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...
- iPhone屏幕适配,历史及现状(http://hjcapple.github.io/2014/10/10/iphone-screen.html)
iPhone屏幕适配,历史及现状 初代iPhone 2007年,初代iPhone发布,屏幕的宽高是320×480像素.下文也是按照宽度,高度的顺序排列.这个分辨率一直到iPhone 3GS的也保持不变 ...
- Cheatsheet: 2014 10.01 ~ 10.30
.NET ASP.NET Web Api: Unwrapping HTTP Error Results and Model State Dictionaries Client-Side HTTP 20 ...
- 2014.10.09 Andrew 学习 WPF(刘铁锰) 笔记分享
引言 主要是讲了关于WPF只是表现层的工具. 第一章: XAML : 可扩张应用程序标记语言 Extensible Application Markup Language 什么是XAML? X ...
随机推荐
- iOS开发——UI篇OC篇&layoutSubviews和drawRect
layoutSubviews和drawRect 首先两个方法都是异步执行.layoutSubviews方便数据计算,drawRect方便视图重绘. layoutSubviews在以下情况下 ...
- .net平台下C#socket通信(转)
上篇.net平台下C#socket通信(上)介绍了socket通信的基本原理及最基本的通信方式.本文在此基础上就socket通信时经常遇到的问题做一个简单总结,都是项目中的一些小问题,拿来此处便于下次 ...
- pt-table-checksum 与pt-table-sync
http://www.lai18.com/user/481193.html?id=481193&p=1 主从数据校验使用percona-toolkit工具集的以下两个工具(主库上使用): pt ...
- [Effective C++ --032]确定你的public继承塑模出is-a
这一章都在讲述继承的关系.可以举个例子说明: 父类是水果,子类是苹果,苹果是一种(is-a)水果,但是水果不一定就是苹果. is-a并不是唯一存在classes之间的关系.另两个常见的关系是has-a ...
- UNIX基础知识之时间值
本篇博文内容摘自<UNIX环境高级编程>(第二版),仅作个人学习记录所用.关于本书可参考:http://www.apuebook.com/. 长期以来,UNIX系统一直使用两种不同的时间值 ...
- 利用 Composer 一步一步构建自己的 PHP 框架(一)——基础准备
『Composer 一统天下的时代已经到来!』——白岩松 “一个时代结束了,另一个时代开始了.” Framework Interoperability Group(框架可互用性小组),简称 FIG,成 ...
- Hill Climber and Random Walk
- javaweb学习总结二十一(servlet开发入门、servlet生命周期以及调用过程)
一:servlet开发入门 servlet是sun公司一门开发动态web资源的技术,下面编写一个servlet入门程序: 1:在tomcat服务器webapps目录下新建firstServlet目录, ...
- 怎么删除远程登录连接的ip
通过远程桌面可以登录到远程电脑上进行相应的操作,在登录过后会在本地电脑上留下登录过的IP以及登录用户名相关信息,可能会给远程的电脑带来安全隐患,下面介绍一下清除远程桌面历史记录的方法. 1.删除我的文 ...
- 经常被忽略的几个CSS3属性之强大应用(一、timing-function: steps() 二、animation-direction 三、timing-function: cubic-bezier())
一.timing-function: steps() 一开始在使用CSS3的时候并没有太注意这个timing-function,只是注意到自定义贝塞尔曲线. 1)一个项目中的实例 先来看看左边加了st ...