mirror of https://github.com/acidanthera/audk.git
89 lines
3.5 KiB
HTML
89 lines
3.5 KiB
HTML
<h1>AArch64 UEFI bootstraps</h1>
|
|
|
|
<p>Copyright (c) 2011-2013 ARM Limited. All rights reserved.
|
|
See the <code>LICENSE.TXT</code> file for more information.</p>
|
|
|
|
<p>Contents:</p>
|
|
|
|
<ul>
|
|
<li>Introduction</li>
|
|
<li>Build</li>
|
|
<li>Use on ARMv8 RTSM and FVP models</li>
|
|
<li>Use on ARMv8 Foundation model</li>
|
|
</ul>
|
|
|
|
<h2>Introduction</h2>
|
|
|
|
<p>A bootstrap can be used to change the model state, like the Exception
|
|
Level (EL), before executing the UEFI binary.</p>
|
|
|
|
<p>For the ARMv8 RTSM and FVP models this can be used to show/test the UEFI binary
|
|
starting at different exception levels. The ARMv8 models start at EL3 by
|
|
default.</p>
|
|
|
|
<p>In the case of the Foundation model a bootstrap is required to jump to the
|
|
UEFI binary as loaded in RAM. This is required as the Foundation model cannot
|
|
load and execute UEFI binaries directly. The Foundation model can only load and
|
|
execute ELF binaries.</p>
|
|
|
|
<h2>Build</h2>
|
|
|
|
<p>Build the bootstraps using a AArch64 GCC cross-compiler. By default the
|
|
<code>Makefile</code> is configured to assume a GCC bare-metal toolchain:</p>
|
|
|
|
<pre><code>PATH=$PATH:<path/to/baremetal-tools/bin/> make clean
|
|
PATH=$PATH:<path/to/baremetal-tools/bin/> make
|
|
</code></pre>
|
|
|
|
<p>To build the bootstraps with a Linux GCC toolchain use the following
|
|
commands:</p>
|
|
|
|
<pre><code>PATH=$PATH:<path/to/aarch64-linux-gnu-tools/bin/> make clean
|
|
PATH=$PATH:<path/to/aarch64-linux-gnu-tools/bin/> CROSS_COMPILE=<gcc-prefix> make
|
|
</code></pre>
|
|
|
|
<p>The <code>gcc-prefix</code> depends on the specific toolchain distribution used. It can be
|
|
"aarch64-linux-gnu-" for example.</p>
|
|
|
|
<p>This will result in four <code>axf</code> files:</p>
|
|
|
|
<ul>
|
|
<li><p>uefi-bootstrap-el3 : The bootstrap jumps to the UEFI code in FLASH without
|
|
changing anything.</p></li>
|
|
<li><p>uefi-bootstrap-el2 : Setup EL3 and switch the model to EL2 before jumping to the
|
|
UEFI code in FLASH.</p></li>
|
|
<li><p>uefi-bootstrap-el1 : Setup EL3 and prepare to run at non-secure EL1. Switch to
|
|
non-secure EL1 and run the UEFI code in FLASH.</p></li>
|
|
<li><p>uefi-bootstrap-el3-foundation : The bootstrap jumps to the UEFI code in RAM
|
|
without changing anything. Only to be used with the
|
|
Foundation model. The Foundation model does not have
|
|
non-secure memory at address <code>0x0</code> and thus the UEFI image
|
|
should be pre-loaded into non-secure RAM at address
|
|
<code>0xA0000000</code>.</p></li>
|
|
</ul>
|
|
|
|
<h2>Use on ARMv8 RTSM and FVP models</h2>
|
|
|
|
<p>Add the '-a' option to the model start script and point to the required
|
|
bootstrap:</p>
|
|
|
|
<pre><code>< ... model start script as described in top-level readme file ... >
|
|
-a <path/to/bootstrap-binary-file>
|
|
</code></pre>
|
|
|
|
<p>NOTE: The Foundation model bootstrap should not be used with these models.</p>
|
|
|
|
<h2>Use on ARMv8 Foundation model</h2>
|
|
|
|
<p>The Foundation model takes an option for an ELF file to be loaded as well as an
|
|
option to load a binary data blob into RAM. This can be used to run UEFI in the
|
|
following manner:</p>
|
|
|
|
<pre><code><PATH_TO_INSTALLED_FOUNDATION_MODEL>/Foundation_v8 --cores=2 --visualization
|
|
--image=uefi-bootstrap-el3-foundation.axf --nsdata=RTSM_VE_FOUNDATIONV8_EFI.fd@0xA0000000
|
|
</code></pre>
|
|
|
|
<p>NOTE: The RTSM version of the bootstraps and UEFI image will not work as
|
|
expected on the Foundation model. Foundation model specific versions
|
|
should be used.</p>
|