You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.7 KiB
76 lines
2.7 KiB
Trusted Little Kernel (TLK) Dispatcher
|
|
======================================
|
|
|
|
TLK dispatcher (TLK-D) adds support for NVIDIA's Trusted Little Kernel (TLK)
|
|
to work with Trusted Firmware-A (TF-A). TLK-D can be compiled by including it
|
|
in the platform's makefile. TLK is primarily meant to work with Tegra SoCs,
|
|
so while TF-A only supports TLK on Tegra, the dispatcher code can only be
|
|
compiled for other platforms.
|
|
|
|
In order to compile TLK-D, we need a BL32 image to be present. Since, TLKD
|
|
just needs to compile, any BL32 image would do. To use TLK as the BL32, please
|
|
refer to the "Build TLK" section.
|
|
|
|
Once a BL32 is ready, TLKD can be included in the image by adding "SPD=tlkd"
|
|
to the build command.
|
|
|
|
Trusted Little Kernel (TLK)
|
|
---------------------------
|
|
|
|
TLK is a Trusted OS running as Secure EL1. It is a Free Open Source Software
|
|
(FOSS) release of the NVIDIA® Trusted Little Kernel (TLK) technology, which
|
|
extends technology made available with the development of the Little Kernel (LK).
|
|
You can download the LK modular embedded preemptive kernel for use on Arm,
|
|
x86, and AVR32 systems from https://github.com/travisg/lk
|
|
|
|
NVIDIA implemented its Trusted Little Kernel (TLK) technology, designed as a
|
|
free and open-source trusted execution environment (OTE).
|
|
|
|
TLK features include:
|
|
|
|
• Small, pre-emptive kernel
|
|
• Supports multi-threading, IPCs, and thread scheduling
|
|
• Added TrustZone features
|
|
• Added Secure Storage
|
|
• Under MIT/FreeBSD license
|
|
|
|
NVIDIA extensions to Little Kernel (LK) include:
|
|
|
|
• User mode
|
|
• Address-space separation for TAs
|
|
• TLK Client Application (CA) library
|
|
• TLK TA library
|
|
• Crypto library (encrypt/decrypt, key handling) via OpenSSL
|
|
• Linux kernel driver
|
|
• Cortex A9/A15 support
|
|
• Power Management
|
|
• TrustZone memory carve-out (reconfigurable)
|
|
• Page table management
|
|
• Debugging support over UART (USB planned)
|
|
|
|
TLK is hosted by NVIDIA on http://nv-tegra.nvidia.com under the
|
|
3rdparty/ote\_partner/tlk.git repository. Detailed information about
|
|
TLK and OTE can be found in the Tegra\_BSP\_for\_Android\_TLK\_FOSS\_Reference.pdf
|
|
manual located under the "documentation" directory\_.
|
|
|
|
Build TLK
|
|
---------
|
|
|
|
To build and execute TLK, follow the instructions from "Building a TLK Device"
|
|
section from Tegra\_BSP\_for\_Android\_TLK\_FOSS\_Reference.pdf manual.
|
|
|
|
Input parameters to TLK
|
|
-----------------------
|
|
|
|
TLK expects the TZDRAM size and a structure containing the boot arguments. BL2
|
|
passes this information to the EL3 software as members of the bl32\_ep\_info
|
|
struct, where bl32\_ep\_info is part of bl31\_params\_t (passed by BL2 in X0)
|
|
|
|
Example
|
|
~~~~~~~
|
|
|
|
::
|
|
|
|
bl32_ep_info->args.arg0 = TZDRAM size available for BL32
|
|
bl32_ep_info->args.arg1 = unused (used only on Armv7-A)
|
|
bl32_ep_info->args.arg2 = pointer to boot args
|
|
|