【嵌入式移植】6、U-Boot源码分析3—make

U-Boot源码分析3—make

  • `all`

从【嵌入式移植】4、U-Boot源码分析1—Makefile文章中可知执行make命令的时候,没有指定目标则使用默认目标PHONYPHONY依赖项为_all all scripts_basic outputmakefile scripts dtbs

all

Makefile中第129行指定默认目标PHONY依赖_all,第198行指定_all依赖于all,第859行指明all依赖于$(ALL-y) cfg,而在第768行:
请添加图片描述
最终ALL-y的值为

ALL-y = checkarmreloc u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check spl/u-boot-spl.bin u-boot.img u-boot.dtb u-boot-dtb.img u-boot.itb

ALL-y包含checkarmrelocu-boot.srecu-boot.binu-boot.symSystem.mapbinary_size_checkspl/u-boot-spl.binu-boot.imgu-boot.dtbu-boot-dtb.imgu-boot.itb

这些目标具体是什么用处呢,结合【嵌入式移植】3、编译U-Boot中U-Boot的编译和烧写过程,最终是将编译生成的sunxi-spl.binu-boot.itb烧写到SD卡上

其中u-boot.itbALL-y已经有了,那么sunxi-spl.bin又是怎么来的呢

查看编译过程
请添加图片描述
原来sunxi-spl.bin是使用MKSUNXI这个工具制作的,查看详细的编译过程输出,找到对应的语句(这里可以使用make CROSS_COMPILE=aarch64-linux-gnu- V=1语句输出详细的编译过程,单独保存下来查看)
请添加图片描述
原来sunxi-spl.bin是使用tools目录下的mksunxiboot工具,由spl/u-boot-spl.bi制作而来;而查看顶层Makefilespl/u-boot-spl.bi依赖于spl/u-boot-spl,而spl/u-boot-spl执行的命令为

spl/u-boot-spl: tools prepare \$(if $(CONFIG_OF_SEPARATE)$(CONFIG_SPL_OF_PLATDATA),dts/dt.dtb) \$(if $(CONFIG_OF_SEPARATE)$(CONFIG_TPL_OF_PLATDATA),dts/dt.dtb)$(Q)$(MAKE) obj=spl -f $(srctree)/scripts/Makefile.spl all

前几行为准备编译所需工具,最后一行执行scripts/Makefile.spl,目标为all

进入scripts/Makefile.spl文件,目标all依赖于$(ALL-y),而$(ALL-y)包括$(obj)/$(SPL_BIN).bin$(obj)/sunxi-spl.bin等,其实即需编译生成$(obj)/$(SPL_BIN).bin=spl/u-boot-spl.bin

查看$(obj)/$(SPL_BIN).bin依赖,根据变量定义,在scripts/Makefile.spl第232行~233行:

$(obj)/$(SPL_BIN).bin: $(obj)/$(SPL_BIN)-nodtb.bin FORCE$(call if_changed,copy)

