【嵌入式移植】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.hqwc.cn/news/470172.html

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

相关文章

开源≠不赚钱,开源软件盈利的7大模式。

开源不是目的,目的是圈用户,留住用户,盈利自然不成问题。 开源系统可以通过多种方式赚钱,以下是其中几种常见的方式: 提供付费支持: 开源系统可以提供付费的技术支持服务,包括安装、配置、维…

C语言学习day14:跳转语句

今天学习的跳转语句主要是三种: break continue goto 上一篇文章已经说过了break和continue break:结束这个循环 continue:结束当前的循环迭代,进行下一次的迭代 看看二者代码的区别 代码(break)&am…

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

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

猫头虎分享已解决Bug ‍ || TypeError: Object of type ‘int64‘ is not JSON serializable

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

debug - 打补丁 - 浮点数加法

文章目录 debug - 打补丁 - 浮点数加法概述笔记demo用CE查看汇编(x64debug)main()update_info()快捷键 - CE中查看代码时的导航打补丁的时机 - 浮点数加法补丁代码补丁效果浮点数寄存器组的保存END debug - 打补丁 - 浮点数加法 概述 在cm中, UI上显示的数值仅仅用来显示, 改…

Github用人工智能(AI)帮你的代码修正安全漏洞

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

《Linux 简易速速上手小册》第2章: 命令行的艺术(2024 最新版)

文章目录 2.1 基本 Linux 命令2.1.1 重点基础知识2.1.2 重点案例:整理下载文件夹2.1.3 拓展案例 1:批量重命名文件2.1.4 拓展案例 2:查找并删除特定文件 2.2 文件和目录管理2.2.1 重点基础知识2.2.2 重点案例:部署一个简单的网站2…

shumei 滑块 qd参数仿写记录

在对qd参数进行仿写的过程中,由于缺失很多js的基础知识,导致进展一度非常的缓慢,并且不知道自己的方向是不是正确的方向。在不知道自己的方向是否正确的时候,这个时候自己的投入的努力都是畏首畏尾。大概是一种,不知道…

qml报错: QML Frame: Cannot anchor to an item that isn‘t a parent or sibling.

1、错误一:qrc:/main.qml:30:5: QML Frame: Cannot anchor to an item that isnt a parent or sibling. QML的anchor必须定位父级对象或者同级对象,不能定位到其他如:同级对象的子对象。 //main.qml import QtQuick 2.0 import QtQuick.Con…

【sgSearch】自定义组件:常用搜索栏筛选框组件(包括表格高度变化兼容)。

sgSearch源码 <template><div :class"$options.name" :expand"expandSearch" :showCollapseBtn"showCollapseBtn"><!-- v-clickoutside"(d) > (expandSearch false)" --><ul class"search-list"&…

【初学者向导】轻松加入OnlyFans世界:一站式订阅与支付指南!掌握使用虚拟卡的订阅技巧

目录 1. 引言2. 注册OnlyFans账户3. 浏览OnlyFans内容4. 选择订阅时长5. 开通虚拟卡 5.1. 什么是虚拟信用卡5.2. 如何开通虚拟卡 6. 使用虚拟卡订阅7. 总结8. 常见问题 1. 引言 什么是OnlyFans&#xff1a;OnlyFans是一种内容订阅服务&#xff0c;成立于2016年&#xff0c;允…

Codeforces Round 924 (Div. 2) B - D

B. Equalize 题目&#xff1a; 思路&#xff1a;首先排序然后去重&#xff08;可以用set来去重&#xff09;&#xff0c;我们可以肯定的是&#xff0c;如果连续k个数最大值最小值的差小于等于n的话&#xff0c;那么这个长度为k的区间就符合答案要求&#xff0c;那么k就和答案…