blob: 9d931020ffc13227ad5c2541c6342e535cda9176 [file] [log] [blame] [view]
---
permalink: /trustzone-sdk-docs/advanced-setup.md
---
# Advanced Setup: Customize Your Build Environment
## Platforms
To get started with Teaclave TrustZone SDK, you could choose either [QEMU for
Armv8-A](#develop-with-qemuv8) (QEMUv8) or [other
platforms](#develop-on-other-platforms) ([platforms OP-TEE
supported](https://optee.readthedocs.io/en/latest/general/platforms.html)) as
your development environment.
### Develop with QEMUv8
The OP-TEE libraries are needed when building Rust applications, so you should
finish the [Quick start with the OP-TEE Repo for
QEMUv8](#quick-start-with-the-op-tee-repo-for-qemuv8) part first. Then
initialize the building environment in Teaclave TrustZone SDK, build Rust
applications and copy them into the target's filesystem.
Teaclave TrustZone SDK is located in `[YOUR_OPTEE_DIR]/optee_rust/`. Teaclave
TrustZone SDK in OP-TEE repo is pinned to the release version. Alternatively,
you can try the develop version using `git pull`:
```sh
cd [YOUR_OPTEE_DIR]/optee_rust/
git pull github master
```
### Develop on Other Platforms
If you are building trusted applications for other platforms ([platforms OP-TEE
supported](https://optee.readthedocs.io/en/latest/general/platforms.html)). QEMU
and the filesystem in the OP-TEE repo are not needed. You can follow these
steps to clone the project and build applications independently from the
complete OP-TEE repo. In this case, the necessary OP-TEE libraries are
initialized in the setup process.
1. The complete list of prerequisites can be found here: [OP-TEE
Prerequisites](https://optee.readthedocs.io/en/latest/building/prerequisites.html).
```sh
# install dependencies
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
```
Alternatively, you can use a docker container built with our
[Dockerfile](Dockerfile).
2. After installing dependencies or building the Docker image, fetch the source
code from the official GitHub repository:
```sh
git clone https://github.com/apache/teaclave-trustzone-sdk.git
cd teaclave-trustzone-sdk
```
## Setup Building Environment
Currently, we support building on both `aarch64` and `x86_64` host machines, and
they share the same steps.
1. Install the Rust environment and toolchains:
```sh
./setup.sh
```
2. Build OP-TEE libraries
By default, the `OPTEE_DIR` is
`teaclave-trustzone-sdk/optee/`. OP-TEE submodules
(`optee_os` and `optee_client` for QEMUv8) will be initialized
automatically by executing:
```sh
./build_optee_libraries.sh optee/
```
3. Before building applications, set up the configuration:
a. By default, the target platform is `aarch64` for both CA and TA. If
you want to build for the `arm` target, you can set up `ARCH`:
```sh
export ARCH_HOST=arm
export ARCH_TA=arm
```
b. By default, the build is for `no-std` TA. If you want to enable
`std` TA, set the `STD` variable:
```sh
export STD=y
```
4. Run this script to set up all toolchain and library paths:
```sh
source environment
```
## Build Examples
Run this command to build all Rust examples:
``` sh
make examples
```
Or build your own CA and TA:
```sh
make -C examples/[YOUR_APPLICATION]
```
Besides, you can collect all example CAs and TAs to
`/teaclave-trustzone-sdk/out`:
```sh
make examples-install
```
## Run Rust Applications
Considering the platform has been chosen
([QEMUv8](#run-rust-applications-in-qemuv8) or
[other](#run-rust-applications-on-other-platforms)), the ways to run the Rust
applications are different.
### Run Rust Applications in QEMUv8
1. The shared folder is needed to share CAs and TAs with the QEMU guest system.
Recompile QEMU in OP-TEE to enable QEMU VirtFS:
```sh
(cd $OPTEE_DIR/build && make QEMU_VIRTFS_ENABLE=y qemu)
```
2. Copy all the Rust examples or your own applications to the shared folder:
```sh
mkdir shared_folder
cd [YOUR_OPTEE_DIR]/optee_rust/ && make examples-install)
cp -r [YOUR_OPTEE_DIR]/optee_rust/out/* shared_folder/
```
3. Run QEMU:
```sh
(cd $OPTEE_DIR/build && make run-only QEMU_VIRTFS_ENABLE=y
QEMU_VIRTFS_HOST_DIR=$(pwd)/shared_folder)
```
4. After the QEMU has been booted, you need to mount the shared folder in the
QEMU guest system (username: root), in order to access the compiled CA/TA from
QEMU. Run the command as follows in the QEMU guest terminal:
```sh
mkdir shared && mount -t 9p -o trans=virtio host shared
```
5. Then run CA and TA as [this
documentation](https://optee.readthedocs.io/en/latest/building/optee_with_rust.html)
describes.
### Run Rust Applications on Other Platforms
Copy the applications to your platform and run.