TF-A架构及下载、编译和烧录介绍
Trusted Firmware for Arm Cortex-A
>>>本文介绍TF-A的架构,代码下载,编译,以及如何烧录到目标板。
TF-A是由四个部分组成,分别是BL1,BL2,BL32和BL33。
application processor trusted ROM
trusted boot firmware
runtime software
non-trusted firmware
注:
BL1的功能实现在STM32MP1上已经固化到ROM中,所以此部分用户不能修改。
BL2主要实现初始化DDR和时钟树,并且初始化安全相关组件
BL32主要提供secure monitor安全服务,实现了SP-MIN解决方案
BL33作为非安全代码固件,在STM32MP1平台上由U-Boot来管理
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
将tar包中的Makefile.SDK文件拷贝到git hub下载的源码包,位置放置于与源码包平级目录 (注意不要放置于源码包内)
1. 设置SDK环境,需要运行如下命令:
source
2. 进行编译,使用make -f ../Makefile.sdk all (全部编译)
也可以选择编译适用于自己开发板的image,命令如下:
make -f Makefile.sdk TF_A_CONFIG=trusted TFA_DEVICETREE=stm32mp157c-
编译后生成的image,存放于:
build/stm32mp1/debug/tf-a-stm32mp157c-ev1.stm32
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
然后使用命令
dd if=
II. 如果使用的是windows系统,可以使用STM32CubeProgramer进行下载
在plat/st/stm32mp1/bl2_plat_setup.c中增加一条打印信息:
PC $> cd tf-a-stm32mp-2.0-r0/arm-trusted-firmware-2.0
PC $> vim ./plat/st/stm32mp1/bl2_plat_setup.c
3. 使用windows下的STM32CubeProgramer V2.3.0,将编译完成的TF-A的新的image下载到板子上:
4. 下载完成后,断电,将拨码开关拨到从SDCARD启动,如下:
5. 上电启动,观察串口log输出如下:
代码中增加的log,可以显示在console中,说明编译以及下载已经成功完成。
TF-A的代码获取方式推荐使用git hub获取最新的代码,同时可避免使用tar包后,还需要手动打patch。
编译需要在Linux环境下,烧写可以使用windows下的STM32CubeProgramer,也可以使用Linux下的dd命令。
使用dd命令需要清楚TF-A所在的分区,因为dd命令并不会检查分区,只是按照命令指定的分区,直接将数据覆盖掉。
参考资料:
https://wiki.st.com/stm32mpu/index.php/STM32MP1_Developer_Package_-_TF-A