可知spl/u-boot-spl.bin$(obj)/$(SPL_BIN)-nodtb.bin制作(与编译输出匹配cp spl/u-boot-spl-nodtb.bin spl/u-boot-spl.bin

在第303行~304行:

$(obj)/$(SPL_BIN)-nodtb.bin: $(obj)/$(SPL_BIN) FORCE$(call if_changed,objcopy)

可知spl/u-boot-spl-nodtb.bin$(obj)/$(SPL_BIN)通过编译工具aarch-linux-gnu-objcopy制作,对应编译过程输出为:

aarch64-linux-gnu-objcopy -j .text -j .secure_text -j .secure_data -j .rodata -j .data -j .u_boot_list -j .rela.dyn -j .got -j .got.plt -j .dtb.init.rodata -j .efi_runtime -j .efi_runtime_rel  -O binary  spl/u-boot-spl spl/u-boot-spl-nodtb.bin

在第356行~358行:

$(obj)/$(SPL_BIN): $(u-boot-spl-platdata) $(u-boot-spl-init) \$(u-boot-spl-main) $(obj)/u-boot-spl.lds FORCE$(call if_changed,u-boot-spl)

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

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

相关文章

十大免费 Word 转 PDF 转换器工具榜单

将 Word 转换为 PDF 格式可以帮助您在不同操作系统之间轻松共享文件。无论您是发送重要备忘录、为客户开具发票、以一致的格式维护客户记录等等,PDF 都属于最流行且安全的文件格式。当您将 Word 文档转换为 PDF 格式时,您的项目会自动优化且更加紧凑。可…

腾讯云4核8G服务器够用吗?能支持多少人?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

ELAdmin 部署

后端部署 按需修改 application-prod.yml 例如验证码方式、登录状态到期时间等等。 修改完成后打好 Jar 包 执行完成后会生成最终可执行的 jar。JPA版本是 2.6,MyBatis 版本是 1.1。 启动命令 nohup java -jar eladmin-system-2.6.jar --spring.profiles.active…

JDBC教程+数据库连接池

JDBC 1.JDBC概述 ​ JDBC,全称Java数据库连接(Java DataBase Connectivity),它是使用Java语言操作关系型数据库的一套API。 ​ JDBC本质是官方(原SUN公司,现ORACLE)定义的一套操作所有关系型数…

Flutter 网络请求之Dio库

Flutter 网络请求之Dio库 前言正文一、配置项目二、网络请求三、封装① 单例模式② 网络拦截器③ 返回值封装④ 封装请求 四、结合GetX使用五、源码 前言 最近再写Flutter系列文章,在了解过状态管理之后,我们再来学习一下网络请求。 正文 网络请求对于一…

starknet之 class_hash

文章目录 问题背景什么是Class Hash问题背景 部署合约报错:ReferenceError: Buffer is not defined 什么是Class Hash 官方: https://book.starknet.io/ch04-03-01-deploy-standard-account.html?highlight=class%20hash#finding-the-class-hash 要部署智能合约,您需要在…

微软在其Windows系统中暗示了AI的未来,推出了更聪明的Copilot功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

批量梯度下降、随机梯度下降、小批量梯度下降

一、批量梯度下降(Batch Gradient Descent,BGD) 在批量梯度下降中,每次迭代都使用整个训练集的数据进行梯度计算和参数更新。也就是说,每次迭代都对所有的样本求取梯度,然后更新参数。由于要处理整个训练集&#xff0c…

刷题计划_冲绿名

现在 rating 是 1104 准备刷 100道 1200的题,把实力提升到 1200 ,上一个绿名 每一个分数段的题都写一百道,争取早日上蓝 现在 虽然 cf 里面显示写了一些这个分数段的题,但是自己训练的时候,其实是没有训练一道这个分…

【Py/Java/C++三种语言详解】LeetCode每日一题240214【二叉树BFS】LeetCode102、二叉树的层序遍历

有LeetCode交流群/华为OD考试扣扣交流群可加:948025485 可上全网独家的 欧弟OJ系统 练习华子OD、大厂真题 绿色聊天软件戳 od1336了解算法冲刺训练 文章目录 题目链接题目描述解题思路DFS和BFS异同用队列维护的BFS 代码PythonJavaC时空复杂度 相关习题华为OD算法/大…

Linux 基础/子目录分配/文件路径

在Linux系统中,整个系统只具有一个根目录“/”,用斜杠表示。根目录是整个文件系统的顶层目录,在他下面可以创建其他的目录和文件。 Linux中的子目录分配: /bin - 基本命令的二进制文件,这些命令可供所有用户使用&am…

MySQL主从环境,主库改端口后,从库如何操作?

主库:mysql-111 从库:mysql-112 主库由3306端口修改成3307后, 从库执行如下命令 mysql> stop slave; mysql> change master to master_port3307; mysql> CHANGE MASTER TO MASTER_HOST192.168.10.111,MASTER_USERbeifen,MASTER_PA…

生活中有很多压力,怎么办?

在这篇文章的最开始,我想跟你一起做一个思维实验: 假如现在有一个按钮,按下去之后,你会过上一段新的生活。这段生活的走向跟你原本生活的走向大体一样,不同之处在于:它会消除你未来生活中的一切压力。你将不…

BUGKU-WEB 矛盾

题目描述 进入场景看看: 代码如下: $num$_GET[num]; if(!is_numeric($num)) { echo $num; if($num1) echo flag{**********}; }解题思路 需要读懂一下这段PHP代码的意思明显是一道get相关的题目,需要提供一个num的参数,然后需要传入一个不…

【PyQt】12-滑块、计数控件

文章目录 前言一、滑块控件 QSlider运行结果 二、计数器控件 QSpinBox运行结果 总结 前言 1、滑块控件 2、计数控件 一、滑块控件 QSlider #Author :susocool #Creattime:2024/2/15 #FileName:28-滑块控件 #Description: 通过滑块选择字体大小 import sys from PyQ…

数字的魅力之情有独钟的素数

情有独钟的素数 什么是素数 素数(Prime number)也称为质数,是指在非0自然数中,除了1与其本身之外不拥有其他因数的自然数。也就是说,素数需要满足两个条件: 大于1的整数;只拥有1和其自身两个…

精读Relational Embedding for Few-Shot Classification (ICCV 2021)

Relational Embedding for Few-Shot Classification (ICCV 2021) 一、摘要 该研究提出了一种针对少样本分类问题的新方法,通过元学习策略来学习“观察什么”和“在哪里关注”。这种方法依赖于两个关键模块:自相关表示(SCR)和交叉…

统一数据返回格式 及 可能遇到的问题;统一异常处理

统一数据返回格式 统一数据返回格式就像我们寄快递一样&#xff0c;不管你需要寄的东西具体是什么都需要将它打包到统一的快递箱中。 此时我们需要一个“快递箱”用来将返回的数据“装”在里面。这个类是根据业务情况来自行定义的。 Data public class Resp<T> {//200…

[嵌入式AI从0开始到入土]14_orangepi_aipro小修补含yolov7多线程案例

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注&#xff1a;等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间&#xff0c;后期会考虑出视频教程&#xff0c;务必催更&#xff0c;以防我变身鸽王。 第1期 昇腾Altas 200 DK上手 第2期 下载昇腾案例并运行 第3期 官…

PHP毕业设计图片分享网站76t17

图片分享网站主要是为了提高工作人员的工作效率和更方便快捷的满足用户&#xff0c;更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性&#xff0c;遵循开发的系统优化的原则&#xff0c;…