第2章:OP-TEE项目概览
好,咱们正式开始接触OP-TEE。这一章我会带你从三个角度切入:架构长什么样、源码怎么组织的、以及怎么把编译环境搭起来。说白了,就是让你先对整个项目有个全局印象,别一上来就扎进代码细节里出不来。
2.1 OP-TEE的架构
OP-TEE的架构,我习惯把它理解成「三块板子搭起来的桥」。哪三块?
- REE侧(正常世界):跑Linux、Android这些通用OS的地方。应用层叫CA(Client Application),通过TEE Client API发起安全请求。
- TEE侧(安全世界):跑OP-TEE OS的地方。这里的应用叫TA(Trusted Application),处理敏感数据,比如密钥、指纹特征。
- Monitor模式:负责切换世界。ARM架构里叫SMC(Secure Monitor Call),这是硬件级别的上下文切换。
你想想看,为什么非得分两个世界?
我在项目中遇到过一件事:有个客户把用户密码直接存在Linux文件系统里,结果被root提权拿走了。后来改成存到TEE侧,就算Linux被攻破,密码也拿不到。这就是隔离的价值。
核心思想:REE侧不可信,TEE侧可信。所有敏感操作必须挪到TEE侧执行。
下面这张图是我自己画的架构关系,你看一眼就能明白数据流怎么走的:
个人经验:刚开始接触时,别纠结Monitor模式的实现细节。你只需要记住:CA调用TA时,数据会经过共享内存传递,而共享内存是双方都能访问的物理内存区域。
2.2 OP-TEE的源码结构
源码结构这事儿,我建议你直接去GitHub上拉一份下来对照着看。这里我挑几个关键目录说说:
| 目录/文件 | 作用 | 我踩过的坑 |
|---|---|---|
core/ |
OP-TEE内核代码,包括SMC处理、内存管理、线程调度 | 改过这里的线程栈大小,结果系统起不来 |
ta/ |
TA开发框架和示例TA | 示例TA里的hello_world是入门最好的起点 |
lib/ |
密码库、数学库、TEE Internal API实现 | 别自己造轮子,直接用libutee |
scripts/ |
编译脚本、签名工具、打包工具 | 签名脚本的参数顺序搞错过,折腾了一下午 |
build/ |
构建系统(基于CMake) | 建议用Docker编译,省去环境依赖的麻烦 |
嗯,这里要注意:core/arch/arm/ 下面才是真正跟硬件平台相关的代码。如果你要移植到新板子,主要改这里。
2.3 OP-TEE的编译环境搭建
编译环境搭建,说白了就是装工具链、下源码、跑脚本。我建议你直接用官方提供的Docker镜像,省心。
2.3.1 环境要求
- 操作系统:Ubuntu 20.04/22.04(我用的是22.04,没出过问题)
- 工具链:aarch64-linux-gnu-gcc(交叉编译用)
- 依赖包:python3、cmake、make、git、curl、uuid-dev
- 硬件:至少4GB内存,20GB磁盘空间
2.3.2 快速搭建步骤
我个人习惯用repo工具一次性拉取所有组件:
# 1. 安装repo
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# 2. 初始化OP-TEE项目
mkdir op-tee && cd op-tee
repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml
repo sync -j4
# 3. 编译(第一次会比较慢)
cd build
make -j4 toolchains
make -j4 all
避坑指南:我曾经因为网络问题,repo sync反复失败。解决办法是设置git代理,或者用国内镜像源。另外,make toolchains这一步会下载几百MB的交叉编译器,确保网络稳定。
2.3.3 验证编译结果
编译成功后,你会看到这些输出文件:
out/bin/
├── tee-pager_v2.bin # OP-TEE OS镜像
├── bl31.bin # ARM Trusted Firmware
├── Image # Linux内核
└── rootfs.cpio.gz # 根文件系统
用QEMU跑一下试试:
make run-only
看到OP-TEE的启动日志,就说明环境搭好了。
小技巧:如果你只想编译TA而不编译整个系统,可以单独执行 make ta。我调试TA时经常这么干,能省一半时间。
好了,这一章的内容就这些。架构图你存好,源码结构记个大概,编译环境照着步骤来一遍。下一章我们会深入TA开发,到时候这些基础都用得上。
本章要点回顾:
- OP-TEE分REE、TEE、Monitor三层,核心是隔离
- 源码主要关注core/、ta/、lib/、build/四个目录
- 编译用repo + make,推荐Docker或QEMU环境