uboot顶层Makefile前期所做工作说明四

这篇具有很好参考价值的文章主要介绍了uboot顶层Makefile前期所做工作说明四。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 一.  uboot顶层 Makefile文件

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

本文继续对 uboot顶层 Makefile的前期准备工作进行介绍。续上一篇文章内容的学习,如下:

uboot顶层Makefile前期所做工作说明三_凌肖战的博客-CSDN博客
 

本文主要 了解 uboot顶层 Makefile前期所做的部分工作, 包括如下内容:

Makefile文件中导出变量,具体涉及uboot 的顶层 Makefile中 几个变量的文件调动关系。

二.  Makefile 前期所做的内容

 11.  导出其他变量

接下来,在 顶层 Makefile中导出很多变量, 顶层 Makefile 内容如下:

371 export VERSION PATCHLEVEL SUBLEVEL UBOOTRELEASE UBOOTVERSION
372 export ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR
373 export CONFIG_SHELL HOSTCC HOSTCFLAGS HOSTLDFLAGS CROSS_COMPILE AS LD CC
374 export CPP AR NM LDR STRIP OBJCOPY OBJDUMP
375 export MAKE AWK PERL PYTHON
376 export HOSTCXX HOSTCXXFLAGS DTC CHECK CHECKFLAGS
377
378 export KBUILD_CPPFLAGS NOSTDINC_FLAGS UBOOTINCLUDE OBJCOPYFLAGS LDFLAGS
379 export KBUILD_CFLAGS KBUILD_AFLAGS

涉及一些变量的文件调用关系:

(1)  打印变量值

这些变量中大部分都已经在前面定义了,我们重点来看一下下面这几个变量,下面这几个变量在 顶层 Makefile 中是找不到的,变量如下:

ARCH CPU BOARD VENDOR SOC CPUDIR BOARDDIR

这 7 个变量在顶层 Makefile 是找不到的,说明这 7 个变量是在其他文件里面定义的,先来

看一下这 7 个变量都是什么内容。,即打印出这些变量的值。在顶层 Makefile 中输入如下内容:

uboot顶层Makefile前期所做工作说明四,嵌入式C开发,linux

进入 uboot 源码根目录下,打开Linux 终端,输入如下命令打印这些变量:

wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/uboot/alientek_uboot/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek$ make mytest
ARCH= arm
CPU= armv7
BOARD= mx6ull_alientek_nand
VENDOR= freescale
SOC= mx6
CPUDIR= arch/arm/cpu/armv7
BOARDDIR= freescale/mx6ull_alientek_nand

(2) 几个个变量的来源

uboot 根目录下,有个文件 config.mk,这 7 个变量就是在 config.mk 里面定义的,打开 config.mk 文件的部分内容如下(这里只列出了涉及变量的部分代码):

25 ARCH := $(CONFIG_SYS_ARCH:"%"=%)
26 CPU := $(CONFIG_SYS_CPU:"%"=%)
27 ifdef CONFIG_SPL_BUILD
28 ifdef CONFIG_TEGRA
29 CPU := arm720t
30 endif
31 endif
32 BOARD := $(CONFIG_SYS_BOARD:"%"=%)
33 ifneq ($(CONFIG_SYS_VENDOR),)
34 VENDOR := $(CONFIG_SYS_VENDOR:"%"=%)
35 endif
36 ifneq ($(CONFIG_SYS_SOC),)
37 SOC := $(CONFIG_SYS_SOC:"%"=%)
38 endif
39
40 # Some architecture config.mk files need to know what CPUDIR is set 
to,
41 # so calculate CPUDIR before including ARCH/SOC/CPU config.mk files.
42 # Check if arch/$ARCH/cpu/$CPU exists, otherwise assume 
arch/$ARCH/cpu contains
43 # CPU-specific code.
44 CPUDIR=arch/$(ARCH)/cpu$(if $(CPU),/$(CPU),)
45
46 sinclude $(srctree)/arch/$(ARCH)/config.mk 
47 sinclude $(srctree)/$(CPUDIR)/config.mk 
48
49 ifdef SOC
50 sinclude $(srctree)/$(CPUDIR)/$(SOC)/config.mk 
51 endif
52 ifneq ($(BOARD),)
53 ifdef VENDOR
54 BOARDDIR = $(VENDOR)/$(BOARD)
55 else
56 BOARDDIR = $(BOARD)
57 endif
58 endif
59 ifdef BOARD
60 sinclude $(srctree)/board/$(BOARDDIR)/config.mk # include board 
specific rules
61 endif

