一.  uboot顶层 Makefile文件

uboot顶层 Makefile,就是 uboot源码工程的根目录下的  Makefile文件。

分析 gcc 版本代码时,一定是先从顶层 Makefile 开始的,然后再是子 Makefile ,这样通过层层分析 Makefile 即可了解整个工 程的组织结构。
本文主要了解 uboot顶层 Makefile前期的部分内容,包括如下:
版本号,MAKEFLAGS 变量,命令输出,静默输出,设置编译结果输出目录。

注意:是对编译后的 uboot 源码进行分析。

二.   Makefile 前期所做的内容

使用 vscode软件打开 uboot源码工程。打开 uboot 源码的顶层 Makefile文件。接下来大体了解一下 顶层 Makefile的内容。

1.  版本号

顶层 Makefile 一开始是版本号,内容如下:
5 VERSION = 2016
6 PATCHLEVEL = 03
7 SUBLEVEL =
8 EXTRAVERSION =
9 NAME =
VERSION 是主版本号, PATCHLEVEL 是补丁版本号, SUBLEVEL 是次版本号,这三个一
起构成了 uboot 的版本号。例如,当前的 uboot 版本号就是 2016.03 EXTRAVERSION 是附加
版本信息, NAME 是和名字有关的,一般不使用这两个。

2.   MAKEFLAGS 变量

涉及 MAKEFLAGS变量的内容如下:

20 MAKEFLAGS += -rR --include-dir=$(CURDIR)
上述代码使用 += 来给变量 MAKEFLAGS 追加了一些值,“-rR 表示禁止使用内置的隐含规则和变量定义,“ --include-dir 指明搜索路径, “$(CURDIR)” 表示当前目录。
make 是支持递归调用的。 假如,在当前目录下存在一个“ subdir ”子目录,这个 子目录中又有其对应的 Makefile 文件,那么这个工程在编译的时候其主目录中的 Makefile 就可 以调用子目录中的 Makefile ,以此来完成所有子目录的编译。

3.   命令输出与静默输出

命令输出

uboot 默认编译是不会在终端中显示完整的命令,都是短命令。
注意:使用 "make"命令可以编译 uboot的前提是,已经对 uboot进行了配置工作(即执行了 make xxx_defconfig)。
使用 "make" 命令编译 uboot时如下所示:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/alientek_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ makeCLEAN   examples/standaloneCLEAN   toolsCLEAN   tools/lib tools/commonCLEAN   include/bmp_logo.h include/bmp_logo_data.h u-boot-nodtb.bin u-boot.lds u-boot.map u-boot.bin u-boot.cfg u-boot.srec u-boot u-boot.imx u-boot.sym System.map
在使用  "make" 命令编译 uboot源码时,通过设置变量 " V=1 ",可以实现完整的命令输出,这个在调试 uboot 的时候很有用。操作如下:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/alientek_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ make V=1
make -f ./Makefile silentoldconfig
make -f ./scripts/Makefile.build obj=scripts/basic
rm -f .tmp_quiet_recordmcount

顶层 Makefile 中控制命令输出的代码如下:
73 ifeq ("$(origin V)", "command line")
74 KBUILD_VERBOSE = $(V)
75 endif
76 ifndef KBUILD_VERBOSE
77 KBUILD_VERBOSE = 0
78 endif
79
80 ifeq ($(KBUILD_VERBOSE),1)
81 quiet =
82 Q =
83 else
84 quiet=quiet_
85 Q = @
86 endif

静默输出

如果在编译 uboot时 不需要输出命令, 就可以使用 uboot 的静默输出功能。编译时使用 make -s 命令即可实现静默输出。 顶层 Makefile 中相应的代码如下:
88 # If the user is running make -s (silent mode), suppress echoing of
89 # commands
90
91 ifneq ($(filter 4.%,$(MAKE_VERSION)),) # make-4
92 ifneq ($(filter %s ,$(firstword x$(MAKEFLAGS))),)
93 quiet=silent_
94 endif
95 else # make-3.8x
96 ifneq ($(filter s% -s%,$(MAKEFLAGS)),)
97 quiet=silent_
98 endif
99 endif
100
101 export quiet Q KBUILD_VERBOSE

4.  设置编译结果输出目录

uboot 可以将编译出来的目标文件输出到单独的目录中,在 make 的时候使用“ O ”来指定
输出目录,比如“ make O=out ”就是设置目标文件输出到 out 目录中。

这么做是为了将源文件 和编译产生的文件分开,当然也可以不指定 O 参数,不指定的话源文件和编译产生的文件都在同一个目录内。 一般我们不指定 O 参数。
顶层 Makefile 中相关的代码如下:
120 ifeq ($(KBUILD_SRC),)
121
122 # OK, Make called in directory where kernel src resides
123 # Do we want to locate output files in a separate directory?
124 ifeq ("$(origin O)", "command line")
125 KBUILD_OUTPUT := $(O)
126 endif
127
128 # That's our default target when none is given on the command line
129 PHONY := _all
130 _all:
131
132 # Cancel implicit rules on top Makefile
133 $(CURDIR)/Makefile Makefile: ;
134
135 ifneq ($(KBUILD_OUTPUT),)
136 # Invoke a second make in the output directory, passing relevant
variables
137 # check that the output directory actually exists
138 saved-output := $(KBUILD_OUTPUT)
139 KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd
$(KBUILD_OUTPUT) \
140 && /bin/pwd)
......
155 endif # ifneq ($(KBUILD_OUTPUT),)
156 endif # ifeq ($(KBUILD_SRC),)
第 124 行判断“ O ”是否来自于命令行,如果来自命令行的话条件成立, KBUILD_OUTPUT
就为 $(O) ,因此变量 KBUILD_OUTPUT 就是输出目录。
第 135 行判断 KBUILD_OUTPUT 是否为空。
第 139 行调用 mkdir 命令,创建 KBUILD_OUTPUT 目录,并且将创建成功以后的绝对路
径赋值给 KBUILD_OUTPUT 。至此,通过 O 指定的输出目录就存在了。

