OPEN-TEE 代码目录结构及编译目标

1. 代码目录结构

下面是 armv7 和 armv8 QEMU 的 OPEN-TEE 目录结构,主要差在于 arm v8 用 UEFI-EDK2 替换了 U-Boot-LK,并引入了加密组件 mbedtls。

qemu-armv7 目录树结构:

linaro_optee/
├── build
├── buildroot
├── clang-9.0.1
├── linux
├── optee_benchmark
├── optee_client
├── optee_examples
├── optee_os
├── optee_test
├── out
├── out-br
├── qemu
├── soc_term
├── toolchains
├── trusted-firmware-a
└── u-boot

qemu-armv8 目录树结构:

linaro_optee_v8/
├── build
├── buildroot
├── clang-9.0.1
├── edk
├── linux
├── mbedtls
├── optee_benchmark
├── optee_client
├── optee_examples
├── optee_os
├── optee_test
├── out
├── out-br
├── qemu
├── soc_term
├── toolchains
├── trusted-firmware-a

各子目录说明如下:

(1)build:
包含不同平台的 makefiles 及对应的 kconfig 文件。

(2)buildroot:
一个简单高效且易于使用的工具,可通过交叉编译来生成嵌入式 Linux 系统。其操作步骤如下:
a.运行’make menuconfig’;
b.选择目标架构和要编译的软件包;
c.运行’make’;
d.等待编译;
e.在输出/映像中找到内核,引导加载程序,根文件系统等。
更多信息详见:https://buildroot.org。

(3)clang-9.0.1:
一款用于编译 C/C++ 的 clang + llvm 工具链。
更多信息详见:https://clang.llvm.org。

(4)edk2:
包含遵循 UEFI 标准的 booloader 源代码。
更多信息详见:https://www.uefi.org。

(5)linux:
包含 linux kernel 源代码。
更多信息详见:https://www.kernel.org。

(6)mbedtls:
开源的 ssl/tls 加密组件,轻量级,更适用于嵌入式产品。
更多信息详见:https://tls.mbed.org。

(7)optee_benchmark:
包含 OPEN-TEE 项目基准框架的源代码。

(8)optee_client:
包含 OPEN-TEE 项目的 Non-Secure 侧实现的源代码,该源代码构成了客户端库和 tee-supplicant。

(9)optee_examples:
包含可直接在 OPEN-TEE 项目中使用的示例 CA 和 TA 的源代码。

(10)optee_os:
包含 OPEN-TEE 项目的 os 源代码。

(11)optee_test:
包含用于 OPEN-TEE 项目的测试套件(xtest)源代码。

(12)out:
用于存储下载烧录的 image,如 bl1.bin、bl2.bin、bl32.bin、bl32_extra1.bin、bl32_extra2.bin、bl33.bin、rootfs.cpio.gz、zImage等。

(13)out-br:
用于存放 buildroot 工具编译生成的文件的目录。

(14)qemu:
一个通用的开源的仿真模拟器的源代码。
更多信息详见:https://qemu.org。

(15)soc_term:
用于监听 Linux 和 OPEN-TEE 两个终端的端口,以便其 log 能正确重定向至对应的终端中。

(16)toolchains:
包含编译时所需的工具链 AARCH32_CROSS + AARCH32_GCC(AARCH64_CROSS + AARCH64_GCC)。

(17)trusted-firmware-a:
用于Arm A-Profile体系结构(Armv8-A和Armv7-A)的 Secure Word 软件的参考实现,其中包括 Exception Level3(EL3)– Secure Monitor。它为在 AArch32 或 AArch64 执行状态下的 Secure Word 启动和运行时固件产品化提供了一个合适的起点。其接口标准包括:
a.电源状态协调接口(PSCI);
b.可信的板级启动客户端(TBBR-CLIENT);
c.SMC调用约定;
d.系统控制和管理接口(SCMI);
e.软件异常接口(SDEI)。
更多信息详见:https://www.trustedfirmware.org。

(18)u-boot:
包含用于 PowerPC,ARM,MIPS 等其他嵌入式处理器上的,安装在引导 ROM 中并用于初始化、测试硬件、下载并运行的 bootloader 源代码。
更多信息详见:https://www.denx.de/wiki/U-Boot。

2. 编译目标

根据 makefile/cmake 并结合 log 整理出编译目标依赖关系如下:

all
├── arm-tf
│ ├── optee-os
│ │── edk2
│ │ └── build_edk2
│ └── u-boot
│ └── build_uboot
├── buildroot
│ └── optee-os
├── linux
│ └── linux-common
│ └── linux-defconfig
├── optee-os
│ └── optee-os-common
├── qemu
│ └── build_qemu
├── soc-term
│ └── build_socterm
├── xtest
│ └── xtest-common
│ ├── optee-os
│ └── optee-client
├── benchmark-app
│ └── benchmark-app-common
│ ├── optee-os
│ └── optee-client
├── optee_examples
│ └── optee-examples-common
│ ├── optee-os
│ └── optee-client
│ ├── install
│ ├── copy_export
│ └── build
│ ├── build-tee-supplicant
│ │ └── build-libteec
│ └── build-libckteec
│ └── build-libteec

(1)arm-tf 会编译 trusted-firmware-a 目录生成 bl1 / bl2 / bl31 等文件。

(2)edk2 和 u-boot 会分别编译生成 edk / uboot bin 文件。

(3)linux 会编译 linux 目录生成 kernel 文件。

(4)optee_examples 会编译 optee_examples 目录生成 OPEN-TEE 提供的 ca / ta 文件。

(5)optee_os 会编译 optee_os 目录生成 tee bin 文件。

(6)qemu 会切换至 qemu 目录编译 qemu 相关文件。

(7)soc-term 会编译 soc-term 目录生成 soc-term 文件。

(8)xtest 会编译 optee_test 目录生成 xtest 使用的 ta / ca 文件。