Linux第28步_编译“正点原子的TF-A源码”

编译“正点原子的TF-A源码”,目的是想得到TF-A文件,即“tf-a-stm32mp157d-atk-trusted.stm32”。

在前27步的基础上,才可以学习本节内容,学习步骤如下:

1、创建“alientek_tf-a”目录;

2、复制正点原子的“设备树文件”和“设备树头文件 :

3、修改正点原子的“设备树文件stm32mp157d-atk.dts

4、修改正点原子的“设备树头文件stm32mp157d-atk.dtsi

1)修改“电源管理”设备树

2)修改“TF卡和EMMC设备树

3)修改“USB OTG设备树

5、编译

一、创建“alientek_tf-a”目录,用来存放“正点原子的TF-A源码”

记得我们在前面已经创建过的目录如下:

1)、在根目录下,创建一个“linux”目录

2)、在“linux” 目录下,创建一个“nfs”的文件夹,用来供nfs服务器使用,便于”我们的开发板“上通过”网络文件系统来访问这个”nfs“文件夹

3)、在linux目录下,创建一个”tool文件夹,用来存放“Ubutun交叉编译工具链”Linux系统中VSCode软件“code_1.50.1-1602600906_amd64”和“ ST公司提供的stm32wrapper4dbg工具”

4)、在“linux”目录下创建“atk-mp1”目录;

5)、在“/linux/atk-mp1/目录下创建“tf-a”目录

6)、在“/linux/atk-mp1/”目录下,创建“my-tfa”目录,用来保存“ST官方的TF-A源码”

现在我们还需要在“linux/atk-mp1/”目录下创建“alientek_tf-a”目录,用来存放正点原子修改好的TF-A源码。

1、打开终端

2、输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd linux回车”,切换到“linux”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“mkdir alientek_tf-a回车”, 在“linux/atk-mp1/”目录下新建一个名为“alientek_tf-a”目录,用来存放正点原子修改好的TF-A源码。

输入“ls回车”,列出当前目录下所有的文件和文件夹

见下图:

3、双击“FileZilla Client.exe”,打开FTP客户端,点击01、程序源码\01、正点原子Linux出厂系统源码\tf-a-stm32mp-2.2.r1-g212d381-v1.4.tar.bz2。

4、将“tf-a-stm32mp-2.2.r1-g212d381-v1.4.tar.bz2”拖到“alientek_tf-a”目录下。

5、输入“cd alientek_tf-a回车”,切换到“alientek_tf-a”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

见下图: 

6、输入“tar -xvf tf-a-stm32mp-2.2.r1-g212d381-v1.4.tar.bz2回车”,解压

7、输入“ls回车”,列出当前目录下所有的文件和文件夹 ,发现有一个“Makefile.sdk”,这是编译TF-A将要用到的Makefile文件。

 8、输入“vim Makefile.sdk回车”,使用vim命令打开已有的“Makefile.sdk”文件

 

9、将“arm-ostl-linux-gnueabi-”改为“arm-none-linux-gnueabihf-”,见下图: 

10、按“ESC键”+“:wq键”,保存退出。

11、输入“cd tf-a-stm32mp-2.2.r1/回车”,进入到 tf-a源码目录tf-a-stm32mp-2.2.r1

输入“make -f ../Makefile.sdk all回车”, 执行编译 '-f'的意思是重新指定Makefile。

如果需要加快编译速度,可是使用多线程编译,线程数量最好和自己给虚拟机分配的物理核心保持一致,使用-j来指定线程数,命令如下:

make -f ../Makefile.sdk -j8 all //使用8线程编译

12、等待编译完成。

13、重新打开终端,查询“atk-mp1/alientek_tf-a/build/trusted”目录下有哪些文件,按照下图输入命令。

打开新的终端

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd linux/回车”,切换到“linux”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd alientek_tf-a/回车”,切换到“alientek_tf-a”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd build/回车”,切换到“build”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd trusted/回车”,切换到“trusted”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

见下图:

 正点原子STM32MP157开发板使用的主控型号是STM32MP157DAA1,所以我们在移植的时候,需要参考的对象就是stm32mp157d-ev1

tf-a-stm32mp157d-ev1.stm32和“tf-a-stm32mp157d-ev1-trusted.stm32”的内容完全相同,后者是由前者重命名得到的,因此,我们在烧写的时候使用tf-a-stm32mp157d-ev1-trusted.stm32即可

二、复制正点原子的“设备树文件”和“设备树头文件 

 打开linux\atk-mp1\alientek_tf-a\tf-a-stm32mp-2.2.r1\fdts目录, fdts目录下保存的就是所有开发板设备树文件,其中就包括了STM32MP1系列的。

1、重新打开终端

2、 输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd linux/回车”,切换到“linux”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd atk-mp1/回车”,切换到“atk-mp1”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd alientek_tf-a/回车”,切换到“alientek_tf-a”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd tf-a-stm32mp-2.2.r1/回车”,切换到“tf-a-stm32mp-2.2.r1”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹

输入“cd fdts/回车”,切换到“fdts”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹;

由于设备树文件stm32mp157d-ev1.dts引用了“stm32mp157d-ed1.dts”,其主要工作是由 stm32mp157d-ed1.dts文件来完成的。因此,我们以stm32mp157d-ed1.dts为蓝本,复制一份stm32mp157d-ed1.dts,并命名为stm32mp157d-atk.dts,这就是我们为开发板准备的“设备树文件”

3、输入“cp stm32mp157d-ed1.dts   stm32mp157d-atk.dts回车”,以stm32mp157d-ed1.dts为蓝本,复制一份stm32mp157d-ed1.dts,并命名为stm32mp157d-atk.dts,这就是我们为开发板准备的“设备树文件”

输入“ls回车”,列出当前目录下所有的文件和文件夹;

见下图:

由于设备树头文件“stm32mp15xx-edx.dtsi”是edx系列开发板的设备树通用头文件,它和板子有关,不同的板子,对应的板子头文件也不同,所以我们必须以stm32mp15xx-edx.dtsi为蓝本,创建我们自己开发板的“设备树文件的头文件”

4、输入“cp stm32mp15xx-edx.dtsi   stm32mp157d-atk.dtsi回车”,以stm32mp15xx-edx.dtsi为蓝本,创建我们自己开发板的设备树文件的头文件stm32mp157d-atk.dtsi

输入“ls回车”,列出当前目录下所有的文件和文件夹;

见下图:

三、修改正点原子的“设备树文件stm32mp157d-atk.dts 

1、在Ubuntu中,使用VSCode打开文件“stm32mp157d-atk.dts”,准备修改设备树文件“stm32mp157d-atk.dts”。

将第12行改为: #include "stm32mp157d-atk.dtsi"。

2、双击设备树文件“stm32mp157d-atk.dts”,打开这个文件

3、将设备树头文件“stm32mp15xx-edx.dtsi”修改为“stm32mp157d-atk.dtsi”后,点击“文件”,然后点击“保存”,如下图:

4、输入“cd ..回车”,回到“tf-a-stm32mp-2.2.r1”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹;

输入“cd ..回车”,回到“alientek_tf-a”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹;

输入“vim Makefile.sdk回车”,使用vim打开Makefile.sdk。

5、在打开Makefile.sdk文件中, 在TFA_DEVICETREE配置项中添加“stm32mp157d-atk”,见下图:

6、按“ESC键”+“:wq键”,保存退出。

7、输入“cd tf-a-stm32mp-2.2.r1/回车”,进入到 tf-a源码目录下

输入“make -f ../Makefile.sdk all回车”, 执行编译 '-f'的意思是重新指定Makefile。

8、输入“cd ..回车”,回到“alientek_tf-a”目录下

输入“ls回车”,列出当前目录下所有的文件和文件夹;

输入“cd build/回车”,切换到“build”目录下;

输入“ls回车,列出当前目录下所有的文件和文件夹;

输入“cd trusted/回车”,切换到“trusted”目录下;

输入“ls回车”,查看“trusted”目录中是否生成“tf-a-stm32mp157d-atk.bin

在下图中,我们发现生成“tf-a-stm32mp157d-atk.bin”,真的很开心。

 四、修改正点原子的“设备树头文件stm32mp157d-atk.dtsi

1、修改“电源管理”设备树

ST官方 STM32MP157开发板用到了一颗PMIC芯片,型号为STPMIC1A,PMIC全称为 全称为 Power Management IC,也就是集成电源管理芯片。

