14

大伟 · 2021年02月17日

使用M1芯片的Macbook开发TF-M

基于Arm架构的M1芯片的Macbook

20年果粉圈最大的新闻应该就是Apple推出第一款基于Arm架构的自研SoC M1,并且装备在了自己的Macbook,Mac Mini产品上。
具体的评测,大家可以参考这篇文章
笔者有幸拿到了一台M1版本的Macbook Air。尝试了搭建TF-M的开发环境,非常顺利。所以把相关步骤和注意事项分享给大家。

编译TF-M的前期准备

最重要的问题应该就是编译TF-M所需的工具及库软件的安装。
以前在x86下可能问题并不是太大,但是现在切换到Arm架构的M1,软件适配方面的问题就尤为重要。
所幸笔者发现,常用工具对M1架构的还是不错的,而且适配的速度远超笔者预期。
下面以GNUArm编译器为例,介绍一下M1芯片的系统中,如何搭建TF-M开发环境。

一下内容基于
硬件:Macbook Air M1 8G 256GB
系统:macOS Big Sur 11.1

macOS基础设定

在开始安装TF-M相关环境之前,我们先把macOS的环境设定好。

命令行改为bash

笔者因为长期用Linux环境开发,所以先把macOS默认的zsh改为bash。
简单点说,就是在命令行执行chsh -s /bin/bash,然后重启命令行。详细介绍可以参考这篇文章

bash配置文件

由于后面我们会修改环境变量,所以首先把bash的配置文件创建好。关于.bash_profile和.bashrc文件在macOS下的问题,参考这篇文章
简单的说,在用户的家目录下创建这两个文件,然后.bash_profile调用.bashrc。这样做是因为保持与其他Linux/Unix平台做法一致。当然,你也可以在.bash_profile中做所有事情而忽略.bashrc。
创建.bash_profile(这里使用vi作为文本编辑器,可以替换为你喜欢的)

vi ~/.bash_profile

编辑.bash_profile并保存

if [ -r ~/.bashrc ]; then
   source ~/.bashrc
fi

创建.bashrc

vi ~/.bashrc

以后可以像其他Linux平台一样,修改.bashrc文件。

安装homebrew

为了后面安装软件更方便,推荐安装homebrew
方法非常简单,在命令行执行

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

这里如果出现无法连接的情况,需要检查一下DNS设置。添加114.114.114.114和8.8.8.8作为DNS服务器地址。DNS设置方法这里不详细描述,可以很容易在网上找到。这里主要介绍与搭建环境相关的步骤和要点。

homebrew安装好之后,会出现在/opt/homebrew目录,可以把可执行文件加入到PATH中,编辑~/.bashrc,添加:

export PATH="$PATH:/opt/homebrew/bin"

重启终端或者source ~/.bashrc之后,如果可以使用brew命令,则说明安装设置正确。

TF-M的依赖软件

参考TF-M的帮助文档,我们可以知道,TF-M的开发环境需要的软件大致有:

  • CMake
  • GNUArm Compiler
  • Python3以及Pip3,相应的Python依赖包

下面一一介绍他们的安装步骤和要点

CMake

可以在CMake的官方网站下载安装包-地址
比如,下载cmake-3.19.5-macos10.10-universal.dmg文件或者其他最新版本的CMake。
下载好之后,和安装其他macOS软件的方法一样安装就可以。
命令行环境变量的使用,放在后面一起介绍。

ANUArm Compiler

在Arm官网下载-地址
选择Mac的安装包,如gcc-arm-none-eabi-10-2020-q4-major-mac.pkg,或者更新的版本。
下载好之后,和安装其他macOS软件的方法一样安装就可以。
命令行环境变量的使用,放在后面一起介绍。

Python3和TF-M的Python依赖库安装

系统可能已经安装python3,但是为了确保安装正确,我们通过brew安装python3。在命令行中执行
brew install python3
此时,python3和pip3应该已经一起安装完毕。

随后,进入TF-M的安装目录,进行python依赖库的安装
cd <your tf-m folder>
pip3 install -r tools/requirements.txt
这时,很有可能你会遇到安装cryptography时的错误
这里遇到的唯一一个难点。
总结下来,问题有:

  • 缺少Rust编译环境

访问Rust官网安装,简单的说,就是执行
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装成功后,在你的.bashrc文件会看到多了下面一行
source "$HOME/.cargo/env"
重新打开终端或者source ~/.bashrc后解决。
如果安装过程有问题,可以通过brew安装。这里不再赘述。

  • 找不到openssl头文件

首先确定安装openssl:
brew install openssl@1.1
然后手动带路径安装cryptography
env LDFLAGS="-L$(brew --prefix openssl)/lib" CFLAGS="-I$(brew --prefix openssl)/include" pip3 install cryptography

如果手动安装cryptography成功,可以再回去安装其他的TF-M依赖库
pip3 install -r tools/requirements.txt

现在安装应该全部没有问题了。

把CMake和GNUArm的路径加入PATH

前面安装好CMake和GNUArm之后,还没有把可执行文件路径加入PATH。
编辑~/.bashrc,加入
export PATH="$PATH:/Applications/CMake.app/Contents/bin"
export PATH="$PATH:/Applications/ARM/bin"
如果你把这两个软件安装到了不同目录,则只要修改路径即可
重启启动终端或者source ~/.bashrc后,可以尝试能否找到这两个工具
cmake --version
arm-none-eabi-gcc --version

尝试编译TF-M

在所有环境都安装好之后,我们进入TF-M代码目录,尝试编译TF-M

cmake -S . -B cmake_build -DTFM_PLATFORM=mps2/an521 -DTFM_TOOLCHAIN_FILE=toolchain_GNUARM.cmake
cmake --build cmake_build -- install

一切顺利的话,TF-M应该可以正常编译了。

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