/**

******************************************************************************
* @author    Maoxiao Hu
* @version   V1.0.0
* @date       Dec-2014
******************************************************************************
* < COPYRIGHT 2014 ISE of SHANDONG UNIVERSITY >
*******************************************************************************
**/
 
Based on u-boot-2014-10.
顶层config.mk的内容并不长,这里全部贴出来吧。
这里以已经执行完make trats_defconfig(这个流程可以参看:《2014-10 u-boot make xxx_defconfig 过程分析》),在顶层目录已经生成了.config文件为例,说明config.mk中各变量的取值。
 

 15 PLATFORM_RELFLAGS :=

 16 PLATFORM_CPPFLAGS :=

 17 PLATFORM_LDFLAGS :=

 18 LDFLAGS :=

 19 LDFLAGS_FINAL :=

 20 OBJCOPYFLAGS :=

 21 #########################################################################

 22 

 23 ARCH := $(CONFIG_SYS_ARCH:"%"=%)

 24 CPU := $(CONFIG_SYS_CPU:"%"=%)

 25 BOARD := $(CONFIG_SYS_BOARD:"%"=%)

 26 ifneq ($(CONFIG_SYS_VENDOR),)

 27 VENDOR := $(CONFIG_SYS_VENDOR:"%"=%)

 28 endif

 29 ifneq ($(CONFIG_SYS_SOC),)

 30 SOC := $(CONFIG_SYS_SOC:"%"=%)

 31 endif

 32 

 33 # Some architecture config.mk files need to know what CPUDIR is set to,

 34 # so calculate CPUDIR before including ARCH/SOC/CPU config.mk files.

 35 # Check if arch/$ARCH/cpu/$CPU exists, otherwise assume arch/$ARCH/cpu contains

 36 # CPU-specific code.

 37 CPUDIR=arch/$(ARCH)/cpu$(if $(CPU),/$(CPU),)

 38 

 39 sinclude$(srctree)/arch/$(ARCH)/config.mk  # include architecture dependend rules

 40 sinclude$(srctree)/$(CPUDIR)/config.mk     # include  CPU  specific rules

 41 

 42 ifdef   SOC

 43 sinclude$(srctree)/$(CPUDIR)/$(SOC)/config.mk  # include  SoC  specific rules

 44 endif

 45 ifneq ($(BOARD),)

 46 ifdef   VENDOR

 47 BOARDDIR = $(VENDOR)/$(BOARD)

 48 else

 49 BOARDDIR = $(BOARD)

 50 endif

 51 endif

 52 ifdef   BOARD

 53 sinclude$(srctree)/board/$(BOARDDIR)/config.mk # include board specific rules

 54 endif

 55 

 56 ifdef FTRACE

 57 PLATFORM_CPPFLAGS += -finstrument-functions -DFTRACE

 58 endif

 59 

 60 #########################################################################

 61 

 62 RELFLAGS := $(PLATFORM_RELFLAGS)

 63 

 64 OBJCOPYFLAGS += --gap-fill=0xff

 65 

 66 PLATFORM_CPPFLAGS += $(RELFLAGS)

 67 PLATFORM_CPPFLAGS += -pipe

 68 

 69 LDFLAGS += $(PLATFORM_LDFLAGS)

 70 LDFLAGS_FINAL += -Bstatic

 71 

 72 export PLATFORM_CPPFLAGS

 73 export RELFLAGS

 74 export LDFLAGS_FINAL

 75 export CONFIG_STANDALONE_LOAD_ADDR

 
 
config.mk被顶层Makefile包含,通过:

include$(srctree)/config.mk

这句话。
 
ARCH := $(CONFIG_SYS_ARCH:"%"=%)
ARCH = “arm”
CPU := $(CONFIG_SYS_CPU:"%"=%)
CPU = “armv7”
BOARD := $(CONFIG_SYS_BOARD:"%"=%)
BOARD = “trats”
 

ifneq ($(CONFIG_SYS_VENDOR),)

 VENDOR := $(CONFIG_SYS_VENDOR:"%"=%)

endif

在这里CONFIG_SYS_VENDOR = “samsung” 所以 VENDOR = “samsung”
 

ifneq ($(CONFIG_SYS_SOC),)

SOC := $(CONFIG_SYS_SOC:"%"=%)

endif

在这里CONFIG_SYS_SOC = “exynos” 所以 SOC = “exynos”
 
CPUDIR=arch/$(ARCH)/cpu$(if $(CPU),/$(CPU),)
替换已知变量:
CPUDIR=arch/arm/cpu/armv7
 

sinclude$(srctree)/arch/$(ARCH)/config.mk  # include architecture dependend rules

sinclude$(srctree)/$(CPUDIR)/config.mk     # include  CPU  specific rules

替换已知变量:

sinclude$(srctree)/arch/arm/config.mk  # include architecture dependend rules

sinclude$(srctree)/arch/arm/cpu/armv7/config.mk     # include  CPU  specific rules

 
 

 42 ifdef   SOC

 43 sinclude$(srctree)/$(CPUDIR)/$(SOC)/config.mk  # include  SoC  specific rules

 44 endif

已定义SOC,替换已知变量:

 43 sinclude$(srctree)/arch/arm/cpu/armv7/exynos/config.mk  # include  SoC  specific rules

 

 45 ifneq ($(BOARD),)

 46 ifdef   VENDOR

 47 BOARDDIR = $(VENDOR)/$(BOARD)

 48 else

 49 BOARDDIR = $(BOARD)

 50 endif

 51 endif

BOARD变量不为空,且已定义VENDOR,替换已知变量:

 47 BOARDDIR = samsung/trats

 

 52 ifdef   BOARD

 53 sinclude$(srctree)/board/$(BOARDDIR)/config.mk # include board specific rules

 54 endif

