Linux第25步_在虚拟机中备份“ST官方的TF-A源码”
TF-A是ARM公司提供的,ST公司通过修改它,做了一个自己的TF-A代码。因为在后期开发中,若硬件被改变了,我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了,我们需要将"ST官方的TF-A源码"进行备份。
TF-A全称是Arm Trusted Firmware,有些资料也叫做ATF,一般中文资料叫做ARM可信固件。MP1内部集成了TrustZone,因此ST也提供了TF-A相关源码。
TF-A会先初始化DDR等外设,把Uboot从Flash(NAND、NOR FLASH、SD、MMC 等)拷贝到 DDR 中。
如果我们直接去官方网站下载TF-A的源码,这样的开发难度太大。半导体厂商都会从TF-A官网下载源码,然后修改适配自己的芯片,把自家的芯片加进去。因此,我们可以直接使用半导体原厂给提供的TF-A即可。
ST官方TF-A、uboot、kernel等源码下载链接为:
https://my.st.com/content/my_st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm32-embedded-software/stm32-mpu-openstlinux-distribution/stm32mp1dev.html
记得我们已经创建过的目录,如下:
在根目录下,创建一个“linux”目录。
在“linux” 目录下,创建一个“nfs”的文件夹,用来供nfs服务器使用,便于”我们的开发板“上通过”网络文件系统“来访问这个”nfs“文件夹。
在linux目录下,创建一个”tool“文件夹,,创建tool文件夹,用来存放“Ubutun交叉编译工具链”。
现在,我们还需要创建几个目录:
在“linux”目录下创建“atk-mp1”目录;
在“/linux/atk-mp1/”目录下创建“tf-a”目录;
在“/linux/atk-mp1/”目录下,创建“my-tfa”目录,用来保存“ST官方的TF-A源码”;
1、打开终端
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd linux回车”,切换到“linux”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“mkdir atk-mp1回车”,在“linux”目录下创建“mkdir atk-mp1”目录
输入“ls回车”,列出当前目录下所有的文件和文件夹

2、将“ST官方的TF-A源码”
“en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz” 压缩包,使用FileZilla把它拷贝到“atk-mp1”目录下。见下图:

见下图上传中:

上传成功后,见下图:
3、输入“cd atk-mp1回车”,切换“atk-mp1”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹

4、输入下面的命令
输入“tar -xvf en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz回车”,解压该文件。
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/回车”
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd sources/回车”,切换到“sources”目录下
输入“ls回车”,列出当前目录“sources”目录下所有的文件和文件夹
输入“cd arm-ostl-linux-gnueabi/回车”,切换到“arm-ostl-linux-gnueabi”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹


tf-a-stm32mp-2.2.r1-r0支持ST所有的所有的STM32MP1芯片,也支持各种启动方式例如:EMMC、 NAND、NOR FLASH 等。tf-a-stm32mp-2.2.r1-r0里面包含了ST自家所有的MP1评估板,后续的移植都是以STM32MP157C-EV1开发板为蓝本,在此基础上进行修改。
5、输入“cd tf-a-stm32mp-2.2.r1-r0/回车”,切换到“tf-a-stm32mp-2.2.r1-r0”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“ls回车”,输入“ls -l回车”


6、输入“tar -vxf tf-a-stm32mp-2.2.r1-r0.tar.gz回车”,解压。
输入“ls回车”,列出“tf-a-stm32mp-2.2.r1-r0”目录下所有的文件和文件夹

7、输入“cd tf-a-stm32mp-2.2.r1/回车”,切换到“tf-a-stm32mp-2.2.r1”目录下
输入“ls回车”,列出“tf-a-stm32mp-2.2.r1”目录下所有的文件和文件夹
输入“for p in `ls -1 ../*.patch`; do patch -p1 < $p; done回车”
说明:“for p in `ls -1 ../*.patch`; do patch -p1 < $p; done回车”,这条命令的意思是把上一层目录下的所有“.patch”后缀的文件都通过patch命令打补丁到TF-A的源码目录,在这里就是将001-st-update-v2.2-r2.0.0.patch这个补丁打入到 TF-A源码里面。由于“ST官方源码”的目录实在太长了,为了方便调试,在 atk-mp1目录下创建一个名为“tf-a”的子目录,然后将打完补丁的 tf-a-stm32mp-2.2.r1-r0目录下的所有文件都拷贝到 “tf-a”目录下。
8、我们再另外打开一个新的终端
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd linux/回车”,切换到“linux”目录下;
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd atk-mp1/回车”,切换到“atk-mp1”目录下;
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“mkdir tf-a/回车”,在“atk-mp1”目录下创建“tf-a”目录;
输入“ls回车”,列出“tf-a”目录下所有的文件和文件夹
输入“cd stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/回车”,切换到“stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24”目录下;
输入“ls回车”,列出“stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24”目录下所有的文件和文件夹
输入“cd sources/回车”,切换到“sources”目录下;
输入“ls回车”,列出“sources”目录下所有的文件和文件夹

