166 lines
5.0 KiB
Markdown
166 lines
5.0 KiB
Markdown
# Build and Run ART tests on ARM FVP
|
|
|
|
This document describes how to build and run an Android system image targeting
|
|
the ARM Fixed Virtual Platform and to use it as a target platform for running
|
|
ART tests via ADB.
|
|
|
|
This instruction was checked to be working for the AOSP master tree on
|
|
2021-01-13; the up-to-date instruction on how to build the kernel and firmware
|
|
could be found here: device/generic/goldfish/fvpbase/README.md.
|
|
|
|
## Configuring and Building AOSP
|
|
|
|
First, an AOSP image should be configured and built, including the kernel and
|
|
firmware.
|
|
|
|
### Generating build system configs
|
|
|
|
```
|
|
cd $AOSP
|
|
|
|
. build/envsetup.sh
|
|
# fvp_mini target is used as we don't need a GUI for ART tests.
|
|
lunch fvp_mini-eng
|
|
|
|
# This is expected to fail; it generates all the build rules files.
|
|
m
|
|
```
|
|
|
|
### Building the kernel
|
|
|
|
```
|
|
cd $SOME_DIRECTORY_OUTSIDE_AOSP
|
|
|
|
mkdir android-kernel-mainline
|
|
cd android-kernel-mainline
|
|
repo init -u https://android.googlesource.com/kernel/manifest -b common-android-mainline
|
|
repo sync
|
|
BUILD_CONFIG=common/build.config.gki.aarch64 build/build.sh
|
|
BUILD_CONFIG=common-modules/virtual-device/build.config.fvp build/build.sh
|
|
```
|
|
|
|
The resulting kernel image and DTB (Device Tree Binary) must then be copied into
|
|
the product output directory:
|
|
|
|
```
|
|
cp out/android-mainline/dist/Image $ANDROID_PRODUCT_OUT/kernel
|
|
cp out/android-mainline/dist/fvp-base-revc.dtb out/android-mainline/dist/initramfs.img $ANDROID_PRODUCT_OUT/
|
|
```
|
|
|
|
### Building the firmware (ARM Trusted Firmware and U-Boot)
|
|
|
|
First, install ``dtc``, the device tree compiler. On Debian, this is in the
|
|
``device-tree-compiler`` package.
|
|
|
|
```
|
|
sudo apt-get install device-tree-compiler
|
|
```
|
|
|
|
Then run:
|
|
|
|
```
|
|
mkdir platform
|
|
cd platform
|
|
repo init -u https://git.linaro.org/landing-teams/working/arm/manifest.git -m pinned-uboot.xml -b 20.01
|
|
repo sync
|
|
|
|
# The included copy of U-Boot is incompatible with this version of AOSP, switch to a recent upstream checkout.
|
|
cd u-boot
|
|
git fetch https://gitlab.denx.de/u-boot/u-boot.git/ master
|
|
git checkout 18b9c98024ec89e00a57707f07ff6ada06089d26
|
|
cd ..
|
|
|
|
mkdir -p tools/gcc
|
|
cd tools/gcc
|
|
wget https://releases.linaro.org/components/toolchain/binaries/6.2-2016.11/aarch64-linux-gnu/gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu.tar.xz
|
|
tar -xJf gcc-linaro-6.2.1-2016.11-x86_64_aarch64-linux-gnu.tar.xz
|
|
cd ../..
|
|
|
|
build-scripts/build-test-uboot.sh -p fvp all
|
|
```
|
|
|
|
These components must then be copied into the product output directory:
|
|
|
|
```
|
|
cp output/fvp/fvp-uboot/uboot/{bl1,fip}.bin $ANDROID_PRODUCT_OUT/
|
|
```
|
|
|
|
## Setting up the FVP model
|
|
|
|
### Obtaining the model
|
|
|
|
The public Arm FVP could be obtained from https://developer.arm.com/; one would
|
|
need to create an account there and accept EULA to download and install it.
|
|
A link for the latest version:
|
|
|
|
https://developer.arm.com/tools-and-software/simulation-models/fixed-virtual-platforms/arm-ecosystem-models: "Armv8-A Base RevC AEM FVP"
|
|
|
|
The AEMv8-A Base Platform FVP is a free of charge Fixed Virtual Platform of the
|
|
latest Arm v8-A architecture features and has been validated with compatible
|
|
Open Source software, which can be found on the reference open source software
|
|
stacks page along with instructions for running the software
|
|
|
|
### Running the model
|
|
|
|
From a lunched environment:
|
|
|
|
```
|
|
export MODEL_PATH=/path/to/model/dir
|
|
export MODEL_BIN=${MODEL_PATH}/models/Linux64_GCC-6.4/FVP_Base_RevC-2xAEMv8A
|
|
./device/generic/goldfish/fvpbase/run_model
|
|
```
|
|
|
|
If any extra parameters are needed for the model (e.g. specifying plugins) they
|
|
should be specified as cmdline options for 'run_model'. E.g. to run a model
|
|
which support SVE:
|
|
|
|
```
|
|
export SVE_PLUGIN=${MODEL_PATH}/plugins/Linux64_GCC-6.4/ScalableVectorExtension.so
|
|
$ ./device/generic/goldfish/fvpbase/run_model --plugin ${SVE_PLUGIN} -C SVE.ScalableVectorExtension.veclen=2
|
|
```
|
|
|
|
Note: SVE vector length is passed in units of 64-bit blocks. So "2" would stand
|
|
for 128-bit vector length.
|
|
|
|
The model will start and will have fully booted to shell in around 20 minutes
|
|
(you will see "sys.boot_completed=1" in the log). It can be accessed as a
|
|
regular device with adb:
|
|
|
|
```
|
|
adb connect localhost:5555
|
|
```
|
|
|
|
To terminate the model, press ``Ctrl-] Ctrl-D`` to terminate the telnet
|
|
connection.
|
|
|
|
## Running ART test on FVP
|
|
|
|
The model behaves as a regular adb device so running ART tests could be done using
|
|
the standard chroot method described in test/README.chroot.md; the steps are
|
|
also described below. A separate AOSP tree (not the one used for the model
|
|
itself), should be used - full or minimal.
|
|
|
|
Then the regular ART testing routine could be performed; the regular "lunch"
|
|
target ("armv8" and other targets, not "fvp-eng").
|
|
|
|
|
|
```
|
|
export ART_TEST_CHROOT=/data/local/art-test-chroot
|
|
export OVERRIDE_TARGET_FLATTEN_APEX=true
|
|
export SOONG_ALLOW_MISSING_DEPENDENCIES=true
|
|
export TARGET_BUILD_UNBUNDLED=true
|
|
export ART_TEST_RUN_ON_ARM_FVP=true
|
|
|
|
. ./build/envsetup.sh
|
|
lunch armv8-userdebug
|
|
art/tools/buildbot-build.sh --target
|
|
|
|
art/tools/buildbot-teardown-device.sh
|
|
art/tools/buildbot-cleanup-device.sh
|
|
art/tools/buildbot-setup-device.sh
|
|
art/tools/buildbot-sync.sh
|
|
|
|
art/test/testrunner/testrunner.py --target --64 --optimizing -j1
|
|
|
|
```
|