下一篇文章继续了解uboot源码的顶层 Makefile前期所做的内容。

uboot顶层Makefile前期所做工作说明一相关推荐

  1. U-Boot顶层Makefile分析

    参考:U-Boot顶层Makefile介绍 作者:一只青木呀 发布时间: 2020-10-22 16:22:17 网址:https://blog.csdn.net/weixin_45309916/ar ...

  2. 【正点原子Linux连载】第三十一章 U-Boot顶层Makefile详解 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  3. U-Boot 顶层 Makefile 详解

    U-Boot 顶层 Makefile 详解 1.U-Boot 工程目录分析 我们在分析 uboot 源码之前一定要 先在 Ubuntu 中编译一下 uboot 源码,因为编译过程会生成一些文件,而生成 ...

  4. u-boot 顶层Makefile 分析

    U-Boot 顶层Makefile 解析 u-Boot -Makefile(一)  声明 : 以下解析大部分来自网络大神之手 所以可以放心阅读  Good luck VERSION = 1 PATCH ...

  5. U-boot 顶层Makefile 学习(1)

    U-boot 顶层Makefile 学习(1) Makefile可以说是学习路上的难点之一,刚开始看视频学习时,很难跟得上讲师的步伐,虽然讲的很详细,但是由于没有Makefile基础,理解较为困难.建 ...

  6. uboot顶层Makefile

    1. 工作目录 如上图代码,编译之后将解压包放到windows解压观看. 目录如下: 文件夹: 文件: 1.1 arch 这里面存放着和架构有关的文件 我们用的是arm架构的文件,打开arm文件夹: ...

  7. imx6ull:uboot顶层Makefile分析

    版本号 MAKEFLAGES变量 20 MAKEFLAGS += -rR --include-dir=$(CURDIR) Makefile有两个特殊的变量:"SHELL"和&quo ...

  8. U-Boot 顶层 Makefile 分析二

    6.代码检查   uboot 支持代码检查,使用命令"make C=1"使能代码检查,检查那些需要重新编译的文件."make C=2"用于检查所有的源码文件 # ...

  9. U-BOOT分析(二)之顶层Makefile文件(1)

    U-BOOT分析(二)之顶层Makefile文件(1) U-BOOT版本 u-boot版本:    u-boot-2021.01.tar.bz2 Makefile && make简介 ...

  10. GNU ARM汇编--(十七)u-boot的makefile和mkconfig解读

    自己写的bootloader可以引导kernel了,我以为曾经神秘的u-boot代码将变得毫无挑战,然事实表明u-boot作为优秀的开源代码,阅读起来还是很有挑战的,值得一读! 阅读碰到的头等问题:M ...

最新文章

  1. Android shape 绘制左右 或者上下的渐变色
  2. 自己学习Foundation一些类
  3. 【IT笔试面试题整理】字符串的排列
  4. Esfog_UnityShader教程_漫反射DiffuseReflection
  5. UA SIE545 优化理论基础1 例题2 Farkas定理与相关结论
  6. 循环冗余码CRC使用matlab实现
  7. hp服务器raid制作,HP服务器建立RAID的两种方法
  8. 【linux】 redhat中设置时区
  9. min-width:100%和max-width:100%的区别
  10. 一文搞懂HMM(隐马尔可夫模型)-Viterbi algorithm
  11. 作者:张群(1988-),女,博士,中国电子技术标准化研究院设备与数据研究室副主任。...
  12. 面试题简答题——数据库相关汇总
  13. linux下飞信安装详细过程
  14. Matlab 轴承信号仿真+分析
  15. Oracle 12c 中修改PDB数据库的日志归档模式
  16. SQL Injection Bypassing WAF ——from DVWA ——2012-12-8
  17. 不是抽象的, 并且未覆盖Handler中的抽象方法
  18. 前端项目实战59-new URLSearchParams
  19. java基础--名词解释汇总
  20. 搭建Openstack环境以及Openstack认证服务

热门文章

  1. TikTok升级游戏出海营销服务体系,进一步优化合作伙伴生态
  2. 【渝粤题库】广东开放大学 跨文化交际学1 形成性考核
  3. uniapp问题界面模板
  4. 【转】iOS 音频-AVAudioSession
  5. latex参考文献IEEEtran报错BibTeX return exit code(1)indicating that some problems might have occurred..
  6. Springboot 集成 easyexcel excel导入并验证模板
  7. 安徽职评英语计算机免试条件,安徽 高级经济师 计算机免考条件
  8. 牙不好全身遭殃!这些病竟都和牙有关,以前太小瞧了!
  9. 量子机器公司获得1750万美元投资
  10. 全国2021年4月自考信息资源管理真题和答案