| ################################### |
| Trusted Firmware-M Source Structure |
| ################################### |
| |
| :Organization: Arm Limited |
| :Contact: tf-m@lists.trustedfirmware.org |
| |
| .. note:: |
| Reference the document :doc:`Glossary </docs/reference/glossary>` for terms |
| and abbreviations. |
| |
| ************ |
| Introduction |
| ************ |
| TF-M is designed to provide a user-friendly source structure to ease |
| integration and service development. This document introduces the source |
| structure and its design intention of TF-M. |
| |
| .. note:: |
| - This document goes ahead of the implementation so the existing source |
| structure may be different from the description listed here. It is |
| recommended to refer to this document for ongoing code structure changes. |
| - By getting feedback from the practical implementation, this document is |
| updated continuously before it is detailed enough to be a user guide. |
| |
| **************** |
| Source Structure |
| **************** |
| The description of the source structure is broken down into subsections, each |
| subsection introduces one detailed folder. |
| |
| Root Directory |
| ============== |
| This table describes the structure under the root directory with part of |
| possible folders. Note that the ``Detailed`` field indicates if the folder is |
| described in details here in this document: |
| |
| ============= ==================================== ==================== |
| Folder name Purpose Detailed |
| ============= ==================================== ==================== |
| bl2 The 2nd stage bootloader. No. |
| cmake Cmake files. No. |
| configs Configuration system files. No. |
| docs The documentations. No. |
| lib The 3rd party library. No. |
| **platform** Platform intermedia files. See `'platform'`_. |
| **secure_fw** The secure firmware. See `'secure_fw'`_. |
| tools Tools in scripts for building. No. |
| ============= ==================================== ==================== |
| |
| 'platform' |
| ========== |
| The platform sources contain necessary platform sources or intermedia files |
| pointing to the sources out of TF-M folder. |
| |
| ========================= ============================================= |
| Folder name Purpose |
| ========================= ============================================= |
| common/\* Common HAL implementation. |
| include/\* Platform public headers. |
| <vendor> Vendor specific folders. |
| ========================= ============================================= |
| |
| .. note:: |
| The ``common`` folder contains the example implementation of the ``HAL`` API |
| bases on common ``system`` (CMSIS e.g.). The platform could reference to |
| sources in the ``common`` folder directly if applicable or apply a |
| customized HAL implementation. |
| A ``system`` can have a standalone folder under ``common``, depends on how |
| 'common' this system is. Each ``platform vendor`` is assigned with one |
| folder for usage. As the content of the ``vendor`` folder comes by the |
| contribution of vendors, the ``vendor`` manages the structure inside it. |
| |
| 'secure_fw' |
| =========== |
| This folder contains components needed by secure firmware, and the exported |
| interfaces for application, service development and HAL integration: |
| |
| ================= ===================================== ====================== |
| Folder name Purpose Detailed |
| ================= ===================================== ====================== |
| **include** Public headers of 'secure_fw'. See `'include'`_ |
| **partitions** Default services and supportings. See `'partitions'`_ |
| **spm** PSA-FF-M SPM implementation. [1] See `'spm'`_ |
| ================= ===================================== ====================== |
| |
| .. note:: |
| 1. A PSA-FF-M complied SPM implementation. |
| |
| The headers referenced by other modules are public headers and put under the |
| 'include' folder of the current module. Do not put headers not referenced by |
| other modules in this 'include' folder. |
| |
| 'include' |
| --------- |
| This folder holds headers for client, services and platform integration usage. |
| |
| =========================== =================================================== |
| Folder name Purpose |
| =========================== =================================================== |
| psa/\* PSA FF Client API. |
| =========================== =================================================== |
| |
| .. note:: |
| TFM applies an explicit including policy. Each module's headers are put into |
| a specific folder which follows the pattern '\*/inc', this folder needs to be |
| added into the project's searching path if this project needs to include |
| headers in this folder. The 'inc' in a path indicates the end of |
| including-path. If there are subfolders under folder 'inc', apply a |
| hierarchy including. |
| |
| 'partitions' |
| ------------ |
| This folder contains default services implemented as partitions and necessary |
| partition runtime utilities provided by TF-M. |
| |
| ================================= ============================================= |
| Folder name Purpose |
| ================================= ============================================= |
| lib/sprt/\* The SPRTL sources and intermedia files. [1] |
| lib/sprt/shared\* Sources can be shared by out of SPRTL. [2] |
| <partition_x>/\* Files for 'partition_x'. |
| <partition_x>/include/\* RoT Service API headers of 'partition_x'. [3] |
| <partition_y>/\* Files for 'partition_y'. |
| <partition_y>/include/\* RoT Service API headers of 'partition_y'. [3] |
| ================================= ============================================= |
| |
| .. note:: |
| 1. The SPRTL sources and intermediate files. SPRTL contains sources from |
| other folders, such as necessary RoT Service API implementation from |
| 'partitions' folder. |
| 2. The sources here can be referenced by the building system out of SPRTL. |
| Generally, they are runtime and PSA APIs. |
| 3. Here takes 'partition_x' and 'partition_y' as an example, and showcases |
| a detailed structure of them. The `<interface>` contains the RoT Service |
| API for client calls. The folder name of this client-orient folder is |
| decided by the service developer. |
| |
| 'spm' |
| ----- |
| The SPM is the core component to provide a mechanism for providing secure |
| services. |
| |
| =================================== =========================================== |
| Folder name Purpose |
| =================================== =========================================== |
| include/\* SPM public headers. |
| ffm/\* SPM logic complies with PSA-FF-M and |
| its necessary supporting functionalities, |
| such as the runtime API and the thread |
| operation, etc. |
| cmsis_psa/\* CMSIS implementation for PSA-FF-M SPM. [1] |
| cmsis_func/\* The library model implementation. [2] |
| \* Implementation sources. |
| =================================== =========================================== |
| |
| .. note:: |
| 1. CMSIS is the first implementation system. |
| 2. This folder contains a function call based secure firmware implementation. |
| This model is the prototype model which would be updated after the PSA |
| model. Create a standalone folder to hold it. |
| |
| -------------- |
| |
| *Copyright (c) 2020, Arm Limited. All rights reserved.* |