溜学生 · 2020年01月03日

[TF-M] 基于Windows命令提示符Command Prompt搭建TF-M构建环境

编译Trusted Firmware - M(TF-M)程序本身依赖于python, cmake, make和工具链,这些工具都能在windows下找到对应的版本,所以在Windows下使用命令提示符构建TF-M是完全可行的。

预装软件

以下软件需要安装到Windows系统中,除非您对这些工具得安装配置特别熟悉,不然请尽量选择使用安装包安装,这样在安装过程中可以帮您自动处理环境变量和相关的组件:

  • 版本控制软件'git',最新可用版本即可: https://git-scm.com/download/win
  • 'Python'运行环境,大于3.5的版本即可: https://www.python.org/
  • Arm工具链,在这里我们使用免费得GNUARM Toolchain,如果您已有取得授权得Arm Compiler,请核对版本,TF-M目前建议使用6.10以上的版本,如需使用Arm Compiler,请参考附录。GNUARM Toolchain版本目前建议2018-q2-update。关于需求的工具链最新版本请参阅最新的TF-M软件需求文档。
  • 'CMake',当前建议3.7 - 3.12之间的版本:https://cmake.org/files/v3.12/
  • 'make',在windows原生环境下取得一个比较正式的'make'有一些难度,网上提供的能正常工作的版本大多不是正规的发布。我们的解决方案是安装'DS-5 Community',这个版本的DS-5可以免费使用有限的工具集合,然而里面包含对我们有用的'make.exe',下载地址为:https://developer.arm.com/too...

检查软件安装情况

在上一章的软件全部安装完成以后,请确保这些命令能够在命令行提示符下运行,假如运行错误是找不到这个文件(如下所示),请设置系统环境变量,添加所需要的路径到'path'变量中,理论上应该只有make需要手动设置,其他软件的安装包会帮你处理系统环境变量。

'xxxxxxxx' is not recognized as an internal or external command,
operable program or batch file.
  • 'git'
  • 'git-lfs'
  • 'make' (默认安装位置:'C:\Program Files\DS-5\ CE v5.29.1\bin')
  • 'cmake'
  • 'python'
  • 'pip'
  • 'arm-none-eabi-gcc' (由于某些原因,猜测是因为32bit的关系,这个命令在命令提示符下无法用tab自动补全,请输入完整名字)

安装依赖源码和工具库

如果上一步都配置正确的话,这一步照着敲命令即可:

Python工具包

pip3 install --user cryptography pyasn1 pyyaml jinja2 cbor

TF-M及依赖项目获取

请准备好您的工作目录,并进入工作目录:

cd  <working_folder>
git clone https://git.trustedfirmware.org/trusted-firmware-m.git
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
git lfs install
cd CMSIS_5
git-lfs pull
cd ..

重要补丁

有一个针对cygwin的修正目前没有从主分支移除,可能会导致编译失败,请在编译之前cherry-pick这个补丁进行修正(欢迎添加Review Comments以加速补丁合并速度):
https://review.trustedfirmwar...

开始构建

cd trusted-firmware-m
md build
cd build
cmake -G"Unix Makefiles" -DPROJ_CONFIG=<Full Path to trusted-firmware-m\configs\ConfigCoreIPC.cmake> -DTARGET_PLATFORM=AN521 -DCOMPILER=GNUARM ../
cmake --build ./ -- install

等候编译结束就能得到平台所需要的程序包,就可以进行下一步的测试了。

部分问题及解决方案

  • 在编译至mbed-crypto的时候可能会报错:
CMake Error at CMakeLists.txt:112 (message):
  Could not create symbolic link for: D:\tfm\mbed-crypto\include\mbedtls -->
Call Stack (most recent call first):
  include/CMakeLists.txt:20 (link_to_source)

这是由于目前编译文件中存在一个过期的修改导致。请应用相关的补丁:https://review.trustedfirmwar...,或者手工删除掉两行:

diff --git a/BuildMbedCrypto.cmake b/BuildMbedCrypto.cmake
index 3f573c9d..4ae4d9b7 100644
--- a/BuildMbedCrypto.cmake
+++ b/BuildMbedCrypto.cmake
@@ -83,9 +83,6 @@ externalproject_add(${MBEDCRYPTO_TARGET_NAME}
     #Enforce our build system's settings.
     CMAKE_ARGS -DCMAKE_MODULE_PATH=${CMAKE_MODULE_PATH} -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
     #Workaround for MbedTLS issue https://github.com/ARMmbed/mbedtls/issues/1496
-    if(MBEDCRYPTO_MBEDTLS_VERSION VERSION_GREATER "2.7.0")
-       CMAKE_ARGS -DCMAKE_HOST_UNIX:bool=true
-    endif()
     #Inherit the build setting of this project
     CMAKE_ARGS -DCMAKE_BUILD_TYPE=${MBEDCRYPTO_BUILD_TYPE}
     #C compiler settings
  • 链接的时候出现链接错误:
[ 84%] Linking C executable tfm_ns.axf
d:/tfm/gcc-arm-none-eabi-7-2018-q2-update-win32/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/bin/ld.exe:D:/tfm/CMSIS_5/CMSIS/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a: file format not recognized; treating as linker script
d:/tfm/gcc-arm-none-eabi-7-2018-q2-update-win32/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/bin/ld.exe:D:/tfm/CMSIS_5/CMSIS/RTOS2/RTX/Library/GCC/libRTX_V8MMN.a:1: syntax error
collect2.exe: error: ld returned 1 exit status
make.exe[2]: *** [app/CMakeFiles/tfm_ns.dir/build.make:108: app/tfm_ns.axf] Error 1
make.exe[1]: *** [CMakeFiles/Makefile2:1010: app/CMakeFiles/tfm_ns.dir/all] Error 2

这是由于没有使用git-lfs拉取CMSIS_5导致。请切换到CMSIS_5目录并使用git-lfs拉取:

cd CMSIS_5
git-lfs pull

DS-5集成

也可以将整个构建过程集成到DS-5的IDE中,可以参考这篇文章:
https://developer.trustedfirm...

使用Arm Compiler

如果您拥有已授权的Arm Compiler版本,请首先在命令行测试环境变量是否设置正确:

armclang

然后将命令行中的GNUARM修改为ARMCLANG即可:

cmake -G"Unix Makefiles" -DPROJ_CONFIG=<Full Path to trusted-firmware-m\configs\ConfigCoreIPC.cmake> -DTARGET_PLATFORM=AN521 -DCOMPILER=ARMCLANG ../
cmake --build ./ -- install
推荐阅读
关注数
4569
内容数
186
Arm发布的PSA旨在为物联网安全提供一套全面的安全指导方针,使从芯片制造商到设备开发商等价值链中的每位成员都能成功实现安全运行。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息