mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-05-08 10:08:47 +00:00
doc: Split the User Guide into multiple files
The User Guide document has grown organically over time and now covers a wide range of topics, making it difficult to skim read and extract information from. Currently, it covers these topics and maybe a couple more: - Requirements (hardware, tools, libs) - Checking out the repo - Basic build instructions - A comprehensive list of build flags - FIP packaging - Building specifically for Juno - Firmware update images - EL3 payloads - Preloaded BL33 boot flow - Running on FVPs - Running on Juno I have separated these out into a few groups that become new documents. Broadly speaking, build instructions for the tools, for TF-A generally, and for specific scenarios are separated. Content relating to specific platforms (Juno and the FVPs are Arm-specific platforms, essentially) has been moved into the documentation that is specific to those platforms, under docs/plat/arm. Change-Id: Ica87c52d8cd4f577332be0b0738998ea3ba3bbec Signed-off-by: Paul Beesley <paul.beesley@arm.com>
This commit is contained in:
parent
d537ee795c
commit
43f35ef516
27 changed files with 2337 additions and 2325 deletions
623
docs/getting_started/build-options.rst
Normal file
623
docs/getting_started/build-options.rst
Normal file
|
@ -0,0 +1,623 @@
|
|||
Build Options
|
||||
=============
|
||||
|
||||
The TF-A build system supports the following build options. Unless mentioned
|
||||
otherwise, these options are expected to be specified at the build command
|
||||
line and are not to be modified in any component makefiles. Note that the
|
||||
build system doesn't track dependency for build options. Therefore, if any of
|
||||
the build options are changed from a previous build, a clean build must be
|
||||
performed.
|
||||
|
||||
.. _build_options_common:
|
||||
|
||||
Common build options
|
||||
--------------------
|
||||
|
||||
- ``AARCH32_INSTRUCTION_SET``: Choose the AArch32 instruction set that the
|
||||
compiler should use. Valid values are T32 and A32. It defaults to T32 due to
|
||||
code having a smaller resulting size.
|
||||
|
||||
- ``AARCH32_SP`` : Choose the AArch32 Secure Payload component to be built as
|
||||
as the BL32 image when ``ARCH=aarch32``. The value should be the path to the
|
||||
directory containing the SP source, relative to the ``bl32/``; the directory
|
||||
is expected to contain a makefile called ``<aarch32_sp-value>.mk``.
|
||||
|
||||
- ``ARCH`` : Choose the target build architecture for TF-A. It can take either
|
||||
``aarch64`` or ``aarch32`` as values. By default, it is defined to
|
||||
``aarch64``.
|
||||
|
||||
- ``ARM_ARCH_MAJOR``: The major version of Arm Architecture to target when
|
||||
compiling TF-A. Its value must be numeric, and defaults to 8 . See also,
|
||||
*Armv8 Architecture Extensions* and *Armv7 Architecture Extensions* in
|
||||
:ref:`Firmware Design`.
|
||||
|
||||
- ``ARM_ARCH_MINOR``: The minor version of Arm Architecture to target when
|
||||
compiling TF-A. Its value must be a numeric, and defaults to 0. See also,
|
||||
*Armv8 Architecture Extensions* in :ref:`Firmware Design`.
|
||||
|
||||
- ``BL2``: This is an optional build option which specifies the path to BL2
|
||||
image for the ``fip`` target. In this case, the BL2 in the TF-A will not be
|
||||
built.
|
||||
|
||||
- ``BL2U``: This is an optional build option which specifies the path to
|
||||
BL2U image. In this case, the BL2U in TF-A will not be built.
|
||||
|
||||
- ``BL2_AT_EL3``: This is an optional build option that enables the use of
|
||||
BL2 at EL3 execution level.
|
||||
|
||||
- ``BL2_IN_XIP_MEM``: In some use-cases BL2 will be stored in eXecute In Place
|
||||
(XIP) memory, like BL1. In these use-cases, it is necessary to initialize
|
||||
the RW sections in RAM, while leaving the RO sections in place. This option
|
||||
enable this use-case. For now, this option is only supported when BL2_AT_EL3
|
||||
is set to '1'.
|
||||
|
||||
- ``BL31``: This is an optional build option which specifies the path to
|
||||
BL31 image for the ``fip`` target. In this case, the BL31 in TF-A will not
|
||||
be built.
|
||||
|
||||
- ``BL31_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
||||
file that contains the BL31 private key in PEM format. If ``SAVE_KEYS=1``,
|
||||
this file name will be used to save the key.
|
||||
|
||||
- ``BL32``: This is an optional build option which specifies the path to
|
||||
BL32 image for the ``fip`` target. In this case, the BL32 in TF-A will not
|
||||
be built.
|
||||
|
||||
- ``BL32_EXTRA1``: This is an optional build option which specifies the path to
|
||||
Trusted OS Extra1 image for the ``fip`` target.
|
||||
|
||||
- ``BL32_EXTRA2``: This is an optional build option which specifies the path to
|
||||
Trusted OS Extra2 image for the ``fip`` target.
|
||||
|
||||
- ``BL32_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
||||
file that contains the BL32 private key in PEM format. If ``SAVE_KEYS=1``,
|
||||
this file name will be used to save the key.
|
||||
|
||||
- ``BL33``: Path to BL33 image in the host file system. This is mandatory for
|
||||
``fip`` target in case TF-A BL2 is used.
|
||||
|
||||
- ``BL33_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
||||
file that contains the BL33 private key in PEM format. If ``SAVE_KEYS=1``,
|
||||
this file name will be used to save the key.
|
||||
|
||||
- ``BRANCH_PROTECTION``: Numeric value to enable ARMv8.3 Pointer Authentication
|
||||
and ARMv8.5 Branch Target Identification support for TF-A BL images themselves.
|
||||
If enabled, it is needed to use a compiler that supports the option
|
||||
``-mbranch-protection``. Selects the branch protection features to use:
|
||||
- 0: Default value turns off all types of branch protection
|
||||
- 1: Enables all types of branch protection features
|
||||
- 2: Return address signing to its standard level
|
||||
- 3: Extend the signing to include leaf functions
|
||||
|
||||
The table below summarizes ``BRANCH_PROTECTION`` values, GCC compilation options
|
||||
and resulting PAuth/BTI features.
|
||||
|
||||
+-------+--------------+-------+-----+
|
||||
| Value | GCC option | PAuth | BTI |
|
||||
+=======+==============+=======+=====+
|
||||
| 0 | none | N | N |
|
||||
+-------+--------------+-------+-----+
|
||||
| 1 | standard | Y | Y |
|
||||
+-------+--------------+-------+-----+
|
||||
| 2 | pac-ret | Y | N |
|
||||
+-------+--------------+-------+-----+
|
||||
| 3 | pac-ret+leaf | Y | N |
|
||||
+-------+--------------+-------+-----+
|
||||
|
||||
This option defaults to 0 and this is an experimental feature.
|
||||
Note that Pointer Authentication is enabled for Non-secure world
|
||||
irrespective of the value of this option if the CPU supports it.
|
||||
|
||||
- ``BUILD_MESSAGE_TIMESTAMP``: String used to identify the time and date of the
|
||||
compilation of each build. It must be set to a C string (including quotes
|
||||
where applicable). Defaults to a string that contains the time and date of
|
||||
the compilation.
|
||||
|
||||
- ``BUILD_STRING``: Input string for VERSION_STRING, which allows the TF-A
|
||||
build to be uniquely identified. Defaults to the current git commit id.
|
||||
|
||||
- ``CFLAGS``: Extra user options appended on the compiler's command line in
|
||||
addition to the options set by the build system.
|
||||
|
||||
- ``COLD_BOOT_SINGLE_CPU``: This option indicates whether the platform may
|
||||
release several CPUs out of reset. It can take either 0 (several CPUs may be
|
||||
brought up) or 1 (only one CPU will ever be brought up during cold reset).
|
||||
Default is 0. If the platform always brings up a single CPU, there is no
|
||||
need to distinguish between primary and secondary CPUs and the boot path can
|
||||
be optimised. The ``plat_is_my_cpu_primary()`` and
|
||||
``plat_secondary_cold_boot_setup()`` platform porting interfaces do not need
|
||||
to be implemented in this case.
|
||||
|
||||
- ``CRASH_REPORTING``: A non-zero value enables a console dump of processor
|
||||
register state when an unexpected exception occurs during execution of
|
||||
BL31. This option defaults to the value of ``DEBUG`` - i.e. by default
|
||||
this is only enabled for a debug build of the firmware.
|
||||
|
||||
- ``CREATE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
|
||||
certificate generation tool to create new keys in case no valid keys are
|
||||
present or specified. Allowed options are '0' or '1'. Default is '1'.
|
||||
|
||||
- ``CTX_INCLUDE_AARCH32_REGS`` : Boolean option that, when set to 1, will cause
|
||||
the AArch32 system registers to be included when saving and restoring the
|
||||
CPU context. The option must be set to 0 for AArch64-only platforms (that
|
||||
is on hardware that does not implement AArch32, or at least not at EL1 and
|
||||
higher ELs). Default value is 1.
|
||||
|
||||
- ``CTX_INCLUDE_FPREGS``: Boolean option that, when set to 1, will cause the FP
|
||||
registers to be included when saving and restoring the CPU context. Default
|
||||
is 0.
|
||||
|
||||
- ``CTX_INCLUDE_PAUTH_REGS``: Boolean option that, when set to 1, enables
|
||||
Pointer Authentication for Secure world. This will cause the ARMv8.3-PAuth
|
||||
registers to be included when saving and restoring the CPU context as
|
||||
part of world switch. Default value is 0 and this is an experimental feature.
|
||||
Note that Pointer Authentication is enabled for Non-secure world irrespective
|
||||
of the value of this flag if the CPU supports it.
|
||||
|
||||
- ``DEBUG``: Chooses between a debug and release build. It can take either 0
|
||||
(release) or 1 (debug) as values. 0 is the default.
|
||||
|
||||
- ``DISABLE_BIN_GENERATION``: Boolean option to disable the generation
|
||||
of the binary image. If set to 1, then only the ELF image is built.
|
||||
0 is the default.
|
||||
|
||||
- ``DYN_DISABLE_AUTH``: Provides the capability to dynamically disable Trusted
|
||||
Board Boot authentication at runtime. This option is meant to be enabled only
|
||||
for development platforms. ``TRUSTED_BOARD_BOOT`` flag must be set if this
|
||||
flag has to be enabled. 0 is the default.
|
||||
|
||||
- ``E``: Boolean option to make warnings into errors. Default is 1.
|
||||
|
||||
- ``EL3_PAYLOAD_BASE``: This option enables booting an EL3 payload instead of
|
||||
the normal boot flow. It must specify the entry point address of the EL3
|
||||
payload. Please refer to the "Booting an EL3 payload" section for more
|
||||
details.
|
||||
|
||||
- ``ENABLE_AMU``: Boolean option to enable Activity Monitor Unit extensions.
|
||||
This is an optional architectural feature available on v8.4 onwards. Some
|
||||
v8.2 implementations also implement an AMU and this option can be used to
|
||||
enable this feature on those systems as well. Default is 0.
|
||||
|
||||
- ``ENABLE_ASSERTIONS``: This option controls whether or not calls to ``assert()``
|
||||
are compiled out. For debug builds, this option defaults to 1, and calls to
|
||||
``assert()`` are left in place. For release builds, this option defaults to 0
|
||||
and calls to ``assert()`` function are compiled out. This option can be set
|
||||
independently of ``DEBUG``. It can also be used to hide any auxiliary code
|
||||
that is only required for the assertion and does not fit in the assertion
|
||||
itself.
|
||||
|
||||
- ``ENABLE_BACKTRACE``: This option controls whether to enables backtrace
|
||||
dumps or not. It is supported in both AArch64 and AArch32. However, in
|
||||
AArch32 the format of the frame records are not defined in the AAPCS and they
|
||||
are defined by the implementation. This implementation of backtrace only
|
||||
supports the format used by GCC when T32 interworking is disabled. For this
|
||||
reason enabling this option in AArch32 will force the compiler to only
|
||||
generate A32 code. This option is enabled by default only in AArch64 debug
|
||||
builds, but this behaviour can be overridden in each platform's Makefile or
|
||||
in the build command line.
|
||||
|
||||
- ``ENABLE_MPAM_FOR_LOWER_ELS``: Boolean option to enable lower ELs to use MPAM
|
||||
feature. MPAM is an optional Armv8.4 extension that enables various memory
|
||||
system components and resources to define partitions; software running at
|
||||
various ELs can assign themselves to desired partition to control their
|
||||
performance aspects.
|
||||
|
||||
When this option is set to ``1``, EL3 allows lower ELs to access their own
|
||||
MPAM registers without trapping into EL3. This option doesn't make use of
|
||||
partitioning in EL3, however. Platform initialisation code should configure
|
||||
and use partitions in EL3 as required. This option defaults to ``0``.
|
||||
|
||||
- ``ENABLE_PIE``: Boolean option to enable Position Independent Executable(PIE)
|
||||
support within generic code in TF-A. This option is currently only supported
|
||||
in BL31. Default is 0.
|
||||
|
||||
- ``ENABLE_PMF``: Boolean option to enable support for optional Performance
|
||||
Measurement Framework(PMF). Default is 0.
|
||||
|
||||
- ``ENABLE_PSCI_STAT``: Boolean option to enable support for optional PSCI
|
||||
functions ``PSCI_STAT_RESIDENCY`` and ``PSCI_STAT_COUNT``. Default is 0.
|
||||
In the absence of an alternate stat collection backend, ``ENABLE_PMF`` must
|
||||
be enabled. If ``ENABLE_PMF`` is set, the residency statistics are tracked in
|
||||
software.
|
||||
|
||||
- ``ENABLE_RUNTIME_INSTRUMENTATION``: Boolean option to enable runtime
|
||||
instrumentation which injects timestamp collection points into TF-A to
|
||||
allow runtime performance to be measured. Currently, only PSCI is
|
||||
instrumented. Enabling this option enables the ``ENABLE_PMF`` build option
|
||||
as well. Default is 0.
|
||||
|
||||
- ``ENABLE_SPE_FOR_LOWER_ELS`` : Boolean option to enable Statistical Profiling
|
||||
extensions. This is an optional architectural feature for AArch64.
|
||||
The default is 1 but is automatically disabled when the target architecture
|
||||
is AArch32.
|
||||
|
||||
- ``ENABLE_SPM`` : Boolean option to enable the Secure Partition Manager (SPM).
|
||||
Refer to :ref:`Secure Partition Manager` for more details about
|
||||
this feature. Default is 0.
|
||||
|
||||
- ``ENABLE_SVE_FOR_NS``: Boolean option to enable Scalable Vector Extension
|
||||
(SVE) for the Non-secure world only. SVE is an optional architectural feature
|
||||
for AArch64. Note that when SVE is enabled for the Non-secure world, access
|
||||
to SIMD and floating-point functionality from the Secure world is disabled.
|
||||
This is to avoid corruption of the Non-secure world data in the Z-registers
|
||||
which are aliased by the SIMD and FP registers. The build option is not
|
||||
compatible with the ``CTX_INCLUDE_FPREGS`` build option, and will raise an
|
||||
assert on platforms where SVE is implemented and ``ENABLE_SVE_FOR_NS`` set to
|
||||
1. The default is 1 but is automatically disabled when the target
|
||||
architecture is AArch32.
|
||||
|
||||
- ``ENABLE_STACK_PROTECTOR``: String option to enable the stack protection
|
||||
checks in GCC. Allowed values are "all", "strong", "default" and "none". The
|
||||
default value is set to "none". "strong" is the recommended stack protection
|
||||
level if this feature is desired. "none" disables the stack protection. For
|
||||
all values other than "none", the ``plat_get_stack_protector_canary()``
|
||||
platform hook needs to be implemented. The value is passed as the last
|
||||
component of the option ``-fstack-protector-$ENABLE_STACK_PROTECTOR``.
|
||||
|
||||
- ``ERROR_DEPRECATED``: This option decides whether to treat the usage of
|
||||
deprecated platform APIs, helper functions or drivers within Trusted
|
||||
Firmware as error. It can take the value 1 (flag the use of deprecated
|
||||
APIs as error) or 0. The default is 0.
|
||||
|
||||
- ``EL3_EXCEPTION_HANDLING``: When set to ``1``, enable handling of exceptions
|
||||
targeted at EL3. When set ``0`` (default), no exceptions are expected or
|
||||
handled at EL3, and a panic will result. This is supported only for AArch64
|
||||
builds.
|
||||
|
||||
- ``FAULT_INJECTION_SUPPORT``: ARMv8.4 extensions introduced support for fault
|
||||
injection from lower ELs, and this build option enables lower ELs to use
|
||||
Error Records accessed via System Registers to inject faults. This is
|
||||
applicable only to AArch64 builds.
|
||||
|
||||
This feature is intended for testing purposes only, and is advisable to keep
|
||||
disabled for production images.
|
||||
|
||||
- ``FIP_NAME``: This is an optional build option which specifies the FIP
|
||||
filename for the ``fip`` target. Default is ``fip.bin``.
|
||||
|
||||
- ``FWU_FIP_NAME``: This is an optional build option which specifies the FWU
|
||||
FIP filename for the ``fwu_fip`` target. Default is ``fwu_fip.bin``.
|
||||
|
||||
- ``GENERATE_COT``: Boolean flag used to build and execute the ``cert_create``
|
||||
tool to create certificates as per the Chain of Trust described in
|
||||
:ref:`Trusted Board Boot`. The build system then calls ``fiptool`` to
|
||||
include the certificates in the FIP and FWU_FIP. Default value is '0'.
|
||||
|
||||
Specify both ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=1`` to include support
|
||||
for the Trusted Board Boot feature in the BL1 and BL2 images, to generate
|
||||
the corresponding certificates, and to include those certificates in the
|
||||
FIP and FWU_FIP.
|
||||
|
||||
Note that if ``TRUSTED_BOARD_BOOT=0`` and ``GENERATE_COT=1``, the BL1 and BL2
|
||||
images will not include support for Trusted Board Boot. The FIP will still
|
||||
include the corresponding certificates. This FIP can be used to verify the
|
||||
Chain of Trust on the host machine through other mechanisms.
|
||||
|
||||
Note that if ``TRUSTED_BOARD_BOOT=1`` and ``GENERATE_COT=0``, the BL1 and BL2
|
||||
images will include support for Trusted Board Boot, but the FIP and FWU_FIP
|
||||
will not include the corresponding certificates, causing a boot failure.
|
||||
|
||||
- ``GICV2_G0_FOR_EL3``: Unlike GICv3, the GICv2 architecture doesn't have
|
||||
inherent support for specific EL3 type interrupts. Setting this build option
|
||||
to ``1`` assumes GICv2 *Group 0* interrupts are expected to target EL3, both
|
||||
by `platform abstraction layer`__ and `Interrupt Management Framework`__.
|
||||
This allows GICv2 platforms to enable features requiring EL3 interrupt type.
|
||||
This also means that all GICv2 Group 0 interrupts are delivered to EL3, and
|
||||
the Secure Payload interrupts needs to be synchronously handed over to Secure
|
||||
EL1 for handling. The default value of this option is ``0``, which means the
|
||||
Group 0 interrupts are assumed to be handled by Secure EL1.
|
||||
|
||||
.. __: `platform-interrupt-controller-API.rst`
|
||||
.. __: `interrupt-framework-design.rst`
|
||||
|
||||
- ``HANDLE_EA_EL3_FIRST``: When set to ``1``, External Aborts and SError
|
||||
Interrupts will be always trapped in EL3 i.e. in BL31 at runtime. When set to
|
||||
``0`` (default), these exceptions will be trapped in the current exception
|
||||
level (or in EL1 if the current exception level is EL0).
|
||||
|
||||
- ``HW_ASSISTED_COHERENCY``: On most Arm systems to-date, platform-specific
|
||||
software operations are required for CPUs to enter and exit coherency.
|
||||
However, newer systems exist where CPUs' entry to and exit from coherency
|
||||
is managed in hardware. Such systems require software to only initiate these
|
||||
operations, and the rest is managed in hardware, minimizing active software
|
||||
management. In such systems, this boolean option enables TF-A to carry out
|
||||
build and run-time optimizations during boot and power management operations.
|
||||
This option defaults to 0 and if it is enabled, then it implies
|
||||
``WARMBOOT_ENABLE_DCACHE_EARLY`` is also enabled.
|
||||
|
||||
If this flag is disabled while the platform which TF-A is compiled for
|
||||
includes cores that manage coherency in hardware, then a compilation error is
|
||||
generated. This is based on the fact that a system cannot have, at the same
|
||||
time, cores that manage coherency in hardware and cores that don't. In other
|
||||
words, a platform cannot have, at the same time, cores that require
|
||||
``HW_ASSISTED_COHERENCY=1`` and cores that require
|
||||
``HW_ASSISTED_COHERENCY=0``.
|
||||
|
||||
Note that, when ``HW_ASSISTED_COHERENCY`` is enabled, version 2 of
|
||||
translation library (xlat tables v2) must be used; version 1 of translation
|
||||
library is not supported.
|
||||
|
||||
- ``JUNO_AARCH32_EL3_RUNTIME``: This build flag enables you to execute EL3
|
||||
runtime software in AArch32 mode, which is required to run AArch32 on Juno.
|
||||
By default this flag is set to '0'. Enabling this flag builds BL1 and BL2 in
|
||||
AArch64 and facilitates the loading of ``SP_MIN`` and BL33 as AArch32 executable
|
||||
images.
|
||||
|
||||
- ``KEY_ALG``: This build flag enables the user to select the algorithm to be
|
||||
used for generating the PKCS keys and subsequent signing of the certificate.
|
||||
It accepts 3 values: ``rsa``, ``rsa_1_5`` and ``ecdsa``. The option
|
||||
``rsa_1_5`` is the legacy PKCS#1 RSA 1.5 algorithm which is not TBBR
|
||||
compliant and is retained only for compatibility. The default value of this
|
||||
flag is ``rsa`` which is the TBBR compliant PKCS#1 RSA 2.1 scheme.
|
||||
|
||||
- ``HASH_ALG``: This build flag enables the user to select the secure hash
|
||||
algorithm. It accepts 3 values: ``sha256``, ``sha384`` and ``sha512``.
|
||||
The default value of this flag is ``sha256``.
|
||||
|
||||
- ``LDFLAGS``: Extra user options appended to the linkers' command line in
|
||||
addition to the one set by the build system.
|
||||
|
||||
- ``LOG_LEVEL``: Chooses the log level, which controls the amount of console log
|
||||
output compiled into the build. This should be one of the following:
|
||||
|
||||
::
|
||||
|
||||
0 (LOG_LEVEL_NONE)
|
||||
10 (LOG_LEVEL_ERROR)
|
||||
20 (LOG_LEVEL_NOTICE)
|
||||
30 (LOG_LEVEL_WARNING)
|
||||
40 (LOG_LEVEL_INFO)
|
||||
50 (LOG_LEVEL_VERBOSE)
|
||||
|
||||
All log output up to and including the selected log level is compiled into
|
||||
the build. The default value is 40 in debug builds and 20 in release builds.
|
||||
|
||||
- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
||||
specifies the file that contains the Non-Trusted World private key in PEM
|
||||
format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
|
||||
|
||||
- ``NS_BL2U``: Path to NS_BL2U image in the host file system. This image is
|
||||
optional. It is only needed if the platform makefile specifies that it
|
||||
is required in order to build the ``fwu_fip`` target.
|
||||
|
||||
- ``NS_TIMER_SWITCH``: Enable save and restore for non-secure timer register
|
||||
contents upon world switch. It can take either 0 (don't save and restore) or
|
||||
1 (do save and restore). 0 is the default. An SPD may set this to 1 if it
|
||||
wants the timer registers to be saved and restored.
|
||||
|
||||
- ``OVERRIDE_LIBC``: This option allows platforms to override the default libc
|
||||
for the BL image. It can be either 0 (include) or 1 (remove). The default
|
||||
value is 0.
|
||||
|
||||
- ``PL011_GENERIC_UART``: Boolean option to indicate the PL011 driver that
|
||||
the underlying hardware is not a full PL011 UART but a minimally compliant
|
||||
generic UART, which is a subset of the PL011. The driver will not access
|
||||
any register that is not part of the SBSA generic UART specification.
|
||||
Default value is 0 (a full PL011 compliant UART is present).
|
||||
|
||||
- ``PLAT``: Choose a platform to build TF-A for. The chosen platform name
|
||||
must be subdirectory of any depth under ``plat/``, and must contain a
|
||||
platform makefile named ``platform.mk``. For example, to build TF-A for the
|
||||
Arm Juno board, select PLAT=juno.
|
||||
|
||||
- ``PRELOADED_BL33_BASE``: This option enables booting a preloaded BL33 image
|
||||
instead of the normal boot flow. When defined, it must specify the entry
|
||||
point address for the preloaded BL33 image. This option is incompatible with
|
||||
``EL3_PAYLOAD_BASE``. If both are defined, ``EL3_PAYLOAD_BASE`` has priority
|
||||
over ``PRELOADED_BL33_BASE``.
|
||||
|
||||
- ``PROGRAMMABLE_RESET_ADDRESS``: This option indicates whether the reset
|
||||
vector address can be programmed or is fixed on the platform. It can take
|
||||
either 0 (fixed) or 1 (programmable). Default is 0. If the platform has a
|
||||
programmable reset address, it is expected that a CPU will start executing
|
||||
code directly at the right address, both on a cold and warm reset. In this
|
||||
case, there is no need to identify the entrypoint on boot and the boot path
|
||||
can be optimised. The ``plat_get_my_entrypoint()`` platform porting interface
|
||||
does not need to be implemented in this case.
|
||||
|
||||
- ``PSCI_EXTENDED_STATE_ID``: As per PSCI1.0 Specification, there are 2 formats
|
||||
possible for the PSCI power-state parameter: original and extended State-ID
|
||||
formats. This flag if set to 1, configures the generic PSCI layer to use the
|
||||
extended format. The default value of this flag is 0, which means by default
|
||||
the original power-state format is used by the PSCI implementation. This flag
|
||||
should be specified by the platform makefile and it governs the return value
|
||||
of PSCI_FEATURES API for CPU_SUSPEND smc function id. When this option is
|
||||
enabled on Arm platforms, the option ``ARM_RECOM_STATE_ID_ENC`` needs to be
|
||||
set to 1 as well.
|
||||
|
||||
- ``RAS_EXTENSION``: When set to ``1``, enable Armv8.2 RAS features. RAS features
|
||||
are an optional extension for pre-Armv8.2 CPUs, but are mandatory for Armv8.2
|
||||
or later CPUs.
|
||||
|
||||
When ``RAS_EXTENSION`` is set to ``1``, ``HANDLE_EA_EL3_FIRST`` must also be
|
||||
set to ``1``.
|
||||
|
||||
This option is disabled by default.
|
||||
|
||||
- ``RESET_TO_BL31``: Enable BL31 entrypoint as the CPU reset vector instead
|
||||
of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
|
||||
entrypoint) or 1 (CPU reset to BL31 entrypoint).
|
||||
The default value is 0.
|
||||
|
||||
- ``RESET_TO_SP_MIN``: SP_MIN is the minimal AArch32 Secure Payload provided
|
||||
in TF-A. This flag configures SP_MIN entrypoint as the CPU reset vector
|
||||
instead of the BL1 entrypoint. It can take the value 0 (CPU reset to BL1
|
||||
entrypoint) or 1 (CPU reset to SP_MIN entrypoint). The default value is 0.
|
||||
|
||||
- ``ROT_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
||||
file that contains the ROT private key in PEM format. If ``SAVE_KEYS=1``, this
|
||||
file name will be used to save the key.
|
||||
|
||||
- ``SAVE_KEYS``: This option is used when ``GENERATE_COT=1``. It tells the
|
||||
certificate generation tool to save the keys used to establish the Chain of
|
||||
Trust. Allowed options are '0' or '1'. Default is '0' (do not save).
|
||||
|
||||
- ``SCP_BL2``: Path to SCP_BL2 image in the host file system. This image is optional.
|
||||
If a SCP_BL2 image is present then this option must be passed for the ``fip``
|
||||
target.
|
||||
|
||||
- ``SCP_BL2_KEY``: This option is used when ``GENERATE_COT=1``. It specifies the
|
||||
file that contains the SCP_BL2 private key in PEM format. If ``SAVE_KEYS=1``,
|
||||
this file name will be used to save the key.
|
||||
|
||||
- ``SCP_BL2U``: Path to SCP_BL2U image in the host file system. This image is
|
||||
optional. It is only needed if the platform makefile specifies that it
|
||||
is required in order to build the ``fwu_fip`` target.
|
||||
|
||||
- ``SDEI_SUPPORT``: Setting this to ``1`` enables support for Software
|
||||
Delegated Exception Interface to BL31 image. This defaults to ``0``.
|
||||
|
||||
When set to ``1``, the build option ``EL3_EXCEPTION_HANDLING`` must also be
|
||||
set to ``1``.
|
||||
|
||||
- ``SEPARATE_CODE_AND_RODATA``: Whether code and read-only data should be
|
||||
isolated on separate memory pages. This is a trade-off between security and
|
||||
memory usage. See "Isolating code and read-only data on separate memory
|
||||
pages" section in :ref:`Firmware Design`. This flag is disabled by default and
|
||||
affects all BL images.
|
||||
|
||||
- ``SPD``: Choose a Secure Payload Dispatcher component to be built into TF-A.
|
||||
This build option is only valid if ``ARCH=aarch64``. The value should be
|
||||
the path to the directory containing the SPD source, relative to
|
||||
``services/spd/``; the directory is expected to contain a makefile called
|
||||
``<spd-value>.mk``.
|
||||
|
||||
- ``SPIN_ON_BL1_EXIT``: This option introduces an infinite loop in BL1. It can
|
||||
take either 0 (no loop) or 1 (add a loop). 0 is the default. This loop stops
|
||||
execution in BL1 just before handing over to BL31. At this point, all
|
||||
firmware images have been loaded in memory, and the MMU and caches are
|
||||
turned off. Refer to the "Debugging options" section for more details.
|
||||
|
||||
- ``SP_MIN_WITH_SECURE_FIQ``: Boolean flag to indicate the SP_MIN handles
|
||||
secure interrupts (caught through the FIQ line). Platforms can enable
|
||||
this directive if they need to handle such interruption. When enabled,
|
||||
the FIQ are handled in monitor mode and non secure world is not allowed
|
||||
to mask these events. Platforms that enable FIQ handling in SP_MIN shall
|
||||
implement the api ``sp_min_plat_fiq_handler()``. The default value is 0.
|
||||
|
||||
- ``TRUSTED_BOARD_BOOT``: Boolean flag to include support for the Trusted Board
|
||||
Boot feature. When set to '1', BL1 and BL2 images include support to load
|
||||
and verify the certificates and images in a FIP, and BL1 includes support
|
||||
for the Firmware Update. The default value is '0'. Generation and inclusion
|
||||
of certificates in the FIP and FWU_FIP depends upon the value of the
|
||||
``GENERATE_COT`` option.
|
||||
|
||||
.. warning::
|
||||
This option depends on ``CREATE_KEYS`` to be enabled. If the keys
|
||||
already exist in disk, they will be overwritten without further notice.
|
||||
|
||||
- ``TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
||||
specifies the file that contains the Trusted World private key in PEM
|
||||
format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
|
||||
|
||||
- ``TSP_INIT_ASYNC``: Choose BL32 initialization method as asynchronous or
|
||||
synchronous, (see "Initializing a BL32 Image" section in
|
||||
:ref:`Firmware Design`). It can take the value 0 (BL32 is initialized using
|
||||
synchronous method) or 1 (BL32 is initialized using asynchronous method).
|
||||
Default is 0.
|
||||
|
||||
- ``TSP_NS_INTR_ASYNC_PREEMPT``: A non zero value enables the interrupt
|
||||
routing model which routes non-secure interrupts asynchronously from TSP
|
||||
to EL3 causing immediate preemption of TSP. The EL3 is responsible
|
||||
for saving and restoring the TSP context in this routing model. The
|
||||
default routing model (when the value is 0) is to route non-secure
|
||||
interrupts to TSP allowing it to save its context and hand over
|
||||
synchronously to EL3 via an SMC.
|
||||
|
||||
.. note::
|
||||
When ``EL3_EXCEPTION_HANDLING`` is ``1``, ``TSP_NS_INTR_ASYNC_PREEMPT``
|
||||
must also be set to ``1``.
|
||||
|
||||
- ``USE_ARM_LINK``: This flag determines whether to enable support for ARM
|
||||
linker. When the ``LINKER`` build variable points to the armlink linker,
|
||||
this flag is enabled automatically. To enable support for armlink, platforms
|
||||
will have to provide a scatter file for the BL image. Currently, Tegra
|
||||
platforms use the armlink support to compile BL3-1 images.
|
||||
|
||||
- ``USE_COHERENT_MEM``: This flag determines whether to include the coherent
|
||||
memory region in the BL memory map or not (see "Use of Coherent memory in
|
||||
TF-A" section in :ref:`Firmware Design`). It can take the value 1
|
||||
(Coherent memory region is included) or 0 (Coherent memory region is
|
||||
excluded). Default is 1.
|
||||
|
||||
- ``USE_ROMLIB``: This flag determines whether library at ROM will be used.
|
||||
This feature creates a library of functions to be placed in ROM and thus
|
||||
reduces SRAM usage. Refer to :ref:`Library at ROM` for further details. Default
|
||||
is 0.
|
||||
|
||||
- ``V``: Verbose build. If assigned anything other than 0, the build commands
|
||||
are printed. Default is 0.
|
||||
|
||||
- ``VERSION_STRING``: String used in the log output for each TF-A image.
|
||||
Defaults to a string formed by concatenating the version number, build type
|
||||
and build string.
|
||||
|
||||
- ``W``: Warning level. Some compiler warning options of interest have been
|
||||
regrouped and put in the root Makefile. This flag can take the values 0 to 3,
|
||||
each level enabling more warning options. Default is 0.
|
||||
|
||||
- ``WARMBOOT_ENABLE_DCACHE_EARLY`` : Boolean option to enable D-cache early on
|
||||
the CPU after warm boot. This is applicable for platforms which do not
|
||||
require interconnect programming to enable cache coherency (eg: single
|
||||
cluster platforms). If this option is enabled, then warm boot path
|
||||
enables D-caches immediately after enabling MMU. This option defaults to 0.
|
||||
|
||||
Debugging options
|
||||
-----------------
|
||||
|
||||
To compile a debug version and make the build more verbose use
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=<platform> DEBUG=1 V=1 all
|
||||
|
||||
AArch64 GCC uses DWARF version 4 debugging symbols by default. Some tools (for
|
||||
example DS-5) might not support this and may need an older version of DWARF
|
||||
symbols to be emitted by GCC. This can be achieved by using the
|
||||
``-gdwarf-<version>`` flag, with the version being set to 2 or 3. Setting the
|
||||
version to 2 is recommended for DS-5 versions older than 5.16.
|
||||
|
||||
When debugging logic problems it might also be useful to disable all compiler
|
||||
optimizations by using ``-O0``.
|
||||
|
||||
.. warning::
|
||||
Using ``-O0`` could cause output images to be larger and base addresses
|
||||
might need to be recalculated (see the **Memory layout on Arm development
|
||||
platforms** section in the :ref:`Firmware Design`).
|
||||
|
||||
Extra debug options can be passed to the build system by setting ``CFLAGS`` or
|
||||
``LDFLAGS``:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
CFLAGS='-O0 -gdwarf-2' \
|
||||
make PLAT=<platform> DEBUG=1 V=1 all
|
||||
|
||||
Note that using ``-Wl,`` style compilation driver options in ``CFLAGS`` will be
|
||||
ignored as the linker is called directly.
|
||||
|
||||
It is also possible to introduce an infinite loop to help in debugging the
|
||||
post-BL2 phase of TF-A. This can be done by rebuilding BL1 with the
|
||||
``SPIN_ON_BL1_EXIT=1`` build flag. Refer to the :ref:`build_options_common`
|
||||
section. In this case, the developer may take control of the target using a
|
||||
debugger when indicated by the console output. When using DS-5, the following
|
||||
commands can be used:
|
||||
|
||||
::
|
||||
|
||||
# Stop target execution
|
||||
interrupt
|
||||
|
||||
#
|
||||
# Prepare your debugging environment, e.g. set breakpoints
|
||||
#
|
||||
|
||||
# Jump over the debug loop
|
||||
set var $AARCH64::$Core::$PC = $AARCH64::$Core::$PC + 4
|
||||
|
||||
# Resume execution
|
||||
continue
|
||||
|
||||
--------------
|
||||
|
||||
*Copyright (c) 2019, Arm Limited. All rights reserved.*
|
|
@ -22,6 +22,9 @@ For building a local copy of the |TF-A| documentation you will need, at minimum:
|
|||
- Python 3 (3.5 or later)
|
||||
- PlantUML (1.2017.15 or later)
|
||||
|
||||
Optionally, the `Dia`_ application can be installed if you need to edit
|
||||
existing ``.dia`` diagram files, or create new ones.
|
||||
|
||||
You must also install the Python modules that are specified in the
|
||||
``requirements.txt`` file in the root of the ``docs`` directory. These modules
|
||||
can be installed using ``pip3`` (the Python Package Installer). Passing this
|
||||
|
@ -33,7 +36,7 @@ that the working directory is ``docs``:
|
|||
|
||||
.. code:: shell
|
||||
|
||||
sudo apt install python3 python3-pip plantuml
|
||||
sudo apt install python3 python3-pip plantuml [dia]
|
||||
pip3 install [--user] -r requirements.txt
|
||||
|
||||
.. note::
|
||||
|
@ -75,3 +78,4 @@ Output from the build process will be placed in:
|
|||
|
||||
.. _Sphinx: http://www.sphinx-doc.org/en/master/
|
||||
.. _pip homepage: https://pip.pypa.io/en/stable/
|
||||
.. _Dia: https://wiki.gnome.org/Apps/Dia
|
||||
|
|
|
@ -6,9 +6,16 @@ Getting Started
|
|||
:caption: Contents
|
||||
:numbered:
|
||||
|
||||
user-guide
|
||||
prerequisites
|
||||
docs-build
|
||||
tools-build
|
||||
initial-build
|
||||
build-options
|
||||
image-terminology
|
||||
porting-guide
|
||||
psci-lib-integration-guide
|
||||
rt-svc-writers-guide
|
||||
|
||||
--------------
|
||||
|
||||
*Copyright (c) 2019, Arm Limited. All rights reserved.*
|
||||
|
|
117
docs/getting_started/initial-build.rst
Normal file
117
docs/getting_started/initial-build.rst
Normal file
|
@ -0,0 +1,117 @@
|
|||
Performing an Initial Build
|
||||
===========================
|
||||
|
||||
- Before building TF-A, the environment variable ``CROSS_COMPILE`` must point
|
||||
to the Linaro cross compiler.
|
||||
|
||||
For AArch64:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
|
||||
|
||||
For AArch32:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
export CROSS_COMPILE=<path-to-aarch32-gcc>/bin/arm-eabi-
|
||||
|
||||
It is possible to build TF-A using Clang or Arm Compiler 6. To do so
|
||||
``CC`` needs to point to the clang or armclang binary, which will
|
||||
also select the clang or armclang assembler. Be aware that the
|
||||
GNU linker is used by default. In case of being needed the linker
|
||||
can be overridden using the ``LD`` variable. Clang linker version 6 is
|
||||
known to work with TF-A.
|
||||
|
||||
In both cases ``CROSS_COMPILE`` should be set as described above.
|
||||
|
||||
Arm Compiler 6 will be selected when the base name of the path assigned
|
||||
to ``CC`` matches the string 'armclang'.
|
||||
|
||||
For AArch64 using Arm Compiler 6:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
|
||||
make CC=<path-to-armclang>/bin/armclang PLAT=<platform> all
|
||||
|
||||
Clang will be selected when the base name of the path assigned to ``CC``
|
||||
contains the string 'clang'. This is to allow both clang and clang-X.Y
|
||||
to work.
|
||||
|
||||
For AArch64 using clang:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
export CROSS_COMPILE=<path-to-aarch64-gcc>/bin/aarch64-linux-gnu-
|
||||
make CC=<path-to-clang>/bin/clang PLAT=<platform> all
|
||||
|
||||
- Change to the root directory of the TF-A source tree and build.
|
||||
|
||||
For AArch64:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=<platform> all
|
||||
|
||||
For AArch32:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=<platform> ARCH=aarch32 AARCH32_SP=sp_min all
|
||||
|
||||
Notes:
|
||||
|
||||
- If ``PLAT`` is not specified, ``fvp`` is assumed by default. See the
|
||||
:ref:`Build Options` document for more information on available build
|
||||
options.
|
||||
|
||||
- (AArch32 only) Currently only ``PLAT=fvp`` is supported.
|
||||
|
||||
- (AArch32 only) ``AARCH32_SP`` is the AArch32 EL3 Runtime Software and it
|
||||
corresponds to the BL32 image. A minimal ``AARCH32_SP``, sp_min, is
|
||||
provided by TF-A to demonstrate how PSCI Library can be integrated with
|
||||
an AArch32 EL3 Runtime Software. Some AArch32 EL3 Runtime Software may
|
||||
include other runtime services, for example Trusted OS services. A guide
|
||||
to integrate PSCI library with AArch32 EL3 Runtime Software can be found
|
||||
at :ref:`PSCI Library Integration guide for Armv8-A AArch32 systems`.
|
||||
|
||||
- (AArch64 only) The TSP (Test Secure Payload), corresponding to the BL32
|
||||
image, is not compiled in by default. Refer to the
|
||||
:ref:`Test Secure Payload (TSP) and Dispatcher (TSPD)` document for
|
||||
details on building the TSP.
|
||||
|
||||
- By default this produces a release version of the build. To produce a
|
||||
debug version instead, refer to the "Debugging options" section below.
|
||||
|
||||
- The build process creates products in a ``build`` directory tree, building
|
||||
the objects and binaries for each boot loader stage in separate
|
||||
sub-directories. The following boot loader binary files are created
|
||||
from the corresponding ELF files:
|
||||
|
||||
- ``build/<platform>/<build-type>/bl1.bin``
|
||||
- ``build/<platform>/<build-type>/bl2.bin``
|
||||
- ``build/<platform>/<build-type>/bl31.bin`` (AArch64 only)
|
||||
- ``build/<platform>/<build-type>/bl32.bin`` (mandatory for AArch32)
|
||||
|
||||
where ``<platform>`` is the name of the chosen platform and ``<build-type>``
|
||||
is either ``debug`` or ``release``. The actual number of images might differ
|
||||
depending on the platform.
|
||||
|
||||
- Build products for a specific build variant can be removed using:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make DEBUG=<D> PLAT=<platform> clean
|
||||
|
||||
... where ``<D>`` is ``0`` or ``1``, as specified when building.
|
||||
|
||||
The build tree can be removed completely using:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make realclean
|
||||
|
||||
--------------
|
||||
|
||||
*Copyright (c) 2019, Arm Limited. All rights reserved.*
|
|
@ -23,8 +23,6 @@ Some modifications are common to all Boot Loader (BL) stages. Section 2
|
|||
discusses these in detail. The subsequent sections discuss the remaining
|
||||
modifications for each BL stage in detail.
|
||||
|
||||
This document should be read in conjunction with the TF-A :ref:`User Guide`.
|
||||
|
||||
Please refer to the :ref:`Platform Compatibility Policy` for the policy
|
||||
regarding compatibility and deprecation of these porting interfaces.
|
||||
|
||||
|
@ -2387,8 +2385,8 @@ present in the platform. Arm standard platform layer supports both
|
|||
`Arm Generic Interrupt Controller version 2.0 (GICv2)`_
|
||||
and `3.0 (GICv3)`_. Juno builds the Arm platform layer to use GICv2 and the
|
||||
FVP can be configured to use either GICv2 or GICv3 depending on the build flag
|
||||
``FVP_USE_GIC_DRIVER`` (See FVP platform specific build options in
|
||||
:ref:`User Guide` for more details).
|
||||
``FVP_USE_GIC_DRIVER`` (See :ref:`build_options_arm_fvp_platform` for more
|
||||
details).
|
||||
|
||||
See also: `Interrupt Controller Abstraction APIs`__.
|
||||
|
||||
|
@ -2796,10 +2794,10 @@ storage access is only required by BL1 and BL2 phases and performed inside the
|
|||
|
||||
It is mandatory to implement at least one storage driver. For the Arm
|
||||
development platforms the Firmware Image Package (FIP) driver is provided as
|
||||
the default means to load data from storage (see the "Firmware Image Package"
|
||||
section in the :ref:`User Guide`). The storage layer is described in the header file
|
||||
``include/drivers/io/io_storage.h``. The implementation of the common library
|
||||
is in ``drivers/io/io_storage.c`` and the driver files are located in
|
||||
the default means to load data from storage (see :ref:`firmware_design_fip`).
|
||||
The storage layer is described in the header file
|
||||
``include/drivers/io/io_storage.h``. The implementation of the common library is
|
||||
in ``drivers/io/io_storage.c`` and the driver files are located in
|
||||
``drivers/io/``.
|
||||
|
||||
.. uml:: ../resources/diagrams/plantuml/io_arm_class_diagram.puml
|
||||
|
|
136
docs/getting_started/prerequisites.rst
Normal file
136
docs/getting_started/prerequisites.rst
Normal file
|
@ -0,0 +1,136 @@
|
|||
Prerequisites
|
||||
=============
|
||||
|
||||
This document describes the software requirements for building |TF-A| for
|
||||
AArch32 and AArch64 target platforms.
|
||||
|
||||
It may possible to build |TF-A| with combinations of software packages that are
|
||||
different from those listed below, however only the software described in this
|
||||
document can be officially supported.
|
||||
|
||||
Build Host
|
||||
----------
|
||||
|
||||
|TF-A| can be built using either a Linux or a Windows machine as the build host.
|
||||
|
||||
A relatively recent Linux distribution is recommended for building |TF-A|. We
|
||||
have performed tests using Ubuntu 16.04 LTS (64-bit) but other distributions
|
||||
should also work fine as a base, provided that the necessary tools and libraries
|
||||
can be installed.
|
||||
|
||||
.. _prerequisites_toolchain:
|
||||
|
||||
Toolchain
|
||||
---------
|
||||
|
||||
|TF-A| can be built with any of the following *cross-compiler* toolchains that
|
||||
target the Armv7-A or Armv8-A architectures:
|
||||
|
||||
- GCC >= 8.3-2019.03 (from the `Arm Developer website`_)
|
||||
- Clang >= 4.0
|
||||
- Arm Compiler >= 6.0
|
||||
|
||||
In addition, a native compiler is required to build the supporting tools.
|
||||
|
||||
.. note::
|
||||
The software has also been built on Windows 7 Enterprise SP1, using CMD.EXE,
|
||||
Cygwin, and Msys (MinGW) shells, using version 5.3.1 of the GNU toolchain.
|
||||
|
||||
.. note::
|
||||
For instructions on how to select the cross compiler refer to
|
||||
:ref:`Performing an Initial Build`.
|
||||
|
||||
.. _prerequisites_software_and_libraries:
|
||||
|
||||
Software and Libraries
|
||||
----------------------
|
||||
|
||||
The following tools are required to obtain and build |TF-A|:
|
||||
|
||||
- An appropriate toolchain (see :ref:`prerequisites_toolchain`)
|
||||
- GNU Make
|
||||
- Git
|
||||
|
||||
The following libraries must be available to build one or more components or
|
||||
supporting tools:
|
||||
|
||||
- OpenSSL >= 1.0.1
|
||||
|
||||
Required to build the cert_create tool.
|
||||
|
||||
The following libraries are required for Trusted Board Boot support:
|
||||
|
||||
- mbed TLS == 2.16.2 (tag: ``mbedtls-2.16.2``)
|
||||
|
||||
These tools are optional:
|
||||
|
||||
- Device Tree Compiler (DTC) >= 1.4.6
|
||||
|
||||
Needed if you want to rebuild the provided Flattened Device Tree (FDT)
|
||||
source files (``.dts`` files). DTC is available for Linux through the package
|
||||
repositories of most distributions.
|
||||
|
||||
- Arm `Development Studio 5 (DS-5)`_
|
||||
|
||||
The standard software package used for debugging software on Arm development
|
||||
platforms and |FVP| models.
|
||||
|
||||
Package Installation (Linux)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
If you are using the recommended Ubuntu distribution then you can install the
|
||||
required packages with the following command:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
sudo apt install build-essential git libssl-dev
|
||||
|
||||
The optional packages can be installed using:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
sudo apt install device-tree-compiler
|
||||
|
||||
Supporting Files
|
||||
----------------
|
||||
|
||||
TF-A has been tested with pre-built binaries and file systems from `Linaro
|
||||
Release 19.06`_. Alternatively, you can build the binaries from source using
|
||||
instructions in :ref:`Performing an Initial Build`.
|
||||
|
||||
.. _prerequisites_get_source:
|
||||
|
||||
Getting the TF-A Source
|
||||
-----------------------
|
||||
|
||||
Source code for |TF-A| is maintained in a Git repository hosted on
|
||||
TrustedFirmware.org. To clone this repository from the server, run the following
|
||||
in your shell:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
git clone "https://review.trustedfirmware.org/TF-A/trusted-firmware-a" && (cd "trusted-firmware-a" && mkdir -p .git/hooks && curl -Lo `git rev-parse --git-dir`/hooks/commit-msg https://review.trustedfirmware.org/tools/hooks/commit-msg; chmod +x `git rev-parse --git-dir`/hooks/commit-msg)
|
||||
|
||||
This will clone the Git repository also install a *commit hook* that
|
||||
automatically inserts appropriate *Change-Id:* lines at the end of your
|
||||
commit messages. These change IDs are required when committing changes that you
|
||||
intend to push for review via our Gerrit system.
|
||||
|
||||
You can read more about Git hooks in the *githooks* page of the Git documentation,
|
||||
available at: https://git-scm.com/docs/githooks
|
||||
|
||||
Alternatively, you can clone without the commit hook using:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
git clone "https://review.trustedfirmware.org/TF-A/trusted-firmware-a"
|
||||
|
||||
--------------
|
||||
|
||||
*Copyright (c) 2019, Arm Limited. All rights reserved.*
|
||||
|
||||
.. _Arm Developer website: https://developer.arm.com/open-source/gnu-toolchain/gnu-a/downloads
|
||||
.. _Linaro Release Notes: https://community.arm.com/dev-platforms/w/docs/226/old-release-notes
|
||||
.. _Linaro instructions: https://community.arm.com/dev-platforms/w/docs/304/arm-reference-platforms-deliverables
|
||||
.. _Development Studio 5 (DS-5): https://developer.arm.com/products/software-development-tools/ds-5-development-studio
|
||||
.. _Linaro Release 19.06: http://releases.linaro.org/members/arm/platforms/19.06
|
140
docs/getting_started/tools-build.rst
Normal file
140
docs/getting_started/tools-build.rst
Normal file
|
@ -0,0 +1,140 @@
|
|||
Building Supporting Tools
|
||||
=========================
|
||||
|
||||
Building and using the FIP tool
|
||||
-------------------------------
|
||||
|
||||
Firmware Image Package (FIP) is a packaging format used by TF-A to package
|
||||
firmware images in a single binary. The number and type of images that should
|
||||
be packed in a FIP is platform specific and may include TF-A images and other
|
||||
firmware images required by the platform. For example, most platforms require
|
||||
a BL33 image which corresponds to the normal world bootloader (e.g. UEFI or
|
||||
U-Boot).
|
||||
|
||||
The TF-A build system provides the make target ``fip`` to create a FIP file
|
||||
for the specified platform using the FIP creation tool included in the TF-A
|
||||
project. Examples below show how to build a FIP file for FVP, packaging TF-A
|
||||
and BL33 images.
|
||||
|
||||
For AArch64:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=fvp BL33=<path-to>/bl33.bin fip
|
||||
|
||||
For AArch32:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=fvp ARCH=aarch32 AARCH32_SP=sp_min BL33=<path-to>/bl33.bin fip
|
||||
|
||||
The resulting FIP may be found in:
|
||||
|
||||
::
|
||||
|
||||
build/fvp/<build-type>/fip.bin
|
||||
|
||||
For advanced operations on FIP files, it is also possible to independently build
|
||||
the tool and create or modify FIPs using this tool. To do this, follow these
|
||||
steps:
|
||||
|
||||
It is recommended to remove old artifacts before building the tool:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make -C tools/fiptool clean
|
||||
|
||||
Build the tool:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make [DEBUG=1] [V=1] fiptool
|
||||
|
||||
The tool binary can be located in:
|
||||
|
||||
::
|
||||
|
||||
./tools/fiptool/fiptool
|
||||
|
||||
Invoking the tool with ``help`` will print a help message with all available
|
||||
options.
|
||||
|
||||
Example 1: create a new Firmware package ``fip.bin`` that contains BL2 and BL31:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
./tools/fiptool/fiptool create \
|
||||
--tb-fw build/<platform>/<build-type>/bl2.bin \
|
||||
--soc-fw build/<platform>/<build-type>/bl31.bin \
|
||||
fip.bin
|
||||
|
||||
Example 2: view the contents of an existing Firmware package:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
./tools/fiptool/fiptool info <path-to>/fip.bin
|
||||
|
||||
Example 3: update the entries of an existing Firmware package:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
# Change the BL2 from Debug to Release version
|
||||
./tools/fiptool/fiptool update \
|
||||
--tb-fw build/<platform>/release/bl2.bin \
|
||||
build/<platform>/debug/fip.bin
|
||||
|
||||
Example 4: unpack all entries from an existing Firmware package:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
# Images will be unpacked to the working directory
|
||||
./tools/fiptool/fiptool unpack <path-to>/fip.bin
|
||||
|
||||
Example 5: remove an entry from an existing Firmware package:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
./tools/fiptool/fiptool remove \
|
||||
--tb-fw build/<platform>/debug/fip.bin
|
||||
|
||||
Note that if the destination FIP file exists, the create, update and
|
||||
remove operations will automatically overwrite it.
|
||||
|
||||
The unpack operation will fail if the images already exist at the
|
||||
destination. In that case, use -f or --force to continue.
|
||||
|
||||
More information about FIP can be found in the :ref:`Firmware Design` document.
|
||||
|
||||
.. _tools_build_cert_create:
|
||||
|
||||
Building the Certificate Generation Tool
|
||||
----------------------------------------
|
||||
|
||||
The ``cert_create`` tool is built as part of the TF-A build process when the
|
||||
``fip`` make target is specified and TBB is enabled (as described in the
|
||||
previous section), but it can also be built separately with the following
|
||||
command:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=<platform> [DEBUG=1] [V=1] certtool
|
||||
|
||||
For platforms that require their own IDs in certificate files, the generic
|
||||
'cert_create' tool can be built with the following command. Note that the target
|
||||
platform must define its IDs within a ``platform_oid.h`` header file for the
|
||||
build to succeed.
|
||||
|
||||
.. code:: shell
|
||||
|
||||
make PLAT=<platform> USE_TBBR_DEFS=0 [DEBUG=1] [V=1] certtool
|
||||
|
||||
``DEBUG=1`` builds the tool in debug mode. ``V=1`` makes the build process more
|
||||
verbose. The following command should be used to obtain help about the tool:
|
||||
|
||||
.. code:: shell
|
||||
|
||||
./tools/cert_create/cert_create -h
|
||||
|
||||
--------------
|
||||
|
||||
*Copyright (c) 2019, Arm Limited. All rights reserved.*
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue