본문 바로가기
IT 이야기

[OPTEE-64bit] Optee_os, Optee_client, Optee_example

by Dblog 2021. 7. 16.
728x90

https://optee.readthedocs.io/en/latest/index.html

 

OP-TEE Documentation — OP-TEE documentation documentation

© Copyright 2019 - 2021 TrustedFirmware.org Revision 5b145175.

optee.readthedocs.io

 

공식 문서에 build하는 방법이 있으나 32bit기준으로 설명되어 있으며 개발환경, 폴더 구조에 대하여 정확하게 설명하는 부분도 없고 google에 정보도 많이 없어 본인의 기록을 위해 적습니다.


  • 개발환경
- Ubuntu18.04.05
- Python 3.6.9
- gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

 

32bit일 때 arm-linux-gnueabihf-gcc 를 cross complier로 사용하지만 64bit의 경우는 aarch64-linux-gnu-gcc를 사용하게 됩니다.

필요한 라이브러리를 다운받아야 하는데 일단

$ sudo apt-get install build-essential
$ sudo apt-get install gcc-aarch64-linux-gnu
$ sudo apt-get install g++-aarch64-linux-gnu

를 다운 받습니다. Makefile을 보니까 필요한게

aarch64-linux-gnu-gcc
aarch64-linux-gnu-ld
aarch64-linux-gnu-ar
aarch64-linux-gnu-nm
aarch64-linux-gnu-objcopy
aarch64-linux-gnu-objdump
aarch64-linux-gnu-readelf

요정도 있어야 될것 같습니다.

 

(*제가 테스트한 pwd경로와 폴더 구조입니다.)

 

optee_client

$ git clone https://github.com/OP-TEE/optee_client
$ cd optee_client
$ make CROSS_COMPILE=aarch64-linux-gnu-
$ sudo make install
$ mkdir build
$ cd build
$ cmake -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc ..
$ make

빌드에 성공하면 optee_client 경로에

out/
tee-supplicant/

폴더가 생성됩니다. 각각 out/export, out/libckteec, out/libteec 폴더가 생성되고 /optee_client/build/tee-supplicant 경로에 tee-supplicant 바이너리가 빌드되어 있으면 성공입니다. 

추가로 64bit로 빌드된 것을 확인하기 위해

$ file tee-supplicant

실행했을때

ELF 64-bit를 확인할 수 있습니다.

 

optee_os

$ git clone https://github.com/OP-TEE/optee_os
$ cd optee_os
$ make \
    CFG_ARM64_core=y \
    CFG_TEE_BENCHMARK=n \
    CFG_TEE_CORE_LOG_LEVEL=3 \
    CROSS_COMPILE=aarch64-linux-gnu- \
    CROSS_COMPILE_core=aarch64-linux-gnu- \
    CROSS_COMPILE_ta_arm32=arm-linux-gnueabihf- \
    CROSS_COMPILE_ta_arm64=aarch64-linux-gnu- \
    DEBUG=1 \
    O=out/arm \
    PLATFORM=vexpress-qemu_armv8a

빌드에 성공하면 out폴더가 생성됩니다. 폴더를 따라가다보면 optee_os/out/arm/export-ta_arm64 경로가 있는것을 확인해야합니다.

 

optee_example[hello-world]

$ git clone https://github.com/linaro-swg/optee_examples.git
$ cd optee_examples/hello_world/host
$ make \
    CROSS_COMPILE=aarch64-linux-gnu- \
    TEEC_EXPORT=<optee_client>/out/export/usr \
    --no-builtin-variables
 

$ cd optee_examples/hello_world/ta
$ make \
    CROSS_COMPILE=aarch64-linux-gnu- \
    PLATFORM=vexpress-qemu_virt \
    TA_DEV_KIT_DIR=<optee_os>/out/arm/export-ta_arm64

host/ 에서 명령어를 실행하면 optee_example_hello_world 바이너리가 생성됩니다.

make 명령어는 제 환경 기준으로

$ make \
    CROSS_COMPILE=aarch64-linux-gnu- \
    TEEC_EXPORT=/home/lsdk/tee/optee_client/out/export/usr \
    --no-builtin-variables

명령어를 사용했습니다.

 

ta/의 결과는 아래 사진처럼 나오는데

 

.ta 파일인 8aaaf200-2450-11e4-abe2-0002a5d5c51b.ta가 중요합니다. 나중에 보드에 올릴때 .ta 저걸 올리기 때문에 잘 가지고 있어야 합니다.

 

 

 

728x90

댓글