编译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