大伟 · 2019年09月22日

[TF-M]TF-M快速上手-构建和运行

本文作者:Ken Liu

TF-M快速上手-构建和运行

在之前的文章中,我们大概介绍了一下TF-M诞生的背景和它的主要结构,在进行实现细节的探寻之前
,让我们直接从实际的运行入手,看一下TF-M运行起来是什么样子。

环境搭建

根据TF-M源代码中的'Software Requirements'文档,可以得知构建TF-M所需要的组件。在这篇
文章里我们用git bash + gnuarm为例子看一下如何构建TF-M。之所以选这样的一个组合,一是
因为这些工具都是开源容易获取,二是轻量级,在windows下也能操作而不需要装linux.

首先需要安装的软件组件:

  • git for windows (包括git bash的安装)
  • gnuarm compiler (注意一定要装文档中支持的版本,目前是6.3,7.3和8.3。https://developer.arm.com/too...
  • cmake (可以下载安装包或者使用pip安装)
  • make (git bash下能工作的版本可以在这里找到:https://sourceforge.net/proje...
  • python3 (装新一点吧,3.6以上比较推荐)
  • pycryptodome (加解密组件,另一个组件pycrypto在windows下不能工作)
  • pyasn1
  • pyyaml
  • jinja2

所有的python组件都可以使用pip来安装。

获取代码

获取代码之前请确认你的环境中git-lfs支持已经添加,在git bash中输入'git-lfs'可以知道是否
支持。如果没有支持请安装一下,因为CMSIS_5最新版需要使用git-lfs来抓取库文件。
新建一个目录用来放置获取的代码,运行以下命令来获取代码:

cd <folder_created>
git clone https://git.trustedfirmware.org/trusted-firmware-m.git
git clone https://github.com/ARMmbed/mbedtls.git -b mbedtls-2.7.9
git clone https://github.com/ARMmbed/mbed-crypto.git -b mbedcrypto-1.1.0
git clone https://github.com/ARM-software/CMSIS_5.git -b 5.5.0

构建

当所有的代码都获取成功以后,在trusted-firmware-m目录下新建一个目录用来放置构建的中间
文件和结果,这里我们创建一个'build'目录,并且以AN521为目标平台来构建一个目标镜像:

mkdir build
cd build
cmake -G"Unix Makefiles" -DPROJ_CONFIG=`readlink -f ../configs/ConfigRegressionIPC.cmake` -DTARGET_PLATFORM=AN521 -DBL2=False -DCOMPILER=GNUARM ../
cmake --build ./ -- install

构建完成以后,结果会出现在build下。在我们这次的构建中,由于没有引入BL2,secure
irmware的文件存放于build/unit_test/下,NS的镜像存放于build/app下。最终这些文件会也会
被拷贝一份到install目录里。

提示:
如果错过了git-lfs的检查而拉取了CMSIS_5的代码,可能会在编译过程中出现以下错误:
Fatal error: L6007U: Could not recognize the format of file CMSIS_5/CMSIS/RTOS2/RTX/Library/ARM/RTX_V8MMN.lib.
遇到这种情况首先确认安装了带有git-lfs的git版本,然后可以通过以下命令解决这个问题:
cd CMSIS_5 && git-lfs pull

运行

AN521镜像可以在MPS2的FPGA上运行。如果购买了DS5的套件,则在5.27以后的版本里可以使用软件
模拟硬件执行。当然也可以在Qemu上运行,需要安装Qemu 4.0的版本。这里我们使用Qemu来实验。
首先需要安装Qemu 4.0版本,上官网下载安装即可,开源软件获取比较方便。

运行以下命令来运行镜像:

qemu-system-arm -M mps2-an521 -kernel "unit_test/tfm_s.axf" -device loader,file="install/outputs/fvp/tfm_ns.bin",addr=0x00100000 -serial stdio -display none

运行结果参见附录。

注释:BL2里的得到当前运行程序的核的代码在Qemu中可能会导致异常,所以在这次构建过程中我们
没有引入BL2组件。

总结

在这一章我们通过快速的构建一个可以运行的镜像,了解了TF-M是如何构建和执行的,对TF-M有了
一个直观的认识。在后续的文章中我们会深入介绍TF-M的细节,以及如何与其进行整合。

附录

测试log:

$ qemu-system-arm -M mps2-an521 -kernel "unit_test/tfm_s.axf" -device loader,file="install/outputs/fvp/tfm_ns.bin",addr=0x00100000 -serial stdio -display none
[Sec Thread] Secure image initializing!
TFM level is: 1
[Sec Thread] Jumping to non-secure code...

#### Execute test suites for the Secure area ####
Running Test Suite PSA protected storage S interface tests (TFM_SST_TEST_2XXX)...
> Executing 'TFM_SST_TEST_2001'
  Description: 'Set interface'
  TEST PASSED!
> Executing 'TFM_SST_TEST_2002'

......
Skip repeating logs
......

*** Non-secure test suites summary ***
Test suite 'PSA protected storage NS interface tests (TFM_SST_TEST_1XXX)' has  PASSED
Test suite 'Crypto non-secure interface test (TFM_CRYPTO_TEST_6XXX)' has  PASSED
Test suite 'Initial Attestation Service non-secure interface tests(TFM_ATTEST_TEST_2XXX)' has  PASSED
Test suite 'QCBOR regression test(TFM_QCBOR_TEST_7XXX)' has  PASSED
Test suite 'Invert non-secure interface tests (TFM_INVERT_TEST_1XXX)' has  PASSED
Test suite 'Core non-secure positive tests (TFM_CORE_TEST_1XXX)' has  PASSED
Test suite 'IPC non-secure interface test (TFM_IPC_TEST_1XXX)' has  PASSED

*** End of Non-secure test suites ***
推荐阅读
关注数
4569
内容数
186
Arm发布的PSA旨在为物联网安全提供一套全面的安全指导方针,使从芯片制造商到设备开发商等价值链中的每位成员都能成功实现安全运行。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息