当前位置: 首页 > news >正文

系统移植(七)u-boot移植 ④ trusted版本

文章目录

  • 一、U-boot源码适配
    • (一)执行make stm32mp15_trusted_defconfig命令进行配置,生成.config文件
    • (二)执行make menuconfig命令,对u-boot源码进行重新配置
      • 1. 对u-boot源码进行配置,移除pmic驱动代码的编译
      • 2. 修改u-boot源码使用的默认的设备树文件
      • 3. 修改u-boot的命令行的提示符
      • 4. 移除开机3A电流检测
    • (三)执行make -j4 all重新编译u-boot源码
  • 二、TF-A(ATF)移植
    • (一)概念
    • (二)分析TF-A源码
      • 1. 目录下文件的作用
      • 2. 分析README.HOW_TO.txt
        • 1. 配置交叉编译器
        • 2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
        • 3. 编译TF-A源码
        • 4. 部署TF-A镜像文件到开发板中
    • (三)对TF-A源码进行配置和编译
      • 1. 修改Makefile.sdk文件,配置交叉编译器
      • 2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
      • 3. 根据DK1板子的设备树文件拷贝生成FSMP1A板子的设备树文件
      • 4. 修改设备树文件
      • 5. 编译tf-A源码,生成对应的镜像文件
    • (四)烧录到TF卡中
      • 1. 拷贝u-boot.stm32和tf-a-stm32mp157a-fsmp1a-trusted.stm32镜像文件到sdtools目录下
      • 2. 将tf卡插到读卡器上,然后将读卡器插到电脑的USB口,将读卡器被ubuntu系统识别
      • 3. 查看TF卡是否被ubuntu系统识别
      • 4. 执行./sdtools.sh脚本文件,烧写trusted版本的镜像文件
      • 5. 将tf卡重新插到开发板中,设置开发板的启动方式为TF卡启动
      • 6. 重新上电后,可以正常进入u-boot

一、U-boot源码适配

(一)执行make stm32mp15_trusted_defconfig命令进行配置,生成.config文件

此命令会生成一个trusted版本的默认配置文件

(二)执行make menuconfig命令,对u-boot源码进行重新配置

1. 对u-boot源码进行配置,移除pmic驱动代码的编译

  1. 删除i24节点、cpu节点、port
    具体参见basic版本
  2. 更改配置文件
Device Drivers  --->Power  ---> [ ] Enable support for STMicroelectronics STPMIC1 PMIC|--> 去掉*

2. 修改u-boot源码使用的默认的设备树文件

Device Tree Control  ---> (stm32mp157a-fsmp1a) Default Device Tree for DT control |---> 回车进入编辑界面,修改设备树文件的名字

3. 修改u-boot的命令行的提示符

Command line interface  --->(FSMP1A>>> ) Shell prompt 

4. 移除开机3A电流检测

Command line interface  --->Device access commands  ---> [ ] adc - Access Analog to Digital Converters info and data Device Drivers  --->    [ ] Enable ADC drivers using Driver Model   

(三)执行make -j4 all重新编译u-boot源码

编译成功之后,在u-boot源码目录下生成u-boot.stm32镜像文件,

二、TF-A(ATF)移植

(一)概念

TF-A是ARM公司专门为ARM-v8编写的一套提供安全服务的开源软件,ST公司对TF-A源码进行适配,使其支持ARM-v7架构的Cortex-A7核,提供安全服务。
TF-A软件用来引导trusted版本的u-boot启动。

(二)分析TF-A源码

在这里插入图片描述

1. 目录下文件的作用

    ├── 0001-st-update-v2.2-r2.0.0.patch		---> 补丁文件├── 0002-st-update-v2.2-r2.1.0.patch		---> 补丁文件├── Makefile.sdk							---> 工程配置和编译├── README.HOW_TO.txt						---> 帮助文档├── series									---> 存储补丁文件的信息└── tf-a-stm32mp-2.2.r2-r0.tar.gz			---> TF-A源码压缩包

2. 分析README.HOW_TO.txt

1. 配置交叉编译器
CROSS_COMPILE=arm-ostl-linux-gnueabi-

在这里插入图片描述

2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令
对压缩包进行解压缩
`$> tar xfz tf-a-stm32mp-2.2.r2-r0.tar.gz`
进入到TF-A源码目录下
`$> cd tf-a-stm32mp-2.2.r2`
对TF-A源码进行打补丁
`$> for p in `ls -1 ../*.patch`; do patch -p1 < $p; done `
  • 补充:ls -1 会列出目录下所有文件核目录的名字,且每个文件或目录占一行
    在这里插入图片描述
    ls -l 列出文件核文件夹的详细信息
    在这里插入图片描述
3. 编译TF-A源码

在这里插入图片描述

编译TF-A源码
$> make -f $PWD/../Makefile.sdk all指定配置编译TF-A源码
$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157c-ev1 TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all编译成功之后,TF-A源码编译生成的镜像文件在以下目录中
#> ../build/*/tf-a-*.stm32
4. 部署TF-A镜像文件到开发板中

dd if=<tf-a binary> of=/dev/<device partition> bs=1M conv=fdatasync

  1. dd命令:读取、转换并输出数据

  2. if=<tf-a binary>: if 是 input file 的缩写,这里指定了输入文件的路径。

  3. of=/dev/<device partition>: of 是 output file 的缩写,这里指定了输出文件的路径。dd 命令将会把输入文件的内容写入到这个设备分区中。

  4. bs=1M: bs 是 block size 的缩写,这里指定了每次读写操作的块大小为 1MB。dd 命令将会以 1MB 的块为单位来复制数据,这可以提高数据传输的效率。

  5. conv=fdatasync: conv 选项用于指定转换选项,fdatasync 是其中之一。
    fdatasync 会确保在写入操作完成后,数据会被同步到磁盘上,但是不会同步文件的元数据。这通常用于提高性能,因为它减少了需要同步到磁盘的数据量。

