1. 环境说明
1.1 主要软件版本列表
软件名称 | 软件版本 | 下载链接 |
---|---|---|
qemu | 5.0.0 | https://www.qemu.org/download/ |
linux | 5.5.8 | https://www.kernel.org |
trusted-firmware-a | 2.3 | https://www.trustedfirmware.org/ |
uboot | 2020.04-rc3 | |
optee_os | master | https://github.com/OP-TEE |
optee_client | master | https://github.com/OP-TEE |
optee_examples | master | https://github.com/OP-TEE |
其中如何在qemu下运行linux内核请参加我的上一篇文档《编译、运行linux kernel@qemu-based ARM》。这里需要注意的是:
- 由于optee_client需要访问tee设备驱动,所以需要在/etc/fstab文件中添加对dev和sys路径的mount。
- 需要也提前准备arm32的交叉编译器,同样可以在Arm Developer网站下载,并设置ARCH和CROSS_COMPILE环境变量。
$ export ARCH=arm64
$ export CROSS_COMPILE=aarch64-none-linux-gnu-
2. 编译构建
2.1 构建optee_os组件
首先需要完成optee_os和optee_client的构建,因为后面在构建trusted firmware-A时需要用到,详细过程可以参考OP-TEE的官方文档。
直接编译可能会出现如下错误提示:
ModuleNotFoundError: No module named ‘Crypto’
ModuleNotFoundError: No module named ‘Cryptodome’
需要在make前安装pycryptodome和pycryptodomex两个python包,命令如下,其中考虑到网速问题,使用了清华pip源:
pip3 install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple/
pip3 install pycryptodomex -i https://pypi.tuna.tsinghua.edu.cn/simple/
# 注意无论是编译64位还是32位ARM,都是设置为arm,不能设置为arm64。
$ make \
ARCH=arm \
CFG_ARM64_core=y \
CFG_TEE_BENCHMARK=n \
CFG_TEE_CORE_LOG_LEVEL=3 \
CROSS_COMPILE=aarch64-none-linux-gnu- \
CROSS_COMPILE_core=aarch64-none-linux-gnu- \
CROSS_COMPILE_ta_arm32=arm-none-linux-gnueabihf- \
CROSS_COMPILE_ta_arm64=aarch64-none-linux-gnu- \
DEBUG=1 \
O=out/arm \
PLATFORM=vexpress-qemu_armv8a
# 编译完成后会生成下面三个重要的bin文件,在后面trusted-firmware-a的编译过程中会用到。
# GEN out/arm/core/tee-header_v2.bin
# GEN out/arm/core/tee-pager_v2.bin
# GEN out/arm/core/tee-pageable_v2.bin
注意这里编译的目标平台是qemu,其他的平台可以参见OP-TEE官方文档中Platforms supported by build.git的说明。
2.2 构建optee_client组件
optee_client的编译就比较简单了,进入相应目录后,执行如下操作。
$ make CROSS_COMPILE=aarch64-none-linux-gnu-
2.3 构建optee的样例
以hello world为例,需要分别编译运行在TEE和REE上的程序,其中:
Trusted application
$ cd optee_examples/hello_world/ta
$ make \
ARCH