首发极术社区
作者:大伟
如对Arm相关技术感兴趣,欢迎私信aijishu20加入技术微信群。
20年果粉圈最大的新闻应该就是Apple推出第一款基于Arm架构的自研SoC M1,并且装备在了自己的Macbook,Mac Mini产品上。 具体的评测,大家可以参考这篇文章 笔者有幸拿到了一台M1版本的Macbook Air。尝试了搭建TF-M的开发环境,非常顺利。所以把相关步骤和注意事项分享给大家。
最重要的问题应该就是编译TF-M所需的工具及库软件的安装。 以前在x86下可能问题并不是太大,但是现在切换到Arm架构的M1,软件适配方面的问题就尤为重要。 所幸笔者发现,常用工具对M1架构的还是不错的,而且适配的速度远超笔者预期。 下面以GNUArm编译器为例,介绍一下M1芯片的系统中,如何搭建TF-M开发环境。
一下内容基于 硬件:Macbook Air M1 8G 256GB 系统:macOS Big Sur 11.1
在开始安装TF-M相关环境之前,我们先把macOS的环境设定好。
笔者因为长期用Linux环境开发,所以先把macOS默认的zsh改为bash。 简单点说,就是在命令行执行chsh -s /bin/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。 方法非常简单,在命令行执行
/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的开发环境需要的软件大致有:
CMakeGNUArm CompilerPython3以及Pip3,相应的Python依赖包
下面一一介绍他们的安装步骤和要点
可以在CMake的官方网站下载安装包-地址 比如,下载cmake-3.19.5-macos10.10-universal.dmg文件或者其他最新版本的CMake。 下载好之后,和安装其他macOS软件的方法一样安装就可以。 命令行环境变量的使用,放在后面一起介绍。
在Arm官网下载-地址。 选择Mac的安装包,如gcc-arm-none-eabi-10-2020-q4-major-mac.pkg,或者更新的版本。 下载好之后,和安装其他macOS软件的方法一样安装就可以。 命令行环境变量的使用,放在后面一起介绍。
系统可能已经安装python3,但是为了确保安装正确,我们通过brew安装python3。在命令行中执行 brew install python3 此时,python3和pip3应该已经一起安装完毕。
随后,进入TF-M的安装目录,进行python依赖库的安装 cd 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 [email protected] 然后手动带路径安装cryptography env LDFLAGS="-L ( b r e w − − p r e f i x o p e n s s l ) / l i b " C F L A G S = " − I (brew --prefix openssl)/lib" CFLAGS="-I (brew−−prefixopenssl)/lib"CFLAGS="−I(brew --prefix openssl)/include" pip3 install cryptography
如果手动安装cryptography成功,可以再回去安装其他的TF-M依赖库 pip3 install -r tools/requirements.txt
现在安装应该全部没有问题了。
前面安装好CMake和GNUArm之后,还没有把可执行文件路径加入PATH。 编辑~/.bashrc,加入 export PATH=“ P A T H : / A p p l i c a t i o n s / C M a k e . a p p / C o n t e n t s / b i n " e x p o r t P A T H = " PATH:/Applications/CMake.app/Contents/bin" export PATH=" PATH:/Applications/CMake.app/Contents/bin"exportPATH="PATH:/Applications/ARM/bin” 如果你把这两个软件安装到了不同目录,则只要修改路径即可 重启启动终端或者source ~/.bashrc后,可以尝试能否找到这两个工具 cmake --version arm-none-eabi-gcc --version
在所有环境都安装好之后,我们进入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应该可以正常编译了。
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。