Cortex-A系列芯片主电源一般要求3.3V,但是芯片内核电压可能需要1.2V,而外扩的DDR3L芯片工作电压是1.35V,DDR3L芯片的端接电压要求0.65V,USB工作电压又要求5V等,也就是说随着SOC功能越来强大,所需要的电源要求也越来越高,最直观就是源种类很多。

STPMIC1A是ST专门为专门为 STM32MP1系列设计的专用PMIC,此 PMIC芯片性能非常强大:

· 输入电压2.8V~5.5V。

· 4路可调的通用LDO输出。

· 1路DDR3端接LDO电源。

· 1路USB PHY所使用的LDO电源。

· 1路 DDR参考电压LDO电源。

· 4路可调的BUCK开关电源。

· 1路 5.2V/1.1A的 BOOST开关电源。

· 1路 500mA的 USB OTG电源。

· 1路 500mA/1000mA的通用电源。

· 此芯片有一个IIC接口,主控通过IIC接口来配置电源芯片,设每一路输出电源的输出电压,开启时间等。

STPMIC1A是一个IIC器件,因此就涉及到驱动问题,需要主控通过IIC接口来配置各路电源,所以ST官方提供的TF-A、uboot、linux kernel等都会有PMIC驱动。 但是正点原子的开发板并没有采用这个PMIC芯片,所以TF-A默认的电源配置就会出问题,这里就需要我们修改相关的文件,取消掉这个PMIC的相关配置

1)、在Ubuntu中,使用VSCode打开“设备树头文件”stm32mp157d-atk.dtsi

ST官方的STM32MP157开发板将STPMIC1A这个 PMIC芯片挂到了I2C4下。见下图:

2)、删除“第 54~281行的全部内容”,即删除STPMIC1A芯片的相关描述。 

删除后,见下图:

3)、删除“vin节点的全部内容”,也就是将 17~23行代码删除掉,替换为下面的代码

vddcore: regulator-vddcore {

compatible = "regulator-fixed";

regulator-name = "vddcore";

regulator-min-microvolt = <1200000>;

regulator-max-microvolt = <1350000>;

regulator-off-in-suspend;

regulator-always-on;

};

v3v3: regulator-3p3v {

compatible = "regulator-fixed";

regulator-name = "v3v3";

regulator-min-microvolt = <3300000>;

regulator-max-microvolt = <3300000>;

regulator-off-in-suspend;

regulator-always-on;

};

vdd: regulator-vdd {

compatible = "regulator-fixed";

regulator-name = "vdd";

regulator-min-microvolt = <3300000>;

regulator-max-microvolt = <3300000>;

regulator-off-in-suspend;

regulator-always-on;

};

vdd_usb: regulator-vdd-usb {

compatible = "regulator-fixed";

regulator-name = "vdd_usb";

regulator-min-microvolt = <3300000>;

regulator-max-microvolt = <3300000>;

regulator-off-in-suspend;

regulator-always-on;

};

至此,“电源管理设备树”修改完成了,此时不要编译,会报错。因为USB OTG节点是引用的以前相关电源设置,所以编译会报错。等修改好USB OTG设备节点以后,就可编译了。

2、修改“TF卡和EMMC设备树

1)、找到“sdmmc1”和“sdmmc2”这 2个节点,见下图:

2)、将sdmmc1和 sdmmc2节点改为如下:

&sdmmc1 {

pinctrl-names = "default";

pinctrl-0 = <&sdmmc1_b4_pins_a &sdmmc1_dir_pins_a>;

st,neg-edge;

broken-cd;

bus-width = <4>;

vmmc-supply = <&v3v3>;

status = "okay";

};

&sdmmc2 {

pinctrl-names = "default";

pinctrl-0 = <&sdmmc2_b4_pins_a &sdmmc2_d47_pins_a>;

non-removable;

st,neg-edge;

bus-width = <8>;

vmmc-supply = <&v3v3>;

vqmmc-supply = <&v3v3>;

status = "okay";

};

至此,TF卡和EMMC设备树修改完成了,此时也不要编译,会报错。因为USB OTG节点是引用的以前相关电源设置,所以编译会报错。等修改好USB OTG设备节点以后,就可编译了。 

3、修改“USB OTG设备树

1)、找到“usbotg_hs”这个节点,见下图:

2)、将usbotg_hs节点改为如下:

&usbotg_hs {

phys = <&usbphyc_port1 0>;

phy-names = "usb2-phy";

usb-role-switch;

status = "okay";

};

3)、添加一个名为“usbphyc”的节点,内容如下:

