
Trusted Firmware-A简介 嵌入式高速发展的今天,大量的嵌入式设备使用了Arm为核心的芯片。我们会接触到越来越多的嵌入式设备,一个问题油然而生:数量如此巨大的嵌入式设备的安全性如何?目前针对嵌入式安全的技术和标准可谓千姿百态,除了必要的硬件安全技术,与之配套的安全软件也是必不可少的一部分。今天我们要介绍的是基于Arm 的可信固件Trusted Firmware-A,简称TF-A。它是一个开源软件,运行在一个硬件隔离的安全环境中并提供安全服务。 实验目的 完成TF-A的基本功能实现TF-A引导u-boot启动。 实验平台 华清远见开发环境,FS-MP1A平台 实验步骤 本实验基于tf-a-stm32mp-2.2版本,然后添加意法半导体提供的补丁文件。在意法半导体官方的tf-a中移植我们自己的tf-a。 导入源码 如果之前已经建立了源码目录,并且导入了源码包,即可跳过本小节。 建立源码目录 linux@ubuntu:$ cd ~ linux@ubuntu:$ mkdir FS-MP1A 将下的 en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz压缩包,导入到ubuntu下的${HOME}/FS-MP1A目录下。 ![]() 解压缩源码包 linux@ubuntu:$ tar xvf en.SOURCES-stm32mp1-openstlinux-5-4-dunfell-mp1-20-06-24.tar.xz 解压完成后得到“ stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24”目录 ![]() 进入tf-a目录下 linux@ubuntu:$ cd ~/FS-MP1A/stm32mp1-openstlinux-5.4-dunfell-mp1-20-06-24/sources/arm-ostl-linux-gnueabi/tf-a-stm32mp-2.2.r1-r0 ![]() 该目录下以patch结尾的文件为ST官方提供的补丁文件; tf-a-stm32mp-2.2.r1-r0.tar.gz为标准tf-a源码包。 解压标准tf-a源码包 linux@ubuntu:$ tar -xvf tf-a-stm32mp-2.2.r1-r0.tar.gz 解压完成后得到tf-a-stm32mp-2.2.r1目录 ![]() 进入tf-a源码目录下: linux@ubuntu:$ cd tf-a-stm32mp-2.2.r1 ![]() 将ST官方补丁文件打到tf-a源码中: linux@ubuntu:$ for p in `ls -1 ../*.patch`; do patch -p1 < $p; done TF卡分区 要对TF卡进行烧录,需要先将TF接入到ubuntu系统中。 查看TF卡分区 linux@ubuntu:$ ls /dev/sd* ![]() 由上图所示只有“/dev/sdb1”一个分区则需要重新进行分区。 首先删除原有分区 linux@ubuntu:$ sudo parted -s /dev/sdb mklabel msdos 如果显示如下内容,则表示设备已经被挂载,需要卸载掉设备再删除分区。 ![]() 卸载设备 linux@ubuntu:$ umount /dev/sdb1 卸载完成后重新执行删除分区命令 linux@ubuntu:$ sudo parted -s /dev/sdb mklabel msdos 对tf进行重新分区 linux@ubuntu:$ sudo sgdisk --resize-table=128 -a 1 -n 1:34:545 -c 1:fsbl1 -n 2:546:1057 -c 2:fsbl2 -n 3:1058:5153 -c 3:ssbl -n 4:5154:136225 -c 4:bootfs -n 5:136226 -c 5:rootfs -A 4:set:2 -p /dev/sdb -g ![]() 注意:最后-p /dev/sdb参数中的/dev/sdb需要按照实际ubuntu中的tf节点为准,否则可能发生不可预料的后果。 建立自己的平台配置工具链 1.导入交叉编译工具链(如果还未安装SDK可参考《SDK工具链安装》章节进行安装) linux@ubuntu:$ source /opt/st/stm32mp1/3.1-openstlinux-5.4-dunfell-mp1-20-06-24/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi 验证开发工具是否安装正确,显示版本信息如下图所示。 linux@ubuntu:$ $CC --version ![]() 2.增加板级相关文件 进入到tf-a源码目录
添加设备树文件
修改上层目录下的Makefile.sdk编译脚本在TFA_DEVICETREE配置项中添加stm32mp157a-fsmp1a
修改 fdts/stm32mp157a-fsmp1a.dts将 #include "stm32mp15xx-dkx.dtsi" 修改为 #include "stm32mp15xx-fsmp1x.dtsi" 3.编译源码 执行如下指令编译trusted: linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all 编译成功后,最后显示内容(部分截图)如下: ![]() 编译完成后会在上级build/trusted目录得到如下文件: linux@ubuntu:$ ls ../ build/trusted ![]() linux@ubuntu:$ cd ../ build/trusted 4.固件烧写 由于在移植过程中会多次烧写固件并且会导致正常tf-a无法启动,因此推荐使用TF卡启动的方式来验证。 tf-a需要使用trusted 格式的u-boot镜像启动,具体的编译方法可参考《U-boot移植》章节中的“生成Trusted镜像”小节。 将TF接入ubuntu系统后,查看TF卡分区 linux@ubuntu:$ ls /dev/sd* ![]() /dev/sdb为TF卡设备。如果该设备下只有/dev/sdb1一个分区则重新分区。 执行如下指令烧写u-boot:
其中前两条命令“ tf-a-stm32mp157a-fsmp1a-trusted.stm32”为本章节编译得到的,第三条命令中的“u-boot-stm32mp157a-fsmp1a-trusted.stm32”则为《U-boot移植》章节中的“生成Trusted镜像”小节得到。 5.启动开发板 将拨码开关设置为SD卡启动方式: ![]() 将制作好的TF卡插入开发板,上电后会出现如下错误提示: ![]() 这个错误产生的原因是电源初始化错误,需重新调整电源相关配置 调整设备树电源配置 由于官方参考板DK1采用电源管理芯片做电源管理,而FS-MP1A采用分离电路作为电源管理,本例需要将文件中原有电源管理芯片相关内容去掉,增加上固定电源相关内容 1.去掉原有电源管理内容 DK1参考板电源管理芯片挂在I2C4上,而FS-MP1A并未使用I2C4总线,所以直接将I2C4相关内容完全删除即可。 修改 fdts/stm32mp15xx-fsmp1x.dtsi文件 将文件中i2c4节点相关内容整体删除,删除内容如下:
修改 fdts/stm32mp15xx-fsmp1x.dtsi文件,删除如下内容:
2.添加固定电源配置 修改fdts/:文件 固定电源配置通常添加在根节点下,在根节点末尾位置添加如下内容(红色字体为需要添加的内容):
3.重新编译源码 linux@ubuntu:$ make -f $PWD/../Makefile.sdk TFA_DEVICETREE=stm32mp157a-fsmp1a TF_A_CONFIG=trusted ELF_DEBUG_ENABLE='1' all 4.烧写后启动 重新烧写后启动现象如下: ![]() 可以看到现在已经可以启动到u-boot了 eMMC移植 参考原理图可知eMMC使用的是SDMMC2总线,当前所使用的设备树文件中没有SDMMC2的支持,所以需要增加相关内容才能正常驱动eMMC。 ![]() 由于在使STM32MP1芯片很多管脚为多功能复用管脚,且很多管脚具备同样的功能,所以移植eMMC时需要确认硬件设计是使用的是那些管脚,根据原理图确认后管脚对应关系为: ![]() 1.管脚定义 在u-boot中STM32MP1默认管脚定义在文件 arch/arm/dts/stm32mp15-pinctrl.dtsi中,查看文件中是否有需要的管脚定义: 查看后确认有SDMMC2的管脚定义,且与FS-MP1A硬件使用情况一致,定义如下:
2.增加SDMMC2节点信息 修改 fdts/stm32mp15xx-fsmp1x.dtsi增加SDMMC2的信息 在原有sdmmc1节点下增加sdmmc2的内容,添加内容可参考 arch/arm/dts/stm32mp15xx-edx.dtsi中sdmmc2的写法,内容如下:
———————————————— 版权声明:华清远见IT开放实验室 |
更新STM32MP135-Openwrt镜像
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。