STM32单片机

文章数:1121 被阅读:2938180

账号入驻

TF-A架构及下载、编译和烧录介绍

最新更新时间:2020-11-09
    阅读数:


TF-A

Trusted Firmware for Arm Cortex-A


>>>本文介绍TF-A的架构,代码下载,编译,以及如何烧录到目标板。


TF-A
架构


TF-A是由四个部分组成,分别是BL1,BL2,BL32和BL33。


BL1

application processor trusted ROM

BL2

trusted boot firmware

BL32

runtime software

BL33

non-trusted firmware


注:

BL1的功能实现在STM32MP1上已经固化到ROM中,所以此部分用户不能修改。

BL2主要实现初始化DDR和时钟树,并且初始化安全相关组件

BL32主要提供secure monitor安全服务,实现了SP-MIN解决方案

BL33作为非安全代码固件,在STM32MP1平台上由U-Boot来管理


TF-A使用设备树管理配置,它在此期间会初始化一些设备。设备树可以使用STM32CubeMX配置。


BL2、BL32和设备树合在一起会编译出一个image,由BootROM加载到SYSRAM中执行。



TF-A 加载步骤如下:



1. ROM code 加载 TF-A 固件,调用 BL2





2. BL2 准备加载BL32





3. BL2 加载BL33





4. BL2 调用BL32





5. BL32 调用BL33



TF-A
代码下载


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 /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-


编译后生成的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


然后使用命令

dd if= of=/dev/ bs=1M conv=fdatasync


II. 如果使用的是windows系统,可以使用STM32CubeProgramer进行下载


TF-A
代码修改调试


在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



1. 修改后,编译TF-A:make -f ../Makefile.sdk all


2. 例程中使用的是STM32MP157C-EV1 开发板,将拨码开关拨到flashing模式:



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




最新有关STM32单片机的文章

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: TI培训

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved