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 address 192.168.122.1. This can be checked with the command ifconfig. 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.

  1. Trusted Firmware-A (TF-A)

  2. U-Boot

  3. UEFI

  4. Grub

  5. Linux

  6. 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

U-Boot

./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

Grub

./build-scripts/build-grub.sh -p aemfvp-a -f <busybox/none> <build/clean>

<aemfvp-a_workspace>/grub/output/grubaa64.efi

Linux

./build-scripts/build-linux.sh -p aemfvp-a -f busybox <build/clean>

<aemfvp-a_workspace>/output/aemfvp-a/aemfvp-a/Image

Busybox

./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.

Release Tags

The table below lists the release tags for the Armv-A Base AEM FVP software stack and the corresponding Armv-A Base AEM FVP version that is recommended to be used along with the listed release tag. The summary of the software feature and changes introduced in each release is listed in change log.

Release Tag

Armv-A Base AEM FVP Version

AEMFVP-A-2021.09.20

11.15.18


Copyright (c) 2021, Arm Limited. All rights reserved.