Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ass:labs-2024:03:tasks:02 [2025/08/03 10:12] (current)
florin.stancu created
Line 1: Line 1:
 +==== 02. Writing Trusted Applications ====
 +
 +In the second part of our lab, it's time to run some Trusted Applications (TAs)!
 +
 +We will use the official [[https://​github.com/​linaro-swg/​optee_examples|optee_examples]] as starting point.
 +
 +Two questions arise: how can one compile a TA? + how to test it on our board?
 +
 +== Step 5. Not so fast... we forgot about the kernel? ==
 +
 +If we wish to communicate with OP-TEE from Linux, we need to configure its driver (don't worry, we don't need to recompile the kernel, it's included in ''​defconfig'''​).
 +
 +Of course, the intended way to do that is by modifying the Linux Device Tree.
 +Do it as [[https://​elixir.bootlin.com/​u-boot/​v2023.04/​source/​doc/​device-tree-bindings/​firmware/​linaro,​optee-tz.txt|documented here]] ;)
 +
 +<​note>​
 +In case you need a little reminder, the device tree source code is inside linux'​s ''​arch/​arm64/''​.
 +
 +We promised that you won't need to recompile the kernel, you just need to recompile its DTB ;) use:
 +<​code>​
 +make ARCH=... dtbs
 +</​code>​
 +
 +Afterwards, you need to copy the new ''​.dtb''​ into your ''​staging/''​ directory and [[:​ass:​labs-2024:​02:​tasks:​01#​task_d_-_fit_image|re-build the Linux FIT]] (e.g., ''​linux.itb''​). And upload it to your emmc (check out the ''​ums''​ trick described below!).
 +</​note>​
 +
 +== Step 6. Building a TA ==
 +
 +We can use our workstation / laptop to cross-compile a trusted application!
 +
 +Read the [[https://​optee.readthedocs.io/​en/​latest/​building/​gits/​optee_examples/​optee_examples.html|official instructions here]].
 +
 +<​note>​
 +Note that you must build [[https://​optee.readthedocs.io/​en/​latest/​building/​gits/​optee_client.html#​build-instructions|the optee_client first]]. Note that CMake needs to receive the path to CROSS_COMPILEr'​s gcc via specific define (argument).
 +
 +Also set the ''​-DCMAKE_INSTALL_PREFIX=...''​ cmake flag to some dir in your project'​s working root directory and run ''​make install''​ at the end to copy the final product there. It will be required to specify its path (see below).
 +</​note>​
 +
 +<​note>​
 +Build both the host app and the TA need to be compiled TOGETHER with the TEE Client Library, and the OPTEE OS exported SDK, respectively.
 +
 +Make sure to read the examples documentation to see the make variables to set!
 +</​note>​
 +
 +== Step 7. Signing the TA ==
 +
 +Remember the secure boot process?
 +The Secure OS (OP-TEE) will also verify each TA before being able to load it!
 +
 +Fortunately,​ OP-TEE comes with a predefined key pair, used to facilitate development / testing (**warning**:​ highly insecure since anybody can retrieve that key from the source repository!).
 +
 +[[https://​optee.readthedocs.io/​en/​latest/​building/​trusted_applications.html#​signing-of-tas|Read on for the TA signing procedure]]!
 +
 +Even better: **the TA Makefile automatically signs the .ta** using the development key.
 +So we won't need to do anything more! Yay...
 +
 +== Step 8. Testing the TA ==
 +
 +Our rootfs image already contains the OP-TEE client library.
 +
 +You just need to copy to the cross-compiled binaries to your boot partition.
 +
 +For this, put u-boot in USB Mass Storage mode:
 +<​code>​
 +u-boot=> ums mmc 0
 +</​code>​
 +
 +Do not Ctrl+C yet, leave it running and mount the newly appeared USB device in your PC/VM!
 +
 +After copying the files, boot the Linux package (you can use the Lab02 boot commands, see Readme.md).
 +
 +Mount the boot partition and run the TA (you might need to copy it somewhere else and ''​chmod +x''​)!
 +Then execute the program ;) 
 +
 +<note info>
 +Observe the error: OP-TEE cannot find the ''​.ta''​ file inside a trusted memory or REE.
 +
 +For this, you will need to copy the signed ''<​UUID>​.ta''​ file to ''/​lib/​optee_armtz/'',​ as (very badly) documented.
 +</​note>​
 +
  
ass/labs-2024/03/tasks/02.txt ยท Last modified: 2025/08/03 10:12 by florin.stancu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0