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

news2025/1/22 19:47:59

 一.  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 源码根目录下,打开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、导出其他变量等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/996501.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息系统项目管理师(第四版)教材精读思维导图-第十二章项目质量管理

请参阅我的另一篇文章,综合介绍软考高项: 信息系统项目管理师(软考高项)备考总结_计算机技术与软件专业技术_铭记北宸的博客-CSDN博客 本章思维导图源文件 ​ 12.1 管理基础 12.2 管理过程 12.3 规划质量管理 12.4 管理质量 12.5…

增强 CAD Exchanger SDK 中 B-rep 表示的渲染性能

增强 CAD Exchanger 中 B-rep 表示的渲染性能 在这篇博文中,我们将深入探讨增强 CAD Exchanger 产品中 B-rep 表示的渲染性能的主题,探讨此过程中面临的挑战,并讨论 CAD Exchanger 所采用的创新技术来优化它。 在 版本 3.20中,我…

第7篇 vue的模块化与label的转换

一 label的转换 1.1 label的转换 二 模块化 2.1 模块化 前端中,js文件调用js文件,js文件之间的调用,即就是模块化。 2.2 案例1 1.新建工程并初始化 2. 编写脚本 1.js // 定义成员: const sum function(a,b){return parseIn…

持安零信任加入PKS体系生态联盟,共创办公安全新生态

近日,PKS体系生态联盟公布最新一期会员单位名单,零信任办公安全领域的明星企业持安科技成为其网络安全领域新增会员,未来将与众多合作伙伴一同建设网络安全强国。 PKS体系生态联盟是在中国电子信息产业集团有限公司的倡议下,广泛联…

Redis数据库安装、使用、数据类型、常用命令(详解)

安装 Releases tporadowski/redis GitHub 直接去选择msi格式的,窗口式的安装,一步一步。 安装过程中有一个选项是问你需不需要配置到环境变量中,选上这个选项,不选的话,需要自己去配环境变量。 检查是否安装配置…

腾讯云CVM S5服务器性能如何?CPU计算性能测评

腾讯云服务器CVM标准型S5实例具有稳定的计算性能,CVM 2核2G S5活动优惠价格280.8元一年自带1M带宽,15个月313.2元、2核4G配置748.2元15个月,CPU内存配置还可以选择4核8G、8核16G等配置,公网带宽可选1M、3M、5M或10M,百…

如何修改jupyter notebook默认打开路径

1、用jupyter notebook在其他位置打开自己的ipython项目: jupyter notebook是一个很好用的工具,可以保存运行结果,还可以给项目添加很多可视化操作与介绍文字。安装anaconda后,jupyter notebook就会自动安装,点开它会…

进入大厂测试一年后的经历和感触

从去年决定跳出舒适区,应聘大厂,截止到目前已经将近一年,值此之际,总结下自己近一年在大厂的经历。希望通过我的感触,能够帮助你们进一步了解大厂的测试工作。 1、维护上下游合作关系 在大厂,人际关系非常…

山西电力市场日前价格预测【2023-09-11】

日前价格预测 山西日前电力价格预测 预测说明: 如上图所示,预测明日(2023-09-11)山西电力市场全天平均日前电价为346.35元/MWh。其中,最高日前电价为383.36元/MWh,预计出现在19: 15。最低日前电价为313.95…

力扣 8049. 判断能否在给定时间到达单元格

Problem: 8049. 判断能否在给定时间到达单元格 文章目录 思路复杂度Code 思路 数学思维去写这道题 复杂度 时间复杂度: 添加时间复杂度, 示例: O ( 1 ) O(1) O(1) Code class Solution { public:bool isReachableAtTime(int sx, int sy, int fx, int fy, int t)…

MYSQL的慢查询

通过查询SQL的执行频次,我们就能够知道当前数据库到底是增删改为主,还是查询为主。 那假如说是以查询为主,次数我们可以借助于慢查询日志。接下来,我们就来介绍一下MySQL中的慢查询日志。 慢查询日志 慢查询日志记录了所有执行时间…

代码随想录二刷回溯算法-组合问题总结

回溯算法实际上也是一种暴力算法,利用树型结构的回溯与剪枝从而解决问题 解题步骤主要分三步:1.确立回溯函数的参数 2.确立终止条件 3.确立单层遍历逻辑 组合问题 77. 组合 这道题目就是经典的组合问题 如果我们使用for循环来进行暴力求解&#xff…

spring boot-Resolved element must not contain multiple elements 警告

首先强调一下,此问题不影响程序运行。 报错信息: package org.springframework.util; ...public abstract class Assert ...public static void state(boolean expression, String message) {if (!expression) {throw new IllegalStateException(messa…

融合康养产业、乐享宜居灞桥,西安市灞桥康养论坛即将举办

随着我国人口老龄化进程的不断加速以及人们的健康意识不断提高,我国康养产业逐步发展壮大。9月15日,以“融合康养产业、乐享宜居灞桥”为主题的灞桥康养论坛将在西安市灞桥区盛大召开。 据悉,此次论坛由西安市人民政府、陕西省民政厅主办&am…

2024浙大MEM提面拿优秀笔试如何冲刺备考

浙大工程师学院对于参加浙大提前批面试并获得优秀资格的考生,提供了一个“笔试达到联考国家线即可拟录取”的优惠政策。这确实是吸引很多MEM考生参加提前批面试的原因之一。但是,即使获得了优秀资格,考生仍然需要在后续的联考笔试中达到一定的…

JAVASE 窗口按钮

本文目录 1、前言2、JFrame、JButton3、JLabl4、ImageIcon 1、前言 java提供了很多已经写好了的类供我们使用,而我们没必要去细腻研究它的构成原理,就好比我们让我们编程让机器人动起来,没必要细腻研究机器人每个器件是怎么做出来的一样&…

免杀对抗-ShellCode上线+回调编译执行+混淆变异算法

C/C --ShellCode-免杀对抗 介绍: shellcode是一段用于利用软件漏洞而执行的代码,shellcode为16进制的机器码,因为经常让攻击者获得shell而得名。我们经常在CS里面生成指定编程语言的payload,而这个payload里面就是一段十六进制的机…

Centos7 完全断网离线环境下安装MySQL 8.0.33 图文教程

Centos7 完全断网离线环境安装MySQL 8.0.33 图文教程 1.1前言1.2 下载离线安装包1.3 将下载好的离线安装包上传到Centos 7 服务器1.3.1 方式一:联网环境下可利用rz命令进行文件上传1.3.2 方式二:断网环境下使用 XFtp 等软件工具进行上传1.4 解压安装包1.5 执行安装脚本1.6 重…

《极客时间:数据结构与算法之美》【数据结构与算法】

本篇博客是学习过程中的笔记整理和个人思考。原文链接:https://time.geekbang.org/column/intro/100017301 开篇词 | 从今天起,跨过“数据结构与算法”这道坎01 | 为什么要学习数据结构和算法?02 | 如何抓住重点,系统高效地学习数…

CTF入门学习笔记——Crypto密码(古典密码)

文章目录 CTF入门学习笔记——Crypto密码(古典密码)凯撒密码看我回旋踢 摩斯密码摩斯 维吉尼亚密码Vigenre 栅栏密码篱笆墙的影子 栅栏密码篱笆墙的影子 猪圈密码待补充 CTF入门学习笔记——Crypto密码(古典密码) 🚀&a…