&usbphyc {

status = "okay";

};

见下图:

、编译

Makefile.sdk是编译TF-A要用到的Makefile。

1)、输入“vim Makefile.sdk回车”,打开Makefile.sdk文件,找到“TFA_DEVICETREE”,见下图:

 2)、将 TFA_DEVICETREE修改为“stm32mp157d-atk”,也就是正点原子开发板对应的设备树。见下图:

3)、按“ESC键”+“:wq键”,保存退出。

4)、使用终端进入/linux/atk-mp1/alientek_tf-a/tf-a-stm32mp-2.2.r1目录

5)、输入“make -f ../Makefile.sdk all回车”, 执行编译 '-f'的意思是重新指定Makefile。编译后见下图:

 6)、检查生成的bin文件

输入“cd ..回车”,返回到“alientek_tf-a”目录

输入“ls回车”,列出当前目录下所有的文件和文件夹;

输入“cd build/回车”,切换到“build”目录下;

输入“ls回车”,列出当前目录下所有的文件和文件夹;

输入“cd trusted/回车”,切换到“trusted”目录下;

输入“ls -l回车”,查看是否生成tf-a-stm32mp157d-atk-trusted.stm32文件,也就是TF-A文件

7)、找到tf-a-stm32mp157d-atk-trusted.stm32文件,即TF-A文件,见下图:

为了将TF-A文件tf-a-stm32mp157d-atk-trusted.stm32烧写到EMMC、NAND、SD卡里,还需要tf-a-stm32mp157d-atk-serialboot.stm32u-boot.stm32这两个文件。

tf-a-stm32mp157d-atk-serialboot.stm32用来初始化USBDDR等外设,然后才可运行ubootuboot会初始化EMMCNAND等外设,同时还可以提供强大的EMMC操作指令。

 至此,我们完成编译“正点原子的TF-A源码”,得到了我们想得到TF-A文件,即“tf-a-stm32mp157d-atk-trusted.stm32”。

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

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

相关文章

.【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)

概率图模型是一种用图形表示概率分布和条件依赖关系的数学模型。概率图模型可以分为两大类&#xff1a;有向图模型和无向图模型。有向图模型也叫贝叶斯网络&#xff0c;它用有向无环图表示变量之间的因果关系。无向图模型也叫马尔可夫网络&#xff0c;它用无向图表示变量之间的…

02.部署LVS-DR群集

技能展示&#xff1a; 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR&#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一种工作模式。 2.1.1&#xff0e;LVS-DR 工作原理 LVS-DR 模式&…

Spark---RDD持久化

文章目录 1.RDD持久化1.1 RDD Cache 缓存1.2 RDD CheckPoint 检查点1.3 缓存和检查点区别 1.RDD持久化 在Spark中&#xff0c;持久化是将RDD存储在内存中&#xff0c;以便在多次计算之间重复使用。这可以显著减少不必要的计算&#xff0c;提高Spark应用程序的性能。 val line…

蓝桥杯练习题(七)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;七&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

kotlin运行

1.使用android studio 由于我本身是做android的&#xff0c;android studio本身有内置kotlin的插件。但若只是想跑kotlin的程序&#xff0c;并不像和android程序绑在一起&#xff0c;可以创建一个kt文件&#xff0c;在里面写一个main函数&#xff0c;就可以直接运行kotlin程序…

【机器学习 西瓜书】期末复习笔记整理

一些杂点&#xff1a; 测试集如何归一化&#xff1f; —— 不是用测试集的均值和标准差&#xff0c;而是用训练集的&#xff01; 机器学习&#xff1a; 对计算机一部分数据进行学习&#xff0c;然后对另外一些数据进行预测与判断。 参考计算例题&#xff1a; 机器学习【期末复习…

PyCharm安装使用教程2024

简介 PyCharm是一种PythonIDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单…

[oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算

和python玩耍 &#x1f94a; Python 回忆 上次 了解shell环境中的命令 命令作用whoami显示当前用户名pwd显示当前文件夹ls列出当前文件夹下的内容python3仿佛进入大于号黑洞 这python3 怎么玩啊&#xff01;&#x1f620; 说好的python教程呢&#xff1f;&#x1f914; 运…

vue2使用Lottie

文章目录 学习链接1.安装依赖2.创建lottie组件3.在相对应的页面应用4.相关data.json5.测试效果 学习链接 原文链接&#xff1a;lottie在vue中的使用 lottie官网&#xff1a;https://lottiefiles.com/ 1.安装依赖 npm install lottie-web2.创建lottie组件 <template>…

MetaGPT前期准备与快速上手

大家好&#xff0c;MetaGPT 是基于大型语言模型&#xff08;LLMs&#xff09;的多智能体协作框架&#xff0c;GitHub star数量已经达到31.3k。 接下来我们聊一下快速上手 这里写目录标题 一、环境搭建1.python 环境2. MetaGpt 下载 二、MetaGPT配置1.调用 ChatGPT API 服务2.简…

Maven的安装和配置

国内Maven仓库之阿里云Aliyun仓库地址及设置 用过Maven的都知道Maven的方便便捷&#xff0c;但由于某些网络原因&#xff0c;访问国外的Maven仓库不便捷&#xff0c;好在阿里云搭建了国内的maven仓库。 需要使用的话&#xff0c;要在maven的settings.xml 文件里配置mirrors的子…

HTTP 常见协议:选择正确的协议,提升用户体验(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

SQL语句详解二-DDL(数据定义语言)

文章目录 操作数据库创建&#xff1a;Create查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete使用数据库 操作表常见的几种数据类型创建&#xff1a;Create复制表 查询&#xff1a;Retrieve修改&#xff1a;Update删除&#xff1a;Delete 操作数据库 创…

Stable Diffusion XL Turbo 文生图和图生图实践

本篇文章聊聊&#xff0c;如何快速上手 Stable Diffusion XL Turbo 模型的文生图和图生图实战。 写在前面 分享一篇去年 11 月测试过模型&#xff0c;为月末分享的文章做一些技术铺垫&#xff0c;以及使用新的环境进行完整复现。 本篇文章相关的代码保存在 soulteary/docker…

【教学类-43-18】A4最终版 20240111 数独11.0 十宫格X*Y=Z套(n=10),套用没有分割行列的A4横版模板

作品展示&#xff1a; 撑满格子的10宫格数独50%难度 50空 背景需求&#xff1a; 大4班有3位男孩做9宫格数独&#xff08;81格子&#xff0c;30%难度 24空&#xff09;非常娴熟&#xff0c;我观察他们基本都在10分钟内完成&#xff0c;其中一位男孩把九宫格题目给我看时表达自…

使用 EmbeddingBag 和 Embedding 完成词嵌入

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客\n&#x1f366; 参考文章&#xff1a;365天深度学习训练营\n&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制]\n&#x1f680; 文章来源&#xff1a;[K同学的学习圈子](https://www.yuque.co…

移除两个双向链表中的重复元素,每个链表中的元素不重复

移除两个双向链表中的重复元素&#xff0c;每个链表中的元素不重复&#xff0c;请给出算法。 ans: 该问题比单向链表要更加复杂一些&#xff0c;必须考虑并更新前向节点的指向情况&#xff0c;具体编码中存在一些难度&#xff0c;加上链表调试相对不容易&#xff0c;因此难度系…

技术专栏——你所不知道的 RocketMQ 的集群管理:副本机制

这些精彩的技术类型的体系化文章&#xff0c;后面我会放到公众号上&#xff0c;并集中在合集“分布式消息中间件专栏”中&#xff0c;欢迎大家去订阅我的公众号和视频号“架构随笔录”&#xff0c;大家可以订阅合集&#xff0c;这样更加方便喔&#xff0c;后面会出电子版本&…

C++采集亚马逊amazon产品数据教程

最近亚马逊电商非常火爆&#xff0c;今天我将用C语言写一个亚马逊商品数据的爬虫程序&#xff0c;只要是用来收集一些产品相关信息。例如产品自身特性以及产品所对应的销量&#xff0c;为了后期布局亚马逊做一些参考&#xff0c;提供数据支持&#xff0c;同时另外我也会用C语言…

Msa全球最新研究:多系统萎缩特效药全球最新进展

多系统萎缩是一种罕见的神经系统疾病&#xff0c;它涉及到多个系统的功能减退或丧失。对于这种疾病&#xff0c;传统的西医治疗方法往往束手无策。然而&#xff0c;中国著名中医刘家峰大夫&#xff0c;却通过中药治疗&#xff0c;为多系统萎缩患者带来了新的希望。 刘家峰大夫…