TF-A移植
TF-A是基于 Arm 的可信固件 Trusted Firmware-A,简称 TF-A。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。
分析README文档
Compilation of TF-A (Trusted Firmware-A): ========> tf-a目录
1. Pre-requisite ========> 准备工作
2. Initialise cross-compilation via SDK ========> 初始化交叉编译工具链
3. Prepare tf-a source code ========> 准备tf-a源码
4. Management of tf-a source code ========> 管理tf-a源码
5. Compile tf-a source code ========> 编译tf-a源码
6. Update software on board ========> 更新tf-a源码
TF-A移植步骤
1.在顶层目录下打开Makefile.sdk文件,更改交叉编译工具
EXTRA_OEMAKE=CROSS_COMPILE=arm-ostl-linux-gnueabi-
======> EXTRA_OEMAKE=CROSS_COMPILE=arm-ostl-linux-gnueabi-
TFA_DEVICETREE ?= ======> TFA_DEVICETREE ?= stm32mp157a-fsmp1a
2.源码目录进行补丁
for p in `ls -1 ../*.patch`; do patch -p1 < $p; done
补丁:修改或增加配置信息
3.修改设备树信息
FSMP1A开发板参考DK1公板进行移植的,DK1公板所有的硬件信息都在设备树中进行存放
所以需要将DK1设备树的信息复制为FSMP1A信息
1)进入设备树目录
cd fdts/
2)将 DK1公板设备树信息,复制为FSMP1A设备树内容
cp stm32mp157a-dk1.dts stm32mp157a-fsmp1a.dts
cp stm32mp15xx-dkx.dtsi stm32mp15xx-fsmp1x.dtsi
3)修改设备树的源文件
vi stm32mp157a-fsmp1a.dts
#include "stm32mp15xx-dkx.dtsi" =====> #include "stm32mp15xx-fsmp1x.dtsi"
4.安装相关库
sudo apt-get install device-tree-compiler
5.源码目录下,编译,生成TF-A镜像文件
make -f $PWD/../Makefile.sdk all
烧写结果
解决方法:
1.删除DK1设备树相关内容
1)打开源码目录下的设备树,打开设备树文件
cd fdts/
vi stm32mp15xx-fsmp1x.dtsi
2)删除&i2c4代码块
3)删除cpu0和cpu1节点
4)添加电源节点
5)添加sdmmc2节点
搭建Linux系统
准备镜像文件
tf-a镜像文件:tf-a-stm32mp157a-fsmp1a-trusted.stm32(烧写位置:TF卡 / EMMC)
uboot镜像文件:u-boot-stm32mp157a-fsmp1a-trusted.stm32(烧写位置:TF卡 / EMMC)
内核镜像文件:stm32mp157a-fsmp1a.dtb 和 uImage(通过tftp服务器下载)
根文件系统:rootfs(通过nfs服务器进行挂载)
烧写镜像文件到EMMC设备中
ums 0 mmc 0 =========> 将TF卡挂载到Ubuntu中
ums 0 mmc 1 =========> 将EMMC设备挂载到Ubuntu中
执行ums指令后虚拟机Ubuntu弹出USB外部设备连接对话框,选择连接虚拟机
执行脚本烧写
更改拨码开关
更改为eMMC,与SDCARD拨码方向相反