OP-Tee Test suite
Note
TL;DR - Guide for OP-TEE (Open Portable Trusted Execution Environment) on embedded platforms — covering trusted application development, secure storage, and hardware-backed isolation. - Part of Amarula Solutions’ embedded security documentation.
optee client
Note
Before building optee test suite, make sure you have already built the optee os
Optee client runs on linux side which provides tee-supplicant clone optee client repo
git clone https://github.com/OP-TEE/optee_client.git
cd optee_client
Setenv cross compile environment
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/home/shyam/buildroot/output/host/opt/ext-toolchain/bin:$PATH
make
Copy all files from out/export/ to sdcard rootfs
cp -vrf out/export/* /path to sd card mount directory/
Optee Test suite
Optee test suite provides benchmark and regression test suite.
Clone optee_test repo
git clone https://github.com/OP-TEE/optee_test.git
cd optee_test
Set cross compile and optee specific environment variables
export TA_DEV_KIT_DIR=/path to /optee_os/out/arm-plat-imx/export-ta_arm32
export OPTEE_CLIENT_EXPORT=/path to /optee_client/out/export
export CROSS_COMPILE_HOST=arm-linux-gnueabihf-
export CROSS_COMPILE_TA=arm-linux-gnueabihf-
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=/path to toolchain/bin:$PATH
Now we execute make command with COMPILE_NS_USER flag. For imx6qdl its 32
ARCH=arm make COMPILE_NS_USER=32
Copy all .ta *.elf in out/ to sd card rootfs /lib/optee_armtz/
cp -vrf `find out/ -name *.ta` /path to sdcard mount directory/lib/optee_armtz/
cp -vrf `find out/ -name *.elf` /path to sdcard mount directory/lib/optee_armtz/
cp -vf out/xtest/xtest /path to sdcard mount directory/bin/
Now, insert the sd card and boot linux with optee.
First run tee-supplicant
tee-supplicant &
First we run benchmark test with level 0, means minimal tests
xtest -t benchmark
Test Results:
benchmark_1001 TEE Trusted Storage Performance Test (WRITE)
-----------------+---------------+----------------
Data Size (B) | Time (s) | Speed (kB/s)
-----------------+---------------+----------------
256 | 0.040 | 6.250
512 | 0.055 | 9.091
1024 | 0.055 | 18.182
2048 | 0.100 | 20.000
4096 | 0.243 | 16.461
16384 | 1.086 | 14.733
524288 | 46.275 | 11.064
1048576 | 95.700 | 10.700
-----------------+---------------+----------------
benchmark_1001 OK
* benchmark_1002 TEE Trusted Storage Performance Test (READ)
-----------------+---------------+----------------
Data Size (B) | Time (s) | Speed (kB/s)
-----------------+---------------+----------------
256 | 0.001 | 250.000
512 | 0.001 | 500.000
1024 | 0.001 | 1000.000
2048 | 0.003 | 666.667
4096 | 0.008 | 500.000
16384 | 0.033 | 484.848
524288 | 1.027 | 498.539
1048576 | 2.035 | 503.194
-----------------+---------------+----------------
benchmark_1002 OK
* benchmark_1003 TEE Trusted Storage Performance Test (REWRITE)
-----------------+---------------+----------------
Data Size (B) | Time (s) | Speed (kB/s)
-----------------+---------------+----------------
256 | 0.042 | 5.952
512 | 0.042 | 11.905
1024 | 0.043 | 23.256
2048 | 0.286 | 6.993
4096 | 0.212 | 18.868
16384 | 0.991 | 16.145
524288 | 49.030 | 10.443
1048576 | 102.586 | 9.982
-----------------+---------------+----------------
benchmark_1003 OK
* benchmark_2001 TEE SHA Performance test (TA_SHA_SHA1)
min=262us max=588.333us mean=274.617us stddev=29.5489us (cv 10.76%) (3.55608MiB/s)
benchmark_2001 OK
* benchmark_2002 TEE SHA Performance test (TA_SHA_SHA226)
min=411.333us max=763.667us mean=430.237us stddev=36.6874us (cv 8.52726%) (9.07931MiB/s)
benchmark_2002 OK
* benchmark_2011 TEE AES Performance test (TA_AES_ECB)
min=319us max=638.334us mean=332.388us stddev=30.8239us (cv 9.27346%) (2.93802MiB/s)
benchmark_2011 OK
* benchmark_2012 TEE AES Performance test (TA_AES_CBC)
min=357us max=758us mean=373.566us stddev=34.0887us (cv 9.12523%) (2.61417MiB/s)
benchmark_2012 OK
Result of testsuite benchmark:
benchmark_1001 OK
benchmark_1002 OK
benchmark_1003 OK
benchmark_2001 OK
benchmark_2002 OK
benchmark_2011 OK
benchmark_2012 OK
24 subtests of which 0 failed
7 test cases of which 0 failed
0 test case was skipped
TEE test application done!
Now, we run benchmark test with level 15, means all the tests
xtest -t benchmark -l 15
-----------------+---------------+----------------
Data Size (B) | Time (s) | Speed (kB/s)
-----------------+---------------+----------------
256 | 0.052 | 4.808
512 | 0.052 | 9.615
1024 | 0.036 | 27.778
2048 | 0.098 | 20.408
4096 | 0.709 | 5.642
16384 | 0.968 | 16.529
524288 I/TA: command id: 0, test data size: 256, chunk size: 1024
| 46.708 | 10.962
1048576 | 97.244 | 10.530
-----------------+---------------+----------------
benchmark_1001 OK
* benchmark_1002 TEE Trusted Storage Performance Test (READ)
I/TA: start: 3318.376(s), stop: 3318.377(s), delta: 1(ms)
I/TA: command id: 0, test data size: 512, chunk size: 1024
I/TA: start: 3318.637(s), stop: 3318.639(s), delta: 2(ms)
I/TA: command id: 0, test data size: 1024, chunk size: 1024
I/TA: start: 3318.915(s), stop: 3318.917(s), delta: 2(ms)
I/TA: command id: 0, test data size: 2048, chunk size: 1024
I/TA: start: 3319.255(s), stop: 3319.258(s), delta: 3(ms)
I/TA: command id: 0, test data size: 4096, chunk size: 1024
I/TA: start: 3319.733(s), stop: 3319.741(s), delta: 8(ms)
I/TA: command id: 0, test data size: 16384, chunk size: 1024
I/TA: start: 3320.893(s), stop: 3320.925(s), delta: 32(ms)
I/TA: command id: 0, test data size: 524288, chunk size: 1024
I/TA: start: 3367.678(s), stop: 3368.727(s), delta: 1049(ms)
I/TA: command id: 0, test data size: 1048576, chunk size: 1024
I/TA: start: 3469.15(s), stop: 3471.55(s), delta: 2040(ms)
-----------------+---------------+----------------
Data Size (B) | Time (s) | Speed (kB/s)
-----------------+---------------+----------------
256 | 0.001 | 250.000
512 | 0.002 | 250.000
1024 | 0.002 | 500.000
2048 | 0.003 | 666.667
4096 | 0.008 | 500.000
16384 | 0.032 | 500.000
524288 I/TA: command id: 2, test data size: 256, chunk size: 1024
| 1.049 | 488.084
1048576 | 2.040 | 501.961
-----------------+---------------+----------------
benchmark_1002 OK
* benchmark_1003 TEE Trusted Storage Performance Test (REWRITE)
I/TA: start: 3471.361(s), stop: 3471.411(s), delta: 50(ms)
I/TA: command id: 2, test data size: 512, chunk size: 1024
I/TA: start: 3471.705(s), stop: 3471.747(s), delta: 42(ms)
I/TA: command id: 2, test data size: 1024, chunk size: 1024
I/TA: start: 3472.14(s), stop: 3472.55(s), delta: 41(ms)
I/TA: command id: 2, test data size: 2048, chunk size: 1024
I/TA: start: 3472.351(s), stop: 3472.450(s), delta: 99(ms)
I/TA: command id: 2, test data size: 4096, chunk size: 1024
I/TA: start: 3472.863(s), stop: 3473.97(s), delta: 234(ms)
I/TA: command id: 2, test data size: 16384, chunk size: 1024
I/TA: start: 3474.634(s), stop: 3475.460(s), delta: 826(ms)
I/TA: command id: 2, test data size: 524288, chunk size: 1024
I/TA: start: 3521.591(s), stop: 3569.728(s), delta: 48137(ms)
I/TA: command id: 2, test data size: 1048576, chunk size: 1024
I/TA: start: 3671.322(s), stop: 3772.377(s), delta: 101055(ms)
-----------------+---------------+----------------
Data Size (B) | Time (s) | Speed (kB/s)
-----------------+---------------+----------------
256 | 0.050 | 5.000
512 | 0.042 | 11.905
1024 | 0.041 | 24.390
2048 | 0.099 | 20.202
4096 | 0.234 | 17.094
16384 | 0.826 | 19.370
524288 | 48.137 | 10.636
1048576 | 101.055 | 10.133
-----------------+---------------+----------------
benchmark_1003 OK
* benchmark_2001 TEE SHA Performance test (TA_SHA_SHA1)
min=271us max=629.667us mean=283.53us stddev=28.9001us (cv 10.193%) (3.4443MiB/s)
benchmark_2001 OK
* benchmark_2002 TEE SHA Performance test (TA_SHA_SHA226)
min=415.333us max=783.334us mean=435.947us stddev=38.411us (cv 8.81094%) (8.96038MiB/s)
benchmark_2002 OK
* benchmark_2011 TEE AES Performance test (TA_AES_ECB)
min=329.667us max=676us mean=346.326us stddev=32.3748us (cv 9.34808%) (2.81978MiB/s)
benchmark_2011 OK
* benchmark_2012 TEE AES Performance test (TA_AES_CBC)
min=359.667us max=792us mean=376.213us stddev=32.3281us (cv 8.59304%) (2.59577MiB/s)
benchmark_2012 OK
+-----------------------------------------------------
Result of testsuite benchmark:
benchmark_1001 OK
benchmark_1002 OK
benchmark_1003 OK
benchmark_2001 OK
benchmark_2002 OK
benchmark_2011 OK
benchmark_2012 OK
+-----------------------------------------------------
24 subtests of which 0 failed
7 test cases of which 0 failed
0 test case was skipped
TEE test application done!
Now, we run the regression tests with level[0-15] 15
xtest -t regression -l 15
+-----------------------------------------------------
Result of testsuite regression:
regression_1001 OK
regression_1002 OK
regression_1003 OK
regression_1004 OK
regression_1005 OK
regression_1006 OK
regression_1007 OK
regression_1008 OK
regression_1009 OK
regression_1010 OK
regression_1011 OK
regression_1012 OK
regression_1013 OK
regression_1015 OK
regression_1016 OK
regression_1017 OK
regression_1018 OK
regression_1019 OK
regression_2001 OK
regression_2002 OK
regression_2003 OK
regression_2004 OK
regression_4001 OK
regression_4002 OK
regression_4003 OK
regression_4004 OK
regression_4005 OK
regression_4006 OK
regression_4007 OK
regression_4008 OK
regression_4009 OK
regression_4010 OK
regression_4011 OK
regression_4012 OK
regression_5006 OK
regression_6001 OK
regression_6002 OK
regression_6003 OK
regression_6004 OK
regression_6005 OK
regression_6006 OK
regression_6007 OK
regression_6008 OK
regression_6009 OK
regression_6010 OK
regression_6012 OK
regression_6013 OK
regression_6014 OK
regression_6015 OK
regression_6016 OK
regression_6017 OK
regression_6018 OK
regression_6019 OK
regression_6020 OK
regression_7001 OK
regression_7002 OK
regression_7003 OK
regression_7004 OK
regression_7005 OK
regression_7006 OK
regression_7007 OK
regression_7008 OK
regression_7009 OK
regression_7010 OK
regression_7013 OK
regression_7016 OK
regression_7017 OK
regression_7018 OK
regression_7019 OK
regression_8001 OK
regression_8002 OK
regression_8101 OK
regression_8102 OK
regression_8103 OK
+-----------------------------------------------------
16081 subtests of which 0 failed
74 test cases of which 0 failed
0 test case was skipped
TEE test application done!
SHA performance testing tool
xtest --aes-perf -v
Starting test: ECB, encrypt, keysize=128 bits, size=1024 bytes, random=no, in place=no, inner loops=1, loops=5000, warm-up=2 s
min=302.333us max=694us mean=316.77us stddev=30.7425us (cv 9.70496%) (3.08287MiB/s)
2-sigma interval: 255.286..378.255us (2.58175..3.82537MiB/s)
AES performance testing tool
xtest --sha-perf -v
Starting test: SHA1, size=1024 bytes, random=no, unaligned=no, inner loops=1, loops=5000, warm-up=2 s
min=261.667us max=588.333us mean=273.777us stddev=27.9708us (cv 10.2167%) (3.567MiB/s)
2-sigma interval: 217.835..329.718us (2.96181..4.48304MiB/s)
Tip
Need secure boot or TEE integration for your embedded product? Amarula Solutions provides OP-TEE implementation, trusted application development, and hardware-backed security for ARM platforms. Contact our security team