Trusty系统基础入门

第五章:源码结构与编译

5. 源码结构与编译

(1) Trusty源码树解析(/trusty/目录结构)

Trusty TEE的源代码采用模块化设计,主要目录结构如下:

trusty/ ├── app/ # 可信应用程序(TA)示例代码 │ ├── sample/ # 示例TA │ └── ... ├── lib/ # 系统库和中间件 │ ├── libc/ # 精简版C库 │ ├── libstdc++/ # 精简版C++库 │ └── ... ├── lk/ # Little Kernel(微内核)代码 │ ├── arch/ # 架构相关代码(ARM/ARM64) │ ├── kernel/ # 核心内核代码 │ ├── platform/ # 平台相关代码 │ └── ... ├── scripts/ # 构建脚本和工具 ├── services/ # 系统服务实现 │ ├── gatekeeper/ # 密钥管理服务 │ ├── keymaster/ # 密钥派生服务 │ └── ... ├── system/ # 系统组件 │ ├── console/ # 控制台实现 │ ├── mm/ # 内存管理 │ └── ... └── user/ # 用户空间组件 ├── trusty/ # Trusty用户空间库 └── ...

关键目录说明:

(2) 模块化编译(lk/内核与用户态组件)

Trusty采用模块化编译系统,主要分为内核和用户态两部分:

内核部分编译

内核编译基于LK构建系统,主要步骤:

# 设置目标平台(如qemu-arm32)
export TARGET=your_target_platform

# 进入lk目录
cd trusty/lk

# 执行编译
make
        

内核编译关键配置选项:

配置选项 说明 默认值
WITH_TRUSTY_IPC 启用Trusty IPC通信机制 1
WITH_KERNEL_VM 启用内核虚拟内存管理 1
WITH_LIB_CONSOLE 启用控制台支持 1
TRUSTY_USER_ARCH 用户空间架构(arm/arm64) arm

用户态组件编译

用户态组件使用单独的构建系统:

# 进入用户态构建目录
cd trusty/user

# 执行编译
make
        

注意:用户态组件编译依赖于内核头文件和库,通常需要先完成内核编译。

(3) 生成镜像分析(trusty.img、tos.bin)

编译完成后会生成以下关键镜像文件:

镜像文件 位置 说明 组成
trusty.img trusty/build/ 完整的Trusty系统镜像 内核+用户态+TA
tos.bin trusty/lk/build-* Trusty OS二进制(仅内核) LK内核+Trusty扩展
trusty_app.img trusty/user/build/ 用户态组件镜像 系统服务+TA

镜像结构分析

trusty.img 是完整的Trusty系统镜像,其结构如下:

trusty.img结构示意图

图:trusty.img镜像结构

  1. 头部信息 - 包含镜像元数据、版本信息等
  2. 内核代码段 - LK内核的.text段
  3. 内核数据段 - LK内核的.data和.bss段
  4. 用户态代码 - 系统服务和TA的可执行代码
  5. 文件系统 - 可选的文件系统映像(如用于存储TA)

镜像验证:可以使用trusty/tools/imgtool.py工具验证和解析镜像内容:

# 查看镜像信息
./imgtool.py info trusty.img

# 解包镜像
./imgtool.py unpack trusty.img output_dir