软件
$ sudo dpkg --add-architecture i386
$ sudo apt-get update
$ sudo apt-get install android-tools-adb android-tools-fastboot autoconf \
automake bc bison build-essential ccache cscope curl device-tree-compiler \
expect flex ftp-upload gdisk iasl libattr1-dev libc6:i386 libcap-dev \
libfdt-dev libftdi-dev libglib2.0-dev libhidapi-dev libncurses5-dev \
libpixman-1-dev libssl-dev libstdc++6:i386 libtool libz1:i386 make \
mtools netcat python-crypto python3-crypto python-pyelftools \
python3-pycryptodome python3-pyelftools python-serial python3-serial \
rsync unzip uuid-dev xdg-utils xterm xz-utils zlib1g-dev
下载源码
$ mkdir -p <optee-project>
$ cd <optee-project>
$ repo init -u https://github.com/OP-TEE/manifest.git -m qemu_v8.xml -b 3.9.0
$ repo sync -j4 --no-clone-bundle
编译工具链
$ cd <optee-project>/build
$ make toolchains
下载工具链时间太长会导致编译错误,可以先手动下载,再编译
$ mkdir <optee-project>/toolchains
$ cd <optee-project>/toolchains
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
修改 <optee-project>/build/toolchain.mk,不再自动下载工具链
diff --git a/toolchain.mk b/toolchain.mk
index 8bc4b16..a240fad 100644
--- a/toolchain.mk
+++ b/toolchain.mk
@@ -22,7 +22,6 @@ define dltc
@if [ ! -d "$(1)" ]; then \
mkdir -p $(1); \
echo "Downloading $(3) ..."; \
- curl -s -L $(2) -o $(TOOLCHAIN_ROOT)/$(3).tar.xz; \
tar xf $(TOOLCHAIN_ROOT)/$(3).tar.xz -C $(1) --strip-components=1; \
fi
endef
$ make toolchains
编译
$ make -j `nproc`
期间碰到一个编译错误,因为我的bash里面之前为了编译Android 8.1加了一行 export LC_ALL=C,去掉就编译通过了
"aarch64-linux-gnu-ld.bfd: cannot find -los_test"
运行
$ make run
输入c
$ (qemu) c
REE shell:listening on port 54320
login root
# optee_example_hello_world
Invoking TA to increment 42
TA incremented value to 43
#
TEE shell: listening on port 54321
D/TC:? 0 tee_ta_init_pseudo_ta_session:284 Lookup pseudo TA 8aaaf200-2450-11e4-abe2-0002a5d5c51b
D/TC:? 0 load_ldelf:703 ldelf load address 0x40006000
D/LD: ldelf:134 Loading TA 8aaaf200-2450-11e4-abe2-0002a5d5c51b
D/TC:? 0 tee_ta_init_session_with_context:573 Re-open TA 3a2f8978-5dc0-11e8-9c2d-fa7ae01bbebc
D/TC:? 0 system_open_ta_binary:257 Lookup user TA ELF 8aaaf200-2450-11e4-abe2-0002a5d5c51b (Secure Storage TA)
D/TC:? 0 system_open_ta_binary:260 res=0xffff0008
D/TC:? 0 system_open_ta_binary:257 Lookup user TA ELF 8aaaf200-2450-11e4-abe2-0002a5d5c51b (REE)
D/TC:? 0 system_open_ta_binary:260 res=0x0
D/LD: ldelf:169 ELF (8aaaf200-2450-11e4-abe2-0002a5d5c51b) at 0x40051000
D/TC:? 0 tee_ta_close_session:499 csess 0xe17b360 id 1
D/TC:? 0 tee_ta_close_session:518 Destroy session
D/TC:? 0 tee_ta_close_session:499 csess 0xe17bb60 id 1
D/TC:? 0 tee_ta_close_session:518 Destroy session
D/TC:? 0 destroy_context:298 Destroy TA ctx (0xe17bb00)