(三)对TF-A源码进行配置和编译

1. 修改Makefile.sdk文件,配置交叉编译器

在这里插入图片描述
修改为下面内容:
在这里插入图片描述

2. 准备TF-a源码,对TF-A源码压缩包进行解压缩,并执行打补丁的命令

对压缩包进行解压缩$> tar -vxf tf-a-stm32mp-2.2.r2-r0.tar.gz
进入到TF-A源码目录下$> cd tf-a-stm32mp-2.2.r2对TF-A源码进行打补丁$> for p in `ls -1 ../*.patch`; do patch -p1 < $p; done 

3. 根据DK1板子的设备树文件拷贝生成FSMP1A板子的设备树文件

  1. 使用ls fdts/stm32mp15dk 命令查看DK1板子的设备树文件
    在这里插入图片描述
  2. 根据DK1板子的设备树文件拷贝生成FSMP1A板子的设备树文件
cp fdts/stm32mp157a-dk1.dts   fdts/stm32mp157a-fsmp1a.dts   
cp fdts/stm32mp15xx-dkx.dtsi   fdts/stm32mp15xx-fsmp1x.dtsi
  1. 修改fdts/stm32mp157a-fsmp1a.dts设备树文件
    将以下内容:
	 13 #include "stm32mp15xx-dkx.dtsi"14 #include <dt-bindings/soc/st,stm32-etzpc.h>15 16 / {17     model = "STMicroelectronics STM32MP157A-DK1 Discovery Board";18     compatible = "st,stm32mp157a-dk1", "st,stm32mp157";
修改为:
	 13 #include "stm32mp15xx-fsmp1x.dtsi"14 #include <dt-bindings/soc/st,stm32-etzpc.h>15 16 / {17     model = "STMicroelectronics STM32MP157A-FSMP1A Discovery Board";18     compatible = "st,stm32mp157a-fsmp1a", "st,stm32mp157";

4. 修改设备树文件

  1. 修改fdts/stm32mp15xx-fsmp1x.dtsi文件,将i2c4, cpu0, cpu1节点删除
  2. 修改fdts/stm32mp15xx-fsmp1x.dtsi文件,添加固定电源的设备树节点信息

5. 编译tf-A源码,生成对应的镜像文件

make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all

(四)烧录到TF卡中

1. 拷贝u-boot.stm32和tf-a-stm32mp157a-fsmp1a-trusted.stm32镜像文件到sdtools目录下

以自己的路径为准

cp u-boot-2021.07/u-boot.stm32 ~/sdtools
cp tf-a-stm32mp-2.2.r2/build/trusted/tf-a-stm32mp157a-fsmp1a-trusted.stm32 ~/sdtools

2. 将tf卡插到读卡器上,然后将读卡器插到电脑的USB口,将读卡器被ubuntu系统识别

3. 查看TF卡是否被ubuntu系统识别

4. 执行./sdtools.sh脚本文件,烧写trusted版本的镜像文件

5. 将tf卡重新插到开发板中,设置开发板的启动方式为TF卡启动

在这里插入图片描述

6. 重新上电后,可以正常进入u-boot

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Flume安装部署
  • 先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab)
  • Unity横板动作游戏 -为什么我又开始学习Unity,而不是Godot。
  • SteerLM_ Attribute Conditioned SFT as an (User-Steerable) Alternative to RLHF
  • 从零开始学习网络安全渗透测试之基础入门篇——(四)反弹SHELL不回显带外正反向连接防火墙出入站文件上传下载
  • Mysql in 与 exists
  • ObservableCollection新增数据前判断数据是否存在
  • The Llama 3 Herd of Models.Llama 3 模型第1,2,3部分全文
  • STM32单片机C语言:继电器控制220v灯泡亮灭
  • web3d值得学习并长期发展,性价比高吗?
  • socket 编程
  • 数据库作业——5
  • Kafka系列之如何提高消费者消费速度
  • Java高频面试题分享
  • git 学习总结
  • avalon2.2的VM生成过程
  • CentOS7简单部署NFS
  • css的样式优先级
  • JS实现简单的MVC模式开发小游戏
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • MD5加密原理解析及OC版原理实现
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • PHP 7 修改了什么呢 -- 2
  • SpringBoot 实战 (三) | 配置文件详解
  • 闭包,sync使用细节
  • 简单数学运算程序(不定期更新)
  • 想使用 MongoDB ,你应该了解这8个方面!
  • 原生 js 实现移动端 Touch 滑动反弹
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • #pragma once
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • (04)odoo视图操作
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (2)Java 简介
  • (7)STL算法之交换赋值
  • (js)循环条件满足时终止循环
  • (MATLAB)第五章-矩阵运算
  • (PADS学习)第二章:原理图绘制 第一部分
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)总结使用Unity 3D优化游戏运行性能的经验
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .axf 转化 .bin文件 的方法
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 4.0中的泛型协变和反变
  • .Net Memory Profiler的使用举例
  • .NET 漏洞分析 | 某ERP系统存在SQL注入
  • .net(C#)中String.Format如何使用
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET委托:一个关于C#的睡前故事