TF-A 架构及下、编译和烧录
前言
本文介绍 TF-A 的架构,代码下载,编译,以及如何烧录到目标板.
TF-A: Trusted Firmware for Arm Cortex-A
架构
TF-A 是由四个部分组成,分别是 BL1BL2BL32 BL33
Boot loader stage 1 (BL1) application processor trusted ROM
Boot loader stage 2 (BL2) trusted boot firmware
Boot loader stage 3-2 (BL32) runtime software
Boot loader stage 3-3 (BL33) non-trusted firmware
注:BL1 的功能实现在 STM32MP1 上已经固化到 ROM 中,所以此部分用户不能修改。
BL2 主要实现初始化 DDR 和时钟树,并且初始化安全相关组件
BL32 主要提供 secure monitor 安全服务,实现了 SP-MIN 解决方案
BL33 作为非安全代码固件,在 STM32MP1 平台上由 U-Boot 来管理
TF-A 使用设备树管理配置,它在此期间会初始化一些设备。设备树可以使用 STM32CubeMX 配置。
BL2BL32 和设备树合在一起会编译出一个 image,由 BootROM 加载到 SYSRAM 中执行。
TF-A 加载步骤如下:
1. ROM code 加载 TF-A 固件,调用 BL2
2. BL2 准备加载 BL32
3. BL2 加载 BL33
4. BL2 调用 BL32
5. BL32 调用 BL33
1. 下载地址一:
https://www.st.com/content/ccc/resource/technical/sw-
updater/firmware2/group0/83/c8/98/d3/5c/32/42/77/stm32cube_standard_a7_bsp_components_tf_a/files/SOURCES-tf-a-
stm32mp1-openstlinux-20-02-19.tar.xz/jcr:content/translations/en.SOURCES-tf-a-stm32mp1-openstlinux-20-02-19.tar.xz
2. 下载地址二:github
推荐使用 Git Hub。使用 Gig Hub 可以获取最新的代码, 编译时也不用像象官网 tar 包那样需要手工打上 Patch
命令如下: git clone https://github.com/STMicroelectronics/arm-trusted-firmware.git
TF-A 编译
tar 包中的 Makefile.SDK 文件拷贝到 git hub 下载的源码包,位置放置于与源码包平级目录
(注意不要放置于源码包内)
编译 TF-A 的命令如下:
1. 设置 SDK 环境,需要运行如下命令:
source <SDK installation directory>/environment-setup-cortexa7hf-neon-vfpv4-ostl-linux-gnueabi
2. 进行编译,使用 make -f ../Makefile.sdk all (全部编译)
也可以选择编译适用于自己开发板的 image,命令如下:
make -f Makefile.sdk TF_A_CONFIG=trusted TFA_DEVICETREE=stm32mp157c-<board>
编译后生成的 image,存放于: build/stm32mp1/debug/tf-a-stm32mp157c-ev1.stm32
TF-A 烧写到目标板
I. 如果使用的是 ubuntu 系统,可以使用 dd 命令进行烧写
首先确认 FSBL 所在的分区,使用如下命令:
PC $> ls -l /dev/disk/by-partlabel/
total 0
lrwxrwxrwx 1 root root 10 Jan 17 17:38 bootfs -> ../../mmcblk0p4
lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl1 -> ../../mmcblk0p1 FSBL1 (TF-A)
lrwxrwxrwx 1 root root 10 Jan 17 17:38 fsbl2 -> ../../mmcblk0p2 FSBL2 (TF-A backup same content as
FSBL)
lrwxrwxrwx 1 root root 10 Jan 17 17:38 rootfs -> ../../mmcblk0p5
lrwxrwxrwx 1 root root 10 Jan 17 17:38 ssbl -> ../../mmcblk0p3 SSBL (U-Boot)
lrwxrwxrwx 1 root root 10 Jan 17 17:38 userfs -> ../../mmcblk0p6
然后使用命令