第 25 行 定 义 变 量 ARCH ,值为 $(CONFIG_SYS_ARCH:"%"=%) , 也 就 是 提 取

CONFIG_SYS_ARCH 里面双引号“”之间的内容。比如 CONFIG_SYS_ARCH=“arm”的话,

ARCH=arm。

下面的几行的功能类似。

46 sinclude include 的功能类似,在 Makefile 中都是读取指定文件内容,这里读取
文件 $(srctree)/arch/$(ARCH)/config.mk 的内容。 sinclude 读取的文件如果不存在的话不会报错。

接下来需要找到 CONFIG_SYS_ARCH、CONFIG_SYS_CPU、CONFIG_SYS_BOARD、

CONFIG_SYS_VENDORCONFIG_SYS_SOC 这 5 个变量的值。

这 5 个变量在 uboot 根目录下的 .config 文件中有定义,定义如下:

23 CONFIG_SYS_ARCH="arm"
24 CONFIG_SYS_CPU="armv7"
25 CONFIG_SYS_SOC="mx6"
26 CONFIG_SYS_VENDOR="freescale"
27 CONFIG_SYS_BOARD="mx6ullevk "
28 CONFIG_SYS_CONFIG_NAME="mx6ullevk"

从 上面的 .config 文件 可以看出,这些变量的值正好符合 顶层 Makefile中打印的几个变量值。

那么, config.mk文件中读取的文件有:

arch/arm/config.mk
arch/arm/cpu/armv7/config.mk
arch/arm/cpu/armv7/mx6/config.mk (此文件不存在)
board/ freescale/mx6ullevk/config.mk (此文件不存在)

三. 总结

1.   顶层 Makefile涉及几个变量的文件调用关系

顶层 Makefile 中涉及一些变量如 ARCH、CPU、 BOARD、 VENDOR 、SOC等等。这些变量涉及文件调用关系:

Makefile 来源于 config.mk 文件, config.mk 文件中涉及变量又来源于 .config 文件。

.config 文件是执行了 "make xxx_deconfig" 命令,即配置 uboot 源码以后生成的。

.config 文件来源

默认情况下,.configxxx_defconfig 内容是一样的,因为.config 就是从 xxx_defconfig 复制过来的。如果后续自行调整 了 uboot 的一些配置参数,那么这些新的配置参数就添加到了.config 中,而不是 xxx_defconfig。 相当于 xxx_defconfig 只是一些初始配置,而 .config 的内容才是实时有效的配置。
 

2.   Makefile前期所做的工作

uboot 顶层 Makefile前期所做的内容大体包括如下:

版本号,MAKEFLAGS 变量 、命令输出/静默输出、设置编译结果输出目录、

代码检查 、模块编译、获取主机架构和系统、(设置目标架构、交叉编译器和配置文件)、

交叉编译工具变量设置、调用 scripts/Kbuild.include、导出其他变量等。文章来源地址https://www.toymoban.com/news/detail-704315.html

