2. 开发环境准备
说实话,做TEE开发最怕什么?不是代码写不出来,而是环境没搭好,折腾半天连编译都过不了。我见过太多新手卡在这一步,最后放弃了。所以这一章,咱们把地基打牢。
我个人习惯用Ubuntu 20.04 LTS作为开发机。为什么选它?因为ATF官方长期测试的就是这个版本,你换太新的反而容易踩坑。嗯,这里要注意,别用Windows直接搞,交叉编译环境会让你崩溃的。
2.1 虚拟机搭建——别偷懒,用对的版本
我推荐用VMware Workstation或者VirtualBox。如果你问我选哪个?我偏向VMware,稳定性更好。但VirtualBox免费,也够用。
具体步骤我就不啰嗦了,说几个关键点:
- 内存分配:至少4GB,我建议8GB。编译ATF时内存不够会卡死。
- 磁盘空间:至少40GB。你以为源码很小?加上工具链、编译中间文件,轻松上10GB。
- CPU核心:分配2核以上,编译能快不少。
2.2 必要工具链安装——gcc、make、git
好,虚拟机跑起来了。接下来装工具。你想想看,没有编译器,代码怎么变成二进制?
打开终端,执行以下命令:
sudo apt update
sudo apt upgrade -y
sudo apt install -y build-essential git gcc make python3 python3-pip
这里有个坑——build-essential这个包已经包含了gcc和make,但有些同学会漏掉。我曾经遇到过一位学员,只装了gcc没装make,结果makefile跑不起来,查了半天。
验证一下安装是否成功:
gcc --version
make --version
git --version
看到版本号输出,就说明装好了。
2.3 源码下载——从官方仓库拉取
工具链装好了,接下来下载ATF源码。我习惯用git clone,方便后续更新和切换分支。
mkdir -p ~/tee_workspace
cd ~/tee_workspace
git clone https://github.com/ARM-software/arm-trusted-firmware.git
如果你网络不好,可以用国内镜像。我个人推荐gitee上的同步仓库:
git clone https://gitee.com/mirrors/arm-trusted-firmware.git
下载完成后,进入目录看看:
cd arm-trusted-firmware
ls -la
2.4 目录结构——别迷路
ATF的目录结构,说白了就是一套清晰的模块划分。我第一次看的时候也觉得眼花,但摸清楚规律后就好办了。
核心目录如下:
| 目录/文件 | 作用 |
|---|---|
bl1/ |
Boot Loader阶段1——最底层的启动代码 |
bl2/ |
Boot Loader阶段2——负责加载后续镜像 |
bl31/ |
Boot Loader阶段3——运行时服务,TEE核心就在这里 |
bl32/ |
Boot Loader阶段3的SP(安全分区)——可选 |
plat/ |
平台相关代码——不同开发板在这里适配 |
drivers/ |
驱动代码——比如GIC、UART等 |
lib/ |
通用库——比如c库、xlat表等 |
tools/ |
辅助工具——比如证书生成、镜像打包 |
Makefile |
编译入口——整个项目的构建脚本 |
我刚开始做ATF集成时,最常打交道的是plat/和bl31/这两个目录。说白了,你要移植到新板子,主要改的就是plat/下面的代码。
核心逻辑图:ATF的启动流程与目录对应关系
你看这张图,ATF的启动是分阶段的。BL1是最底层,负责初始化硬件,然后跳转到BL2。BL2负责加载后续镜像,最后进入BL31(运行时服务)。BL32是可选的,如果你需要TEE,就在这里实现。
我当年第一次移植ATF到自家板子时,就是照着这个结构,先在plat/下新建了一个目录,然后一步步实现每个阶段的回调函数。说白了,ATF的框架设计得很清晰,你只要按规矩来,就不会出大问题。
2.5 验证环境——跑一个简单的编译
环境搭好了,总得试试能不能用。咱们先编译一个最简版本:
cd ~/tee_workspace/arm-trusted-firmware
make PLAT=fvp DEBUG=1
这里PLAT=fvp是指定目标平台为FVP(Fixed Virtual Platform),是ARM官方的虚拟平台。第一次编译会下载一些依赖,耐心等几分钟。
如果编译成功,你会看到类似这样的输出:
Built build/fvp/debug/bl1.bin
Built build/fvp/debug/bl2.bin
Built build/fvp/debug/bl31.bin
看到这三个bin文件,恭喜你,环境搭建成功了!
mbedtls缺失的问题,执行sudo apt install libmbedtls-dev就解决了。
好,到这里开发环境就准备好了。下一章咱们开始真正动手,写第一个TEE示例程序。
可可精品资料库