已定义BOARD,替换已知变量:

 53 sinclude$(srctree)/board/samsung/trats/config.mk # include board specific rules

 
总结,源文件经过替换后,变成下面代码:
ARCH = “arm”
CPU = “armv7”
BOARD = “trats”
VENDOR = “samsung”
SOC = “exynos”
CPUDIR=arch/arm/cpu/armv7

sinclude$(srctree)/arch/arm/config.mk  # include architecture dependend rules

sinclude$(srctree)/arch/arm/cpu/armv7/config.mk     # include  CPU  specific rules

sinclude$(srctree)/arch/arm/cpu/armv7/exynos/config.mk  # include  SoC  specific rules

BOARDDIR = samsung/trats

sinclude$(srctree)/board/samsung/trats/config.mk # include board specific rules

其它编译选项就不做解释了。

2014-10 u-boot 顶层config.mk分析的更多相关文章

  1. uboot顶层config.mk分析

    uboot顶层目录中的config.mk定义了确定了当前执行makefile所对应的源文件目录.目标文件目录,编译的程序编译.连接的选项,以及目标文件生成的规则等等.它被包含在顶层的makefile以 ...

  2. u-boot顶层目录config.mk分析

    1. 设置obj与src ifneq ($(OBJTREE),$(SRCTREE)) ifeq ($(CURDIR),$(SRCTREE)) dir := else dir := $(subst $( ...

  3. uboot总结:uboot配置和启动过程3(config.mk分析)

    说明:文件位置:在uboot的目录下,文件名为:config.mk.是一个makefile文件,以后会被主Makefile调用. 它的主要作用的是: (1)具体的设置交叉编译工具链接(主Makefil ...

  4. U-Boot Makefile分析(2) config.mk分析

    浏览一下U-Boot各个子目录下的Makefile可以看到,几乎他们都会包含$(TOPDIR)/config.mk,那么这个文件进行了什么操作呢?简单概括:读入include/config.mk.in ...

  5. U-Boot Makefile分析(3) rules.mk分析

    浏览各个子Makefile可以发现,他们都会在文件的后面包含rules.mk,这个文件的作用就是更新源文件的依赖,并生成各种.depend文件. _depend: $(obj).depend # Sp ...

  6. uboot 顶层makefile细节分析

    uboot的源文件众多,学习庞然大物首先找到脊椎--顶层的makfile,逐一破解.但是,uboot的makefile同样是一个庞然大物,所以也要找到它的主线.倘若过分专注部分细节,很难做到把握全局, ...

  7. Linux - Eclipse CDT + GCC 安装(2014.10.2)

    Eclipse CDT + GCC 安装 (2014.10.2) 本文地址:http://blog.csdn.net/caroline_wendy 1. 安装Eclipse,在官方站点下载Eclips ...

  8. Spring Boot 实战与原理分析视频课程

    Spring Boot 实战与原理分析视频课程 链接:https://pan.baidu.com/share/init?surl=PeykcoeqZtd1d9lN9V_F-A 提取码: 关注公众号[G ...

  9. spring boot启动原理步骤分析

    spring boot最重要的三个文件:1.启动类 2.pom.xml 3.application.yml配置文件 一.启动类->main方法 spring boot启动原理步骤分析 1.spr ...

随机推荐

  1. MySQL · BUG分析 · Rename table 死锁分析

    http://mysql.taobao.org/monthly/2016/03/06/ 背景 InnoDB buffer pool中的page管理牵涉到两个链表,一个是lru链表,一个是flush 脏 ...

  2. Exploring Python Code Objects

    Exploring Python Code Objects https://late.am/post/2012/03/26/exploring-python-code-objects.html Ins ...

  3. MAC SVN Phonegap

    1. Windows上用VisualSVN Server Manager创建好Repository. 2. 在MAC上,用Phonegap创建好项目,比如在Project1目录里的App目录. 3. ...

  4. CentOS中查看系统资源占用情况的命令

    用 'top -i' 看看有多少进程处于 Running 状态,可能系统存在内存或 I/O 瓶颈,用 free 看看系统内存使用情况,swap 是否被占用很多,用 iostat 看看 I/O 负载情况 ...

  5. c语言全局变量

    1.全局变量 #include <stdio.h> int L,n; void solve() { // printf("%d",L); printf("%d ...

  6. 小白日记35:kali渗透测试之Web渗透-手动漏洞挖掘(一)-默认安装引发的漏洞

    手动漏洞挖掘 即扫描后,如何对发现的漏洞告警进行验证. #默认安装 流传linux操作系统比windows系统安全的说法,是因为windows系统默认安装后,会开放很多服务和无用的端口,而且未经过严格 ...

  7. css笔记05:表单

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  8. Recovery启动流程(3)--recovery.cpp分析

    转载请注明来源:cuixiaolei的技术博客 这篇文章主要通过分析高通recovery目录下的recovery.cpp源码,对recovery启动流程有一个宏观的了解.MTK和高通的recovery ...

  9. 贴心小技能——纯CSS实现的帮助提示

    1. 新技能传授---哒哒哒哒 我们经常会接到这样的小需求,鼠标放在某个位置实现一段小提示. 你还在用js实现这样一个小功能,你就太out了,来看看我们用纯CSS打造的帮助提示. 2. html &l ...

  10. IOS微信中看文章跳转页面后点击返回无效

    经过查找原因发现,下面两种链接,链接1返回不了,链接2可以返回. 链接1:http://mp.weixin.qq.com/s?__biz=MzA5NDY5MzcyNA==&mid=265089 ...