到了这里,关于uboot顶层Makefile前期所做工作说明四的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ARM 嵌入式 编译 Makefile 系列 2 - Makefile 如何打印信息】

    请阅读 【ARM GCC Makefile 编译专栏导读】 下篇文章:【ARM 嵌入式 编译 Makefile 系列 2.1 - Makefile info,warn, error 打印详细介绍】 上篇文章:【ARM 嵌入式 编译 Makefile 系列 1 - Makefile 如何调用 shell 脚本】 在Makefile中,我们可以使用echo命令来打印信息。这种方法适用于大多数的 UNI

    2024年02月12日
    浏览(50)
  • 基于RK3588的嵌入式linux系统开发(二)——uboot源码移植及编译

            由于官方的SDK占用空间较大(大约20GB左右),需要联系相关供应商提供,且官方的SDK通过各种脚本文件进行集成编译,难以理解系统开发的详细过程。本章介绍直接从官方Github网站下载源码进行移植,进行uboot移植及编译,具体内容如下所述: 1.进入官方的github网

    2024年01月16日
    浏览(61)
  • 【ARM 嵌入式 编译 Makefile 系列 16 - Makefile 伪目标.PHONY 与 FORCE 详细介绍】

    请阅读 【ARM GCC Makefile 编译专栏导读】 .PHONY 是GNU make的一个特殊目标,它用来指定那些不产生文件的目标。如果一个目标被声明为 .PHONY ,那么make命令会忽略这个目标的文件名,即使在文件系统中存在同名的文件,make命令也会每次都执行这个目标的命令 在 Makefile 中, 目标

    2024年02月12日
    浏览(44)
  • 基于RK3588的嵌入式linux系统开发(五)——uboot优化修改(按任意按键停止autoboot)

            我们通常情况下,芯片进入uboot后,会根据设置的bootdelay时间进行倒数计数。这时候在终端按任意键,即可退出autoboot,进入uboot的命令行模式。         官方提供的uboot源码中,为了防止调试串口干扰导致不能进入系统,使用“Ctrl+c”的组合键来退出autoboot。本

    2024年02月10日
    浏览(58)
  • 嵌入式Linux驱动开发系列六:Makefile

    Makefile是什么? gcc hello.c -o hello gcc aa.c bb.c cc.c dd.c ... make工具和Makefile make和Makefile是什么关系? make工具:找出修改过的文件,根据依赖关系,找出受影响的相关文件,最后按照规则单独编译这些文件。 Makefile文件:记录依赖关系和编译规则。 必须要学精Makefile吗? 怎么学习Makefi

    2024年02月13日
    浏览(59)
  • 嵌入式 Linux 入门(十一、make 和 MakeFile)

    Linux 系列距离上一篇文章已经半年多了,因为各种事情一直耽搁到现在,很多小伙伴都问了好些次,一直在等着,感谢大家支持! 确实时间拖得太久了,是时候重新加油起来! 简单理了理思路,通过一篇简单点的文章过度一下,上一篇讲到了 Linux 下的 C 编程, 本文就要引出

    2024年02月06日
    浏览(54)
  • 00.嵌入式笔记——初识make工具和Makefile文件

    make是解决大工程编译的工具,描述哪些文件需要编译、哪些需要重新编译的文件就叫做 Makefile,Makefile 就跟脚本文件一样,Makefile 里面还可以执行系统命令。我们使用的时候只需要一个make命令即可完成整个工程的自动编译,极大的提高了软件开发的效率。 Makefile 的引入 如果

    2024年02月08日
    浏览(50)
  • 嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)

    最近在学习正点原子嵌入式Linux开发板uboot的移植实验,移植完之后想测试网络部分的驱动能否工作正常。最后经过测试发现tftp可以正常下载,nfs却一直报错无法下载文件,最后也是折磨了两天才解决了问题,特写下此博客进行记录、总结。 我的轻薄本没有网口,事先买了一

    2024年01月20日
    浏览(41)
  • 【嵌入式Linux】编译应用和ko内核模块Makefile使用记录

    在Makefile中,变量的赋值可以使用以下几种方式: = :最基本的赋值符号,表示简单的延迟展开(lazy expansion)方式。变量的值将会在使用变量的时候进行展开。 := :立即展开(immediate expansion)的赋值方式。变量的值在赋值的时候立即展开,并且在后续的使用中不再改变。

    2024年02月08日
    浏览(53)
  • 【C语言】嵌入式C语言项目管理利器:深入理解Makefile的应用与实践

    目录 一、makedile的概述 1、案例引入 2、makefile  3、Makefile优点 二、makefile的语法规则  1、语法规则 2、简单实战 三、makefile的变量 1、自定义变量 2、系统环境变量 3、预定义变量 4、高级makefile gcc a.c b.c c.c ‐o main 如果只修改了b.c 使用gcc编译 需要对所有文件重新编译。makefi

    2024年02月15日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包