TF-A介绍

TF-A(Trusted Firmware-A)是由ARM®提供的安全类软件的参考实现。TF-A最初设计是为Armv8-A 平台,现在由STMicroelectronics适配并使用在Armv7-A 平台。现在该项目已经将Trusted Firmware项目移交给Linaro作为开源项目来管理。这部分代码遵守BSD-3-Clause 版权。
如果是Trusted boot chain方式,TF-A就是作为 FSBL。

The global architecture of TF-A is explained in the Trusted Firmware-A design document.
TF-A分为不同的阶段,每个都有主要的功能。

  • 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, BL2和BL32部分是属于TF-A,BL33是在不在TF-A里的。
BL1 目前是可选项,如果编译试开启参数BL2_AT_EL3,BL1就会被移除。在PanGu开发板上,由于这部分功能是由ROM code和BL2完成的,所以BL1部分是移除的。BL2就是PanGu开发板第一个要加载的部分。
BL33是由TF-A加载的第一个非安全的代码。在启动过程中,这个就是SSBL,对于PanGu开发板SSBL就是U-Boot。
在PanGu开发板上,这两个二进制BL2和 BL32,还有device tree都放在同一个binary文件中,上电时由ROM加载到SYSRAM。

image
TF-加载顺序:

  1. ROM code加载TF-A binary,然后调用BL2

  2. BL2 准备BL32

  3. BL2 加载BL33

  4. BL2 调用 BL32

  5. BL32 调用 BL33

 

编译TF-A

下载TF-A源码包,并放在开发目录下,然后解压代码。TF-A的源代码存放在开发资源包的"Source/Linux"目录下,文件名为arm-trusted-firmware-xxxx.tar.gz,xxxx代表版本标识,以实际为主。

$ cd $HOME/i2SOM-STM32MP1
$ tar xvf arm-trusted-firmware.tar.gz

编译TF-A前,需要一个Makefile.sdk文件,点击下面链接后下载,放在开发目录下。编译前需要先加载SDK的环境变量。
下载Makefile.sdk

$ mv ~/Makefile.sdk $HOME/i2SOM-STM32MP1
$ make -f ../Makefile.sdk  TFA_DEVICETREE=stm32mp157a-panguboard TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all

编译结束后,生成的文件在开发目录下的build目录,即$HOME/PanGu/build。编译出来的二进制文件名是tf-a-stm32mp157a-panguboard.stm32。

Trusted bootchain下替换板载eMMC的FSBL

# echo 0 > /sys/class/block/mmcblk1boot0/force_ro
# echo 0 > /sys/class/block/mmcblk1boot1/force_ro
# dd if=tf-a-stm32mp157a-panguboard.stm32 of=/dev/mmcblk1boot0 conv=fdatasync
# dd if=tf-a-stm32mp157a-panguboard.stm32 of=/dev/mmcblk1boot1 conv=fdatasync
# echo 1 > /sys/class/block/mmcblk1boot0/force_ro
# echo 1 > /sys/class/block/mmcblk1boot1/force_ro
# mmc bootpart enable 1 1 /dev/mmcblk1

Trusted bootchain下替换板载SD的FSBL

# dd if=tf-a-stm32mp157a-panguboard.stm32 of=/dev/sdb1 conv=fdatasync
# dd if=tf-a-stm32mp157a-panguboard.stm32 of=/dev/sdb2 conv=fdatasync
作者:SteveChen  创建时间:2024-09-18 11:47
最后编辑:SteveChen  更新时间:2024-09-18 11:47
上一篇:
下一篇: