Armv-A Base AEM FVP platform software user guide
Introduction
The Armv-A Base AEM FVP (Fixed Virtual Platform) is an evolution of the base platform, enhanced to support the exploration of system level virtualization. It is an Architecture Envelope Model (AEM) which incorporates two AEM clusters, each of which can be configured with up to four cores.
This document is a user guide on how to set up, build and run the software stack on the Armv-A Base AEM FVP (Fixed Virtual Platform).
Host prerequisites for a validated build environment
Ubuntu Linux 18.04 LTS
Minimum of 50 GB free storage space.
Commands provided in this guide are executed from a
bash
shell environment.
Packages
To ensure that all the required packages are installed, run:
sudo apt-get update
sudo apt-get install make autoconf autopoint bc bison build-essential curl \
device-tree-compiler dosfstools flex gettext-base git libssl-dev m4 \
mtools parted pkg-config python python3-distutils rsync unzip uuid-dev \
wget acpica-tools fuseext2 iasl
To ensure that all the required packages for FVP are installed, run:
sudo apt-get install telnet xterm
Repo
Follow the instructions provided in the repo README file to install the
repo tool
.
NOTE: The repo tool which gets installed using apt-get command sometimes return
errors, in such a case it’s recommended to install repo using the curl
method.
The repo
tool uses git
to download the source code.
It should be configured before using the repo
tool.
git config --global user.name "Your Name"
git config --global user.email "[email protected]"
Downloading the software stack
The manifest files, which contain the location of all the git repositories of Armv-A Base AEM FVP platform software stack, are available here. This section explains the procedure to sync the software stack.
Create a new empty folder
mkdir <aemfvp-a_workspace> cd <aemfvp-a_workspace>
For fetching the latest stable software stack, use the following commands to sync:
repo init \ -u https://git.gitlab.arm.com/arm-reference-solutions/arm-reference-solutions-manifest.git \ -m pinned-aemfvp-a.xml \ -b refs/tags/AEMFVP-A-2021.09.20 --depth=1 repo sync
Note: The repo tool requires at least Python 3.6 to be installed on the development machine. On machines where python3 is not used as default, the repo init command will fail to complete. Refer to the troubleshooting guide for resolving this issue.
Note: To fetch the entire commit history that is being downloaded, remove
--depth=1
from the repo init command. This will increase the time taken to download the platform software stack.
Verify prerequisites
Run the following command to verify all the required prerequisites to build the software stack:
sudo ./build-scripts/check_dep.sh
Note: This command checks and notifies to the user if the host machine is missing any required packages to build the software stack. The user has to install the missing packages.
Fetch toolchain
The toolchain required to build the software components is fetched using build-scripts/aemfvp-a/fetch-tools.sh, it is executed as part of the build-scripts/aemfvp-a/build-test-busybox.sh.
The script must be run separately when building individual software components for the first time. Get the toolchain as shown:
./build-scripts/aemfvp-a/fetch-tools.sh -p aemfvp-a -f none build
Obtaining the Armv-A Base AEM FVP
The latest version of the Armv-A Base AEM FVP model can be downloaded from
Arm Ecosystem FVPs and select Armv-A Base RevC AEM FVP
.
Follow the instructions of the installer and set up the FVP. The installer, by default, selects the home directory to install the FVP. To opt for a different directory than the one selected by the installer, provide an absolute path to that directory when prompted for during the FVP installation process.
Enable network on Armv-A Base AEM FVP
The Armv-A Base AEM FVP supports virtual ethernet interface to allow networking support, used for the software executed by the Armv-A Base AEM FVP. If support for networking is required, the host TAP interface has to be set up before the Armv-A Base AEM FVP is launched. To set up the TAP interface, execute the following commands on the host machine.
Install libvirt-bin
sudo apt-get install libvirt-bin
Note: The above command creates the network interface
virbr0
with the IP address192.168.122.1
. This can be checked with the commandifconfig
. If the interface is not created, run the following command to restart the libvirt daemon.sudo systemctl restart libvirt-bin.service
Create a tap interface named ‘tap0’
sudo ip tuntap add dev tap0 mode tap user $(whoami) sudo ifconfig tap0 0.0.0.0 promisc up sudo brctl addif virbr0 tap0
Supported features
Armv-A Base AEM FVP software stack supports the following features.
Follow the links above for detailed information about the build and execute steps for each of the supported features.
Software Components
The following software components are involved in booting the supported features on Armv-A Base AEM FVP.
Trusted Firmware-A (TF-A)
U-Boot
UEFI
Grub
Linux
Root Filesystem (BusyBox and Distribution)
Each component has a separate script to build the respective component. The following table lists the commands to build/clean a component binary along with the respective output paths for the generated binaries.
Note: The following table shows the commands for ‘busybox’ (or no) filesystem, as there is no ‘distribution’ usage for filesystem flag, also there is no separate script to create the installable distribution images. The detailed explanation on distribution boot can be found at Distribution Boot.
Software Component |
Build/Clean Command |
Output |
---|---|---|
Trusted Firmware-A (TF-A) |
./build-scripts/build-arm-tf.sh -p aemfvp-a -f <busybox/none> <build/clean> |
<aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/tf-bl1.bin , <aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/tf-bl2.bin , <aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/tf-b31.bin |
./build-scripts/build-uboot.sh -p aemfvp-a -f <busybox/none> <build/clean> |
<aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/uboot.bin |
|
UEFI (edk2 and edk2-platforms) |
./build-scripts/build-uefi.sh -p aemfvp-a -f <busybox/none> <build/clean> |
<aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/uefi.bin |
./build-scripts/build-grub.sh -p aemfvp-a -f <busybox/none> <build/clean> |
<aemfvp-a_workspace>/grub/output/grubaa64.efi |
|
./build-scripts/build-linux.sh -p aemfvp-a -f busybox <build/clean> |
<aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/Image |
|
./build-scripts/build-busybox.sh -p aemfvp-a -f busybox <build/clean> |
<aemfvp-a_workspace>/busybox/out/arm64/_install/ |
Once the components are built, they need to be packaged to the BusyBox disk image using the following command. (no packaging required in case of Distribution boot)
./build-scripts/aemfvp-a/build-test-busybox.sh -p aemfvp-a package
Report security vulnerabilities
For reporting security vulnerabilities, please refer Vulnerability reporting page.