输入“cd arm-ostl-linux-gnueabi/回车”,切换到“arm-ostl-linux-gnueabi”目录下;
输入“ls回车”,列出“arm-ostl-linux-gnueabi”目录下所有的文件和文件夹
输入“cd tf-a-stm32mp-2.2.r1-r0/回车”,切换到“tf-a-stm32mp-2.2.r1-r0”目录下;
输入“ls回车”,列出“tf-a-stm32mp-2.2.r1-r0”目录下所有的文件和文件夹
输入“cp * /home/zgq/linux/atk-mp1/tf-a/ -rf回车”,拷贝文件到tf-a
输入“cd ..回车”,返回至上层目录,到达“arm-ostl-linux-gnueabi”目录
输入“cd ..回车”,返回至上层目录,到达“sources”目录下
输入“cd ..回车”,返回至上层目录,到达“stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24”目录下
输入“ls回车”,列出“stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24”目录下所有的文件和文件夹
输入“cd ..回车”,返回至上层目录,到达“atk-mp1”目录下
输入“ls回车”,列出“atk-mp1”目录下所有的文件和文件夹
输入“cd tf-a回车”,切换到“tf-a”目录下;
输入“ls回车”,列出“tf-a”目录下所有的文件和文件夹

9、创建TF-A工作区
1)在Ubuntu桌面,找到Visual Studio Code,在图标上右击鼠标,点击“打开”,见下图:

得到下图:

2)点击“文件”,再点击“打开文件夹”,见下图:

3)点击下图中的“其他位置”

4)点击“计算机”,点击“home” ,点击“zgq”,点击“linux”,点击“atk_mp1”,点击“tf-a”,见下图:

5)点击 “确定”,得到下面的界面:

6)将“欢迎使用”关闭,再点击“文件”,点击“将工作区另存为…”,见下图操作:

得到下图:
7)输入“tf-a”,再点击“保存”

得到下图,可见到tf-a.code-workspace工作区间文件:

10,在/linux/atk-mp1/目录下创建my-tfa目录,用来保存“ST官方的TF-A源码”。
1)打开终端
2)输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd linux/回车”,切换到“linux”目录下;
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd atk-mp1/回车”,切换到“atk-mp1”目录下;
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“mkdir my-tfa/回车”,在“/linux/atk-mp1/”目录下创建“my-tfa”目录,用来保存“ST官方的TF-A源码”;
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd tf-a/回车”,切换到“tf-a”目录下;
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cp * /home/zgq/linux/atk-mp1/my-tfa/ -rf回车”,拷贝到“my-tfa”目录中,用来保存“ST官方的TF-A源码”;
输入“cd ..回车”,返回至上层目录,到达“atk-mp1”目录下
输入“ls回车”,列出当前目录下所有的文件和文件夹
输入“cd my-tfa回车”,切换到“my-tfa”目录
输入“ls -l回车”
至此,在虚拟机中,备份“ST官方的TF-A源码”完成。
注意:
目前,“my-tfa”目录和“tf-a”目录里的内容完全相同,用来备份“ST官方的TF-A源码”。
将来“tf-a”目录里的内容需要被用来修改,用作自己的tf-a。
相关文章:
Linux第25步_在虚拟机中备份“ST官方的TF-A源码”
TF-A是ARM公司提供的,ST公司通过修改它,做了一个自己的TF-A代码。因为在后期开发中,若硬件被改变了,我们需要通过修改"ST官方的TF-A源码"就可以自己的TF-A代码了。为了防止源文件被误改了,我们需要将"S…...
统计学-R语言-4.1
文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要,已有的R包或函数不能满足,可以在R中编写自己的函数。函数的定义格式如下所示: …...
C++(1) —— 基础语法入门
目录 一、C初识 1.1 第一个C程序 1.2 注释 1.3 变量 1.4 常量 1.5 关键字 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 关键字 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三…...
构建基于RHEL8系列(CentOS8,AlmaLinux8,RockyLinux8等)的支持63个常见模块的PHP8.1.20的RPM包
本文适用:rhel8系列,或同类系统(CentOS8,AlmaLinux8,RockyLinux8等) 文档形成时期:2023年 因系统版本不同,构建部署应略有差异,但本文未做细分,对稍有经验者应不存在明显障碍。 因软件世界之复杂和个人能力…...
Vue-插槽(Slots)
1. 介绍 在Vue.js中,插槽是一种强大的功能,它允许你创建可重用的模板,并在使用该模板的多个地方插入自定义内容。 插槽为你提供了一种方式,可以在父组件中定义一些“插槽”,然后在子组件中使用这些插槽,插…...
新火种AI|GPT-5前瞻!GPT-5将具备哪些新能力?
作者:小岩 编辑:彩云 Sam Altman在整个AI领域,乃至整个科技领域都被看作是极具影响力的存在,而2023年OpenAI无限反转的宫斗事件更是让Sam Altman刷足了存在感,他甚至被《时代》杂志评为“2023年度CEO”。 也正因此&…...
安防视频监控系统EasyCVR设备分组中在线/离线数量统计的开发与实现
安防视频监控EasyCVR系统具备较强的兼容性,它可以支持国标GB28181、RTSP/Onvif、RTMP,以及厂家的私有协议与SDK,如:海康ehome、海康sdk、大华sdk、宇视sdk、华为sdk、萤石云sdk、乐橙sdk等。EasyCVR平台可覆盖多类型的设备接入&am…...
spring cloud之集成sentinel
写在前面 源码 。 本文一起看下spring cloud的sentinel组件的使用。 1:准备 1.1:理论 对于一个系统来说,最重要的就是高可用,那么如何实现高可用呢?你可能会说,集群部署不就可以了,但事实并…...
让车辆做到“耳听八方”,毫米波雷达芯片与系统设计
摘要: 毫米波雷达,是指工作在毫米波波段(一般为30~300GHz频域,波长1~10mm)探测的雷达。毫米波雷达体积小、质量轻、空间分辨率高,穿透“雾烟灰”的能力强,还具备全天候全天时工作的优势。在智能网联汽车体系中,毫米波雷达是系统感知层不可或缺的重要硬件,能让智能驾…...
Python如何实现数据驱动的接口自动化测试
大家在接口测试的过程中,很多时候会用到对CSV的读取操作,本文主要说明Python3对CSV的写入和读取。下面话不多说了,来一起看看详细的介绍吧。 1、需求 某API,GET方法,token,mobile,email三个参数 token为必填项mobil…...
高级分布式系统-第15讲 分布式机器学习--联邦学习
高级分布式系统汇总:高级分布式系统目录汇总-CSDN博客 联邦学习 两种常见的架构:客户-服务器架构和对等网络架构 联邦学习在传统的分布式机器学习基础上的变化。 传统的分布式机器学习:在数据中心或计算集群中使用并行训练,因为…...
小程序基础学习(事件处理)
原理:组件内部设置点击事件,然后冒泡到页面捕获点击事件 在组件内部设置点击事件 处理点击事件,并告诉页面 页面捕获点击事件 页面处理点击事件 组件代码 <!--components/my-info/my-info.wxml--> <view class"title"…...
网络协议与攻击模拟_01winshark工具简介
一、TCP/IP协议簇 网络接口层(没有特定的协议) 物理层:PPPOE宽带拨号(应用场景:宽带拨号,运营商切网过来没有固定IP就需要拨号,家庭带宽一般都采用的是拨号方式)数据链路层网络层…...
【linux学习笔记】网络
目录 【linux学习笔记】网络检查、监测网络ping-向网络主机发送特殊数据包traceroute-跟踪网络数据包的传输路径netstat-检查网络设置及相关统计数据 通过网络传输文件ftp 【linux学习笔记】网络 检查、监测网络 ping-向网络主机发送特殊数据包 最基本的网络连接命令就是pin…...
JUC-线程中断机制和LockSupport
线程中断机制 概念 java提供了一种用于停止线程的协商机制-中断。称为中断标识协商机制。 常用API public void interrupt() 仅仅让线程的中断标志位设置为true。不进行其他操作。public boolean isInterrupted() 获取中断标志位的状态。public static boolean interrupted…...
哈希表与哈希算法(Python系列30)
在讲哈希表数据结构和哈希算法之前,我想先刨析一下数组和python中的列表 首先来讲一下数组,我想在这提出一个疑问: 为什么数组通过索引查询数据的时间复杂度为O(1),也就是不管数组有多大,算法的执行时间都是不变的。…...
『 C++ 』AVL树详解 ( 万字 )
🦈STL容器类型 在STL的容器中,分为几种容器: 序列式容器(Sequence Containers): 这些容器以线性顺序存储元素,保留了元素的插入顺序。 支持随机访问,因此可以使用索引或迭代器快速访问任何位置的元素。 主要的序列式…...
Python下载安装pip方法与步骤_pip国内镜像
前提:下载安装好 python 打开命令提示符winR->cmd(不需要进入 python,直接在终端输入指令执行即可,也可以再 pycharm 终端执行命令)加入要安装ipython,需要执行以下命令: pip install **<…...
自动化测试框架pytest系列之基础概念介绍(一)
如果你要打算学习自动化测试 ,无论是web自动化、app自动化还是接口自动化 ,在学习的道路上,你几乎会遇到pytest这个测试框架,因为自动化编写没有测试框架,根本玩不了 。 如果你已经是一位自动化测试人员 ,…...
编码技巧:如何在Golang中高效解析和生成XML
编码技巧:如何在Golang中高效解析和生成XML 引言Golang中的XML基础解析XML文件生成XML文件错误处理和调试高级技巧和最佳实践总结 引言 在当今数据驱动的编程世界中,有效地处理各种数据格式是每个开发人员必备的技能之一。其中,XMLÿ…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...
土建施工员考试:建筑施工技术重点知识有哪些?
《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目,核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容,附学习方向和应试技巧: 一、施工组织与进度管理 核心目标: 规…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor
1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...
