1255 lines
45 KiB
ReStructuredText
1255 lines
45 KiB
ReStructuredText
..
|
||
# Copyright (c) 2022-2023, Arm Limited.
|
||
#
|
||
# SPDX-License-Identifier: MIT
|
||
|
||
##########
|
||
User Guide
|
||
##########
|
||
|
||
Notice
|
||
------
|
||
The Corstone-1000 software stack uses the `Yocto Project <https://www.yoctoproject.org/>`__ to build
|
||
a tiny Linux distribution suitable for the Corstone-1000 platform (kernel and initramfs filesystem less than 5 MB on the flash).
|
||
The Yocto Project relies on the `Bitbake <https://docs.yoctoproject.org/bitbake.html#bitbake-documentation>`__
|
||
tool as its build tool. Please see `Yocto Project documentation <https://docs.yoctoproject.org/>`__
|
||
for more information.
|
||
|
||
Prerequisites
|
||
-------------
|
||
|
||
This guide assumes that your host PC is running Ubuntu 20.04 LTS, with at least
|
||
32GB of free disk space and 16GB of RAM as minimum requirement.
|
||
|
||
The following prerequisites must be available on the host system:
|
||
|
||
- Git 1.8.3.1 or greater
|
||
- tar 1.28 or greater
|
||
- Python 3.8.0 or greater.
|
||
- gcc 8.0 or greater.
|
||
- GNU make 4.0 or greater
|
||
|
||
Please follow the steps described in the Yocto mega manual:
|
||
|
||
- `Compatible Linux Distribution <https://docs.yoctoproject.org/singleindex.html#compatible-linux-distribution>`__
|
||
- `Build Host Packages <https://docs.yoctoproject.org/singleindex.html#build-host-packages>`__
|
||
|
||
Targets
|
||
-------
|
||
|
||
- `Arm Corstone-1000 Ecosystem FVP (Fixed Virtual Platform) <https://developer.arm.com/downloads/-/arm-ecosystem-fvps>`__
|
||
- `Arm Corstone-1000 for MPS3 <https://developer.arm.com/documentation/dai0550/latest/>`__
|
||
|
||
Yocto stable branch
|
||
-------------------
|
||
|
||
Corstone-1000 software stack is built on top of Yocto mickledore.
|
||
|
||
Provided components
|
||
-------------------
|
||
Within the Yocto Project, each component included in the Corstone-1000 software stack is specified as
|
||
a `bitbake recipe <https://docs.yoctoproject.org/bitbake/2.2/bitbake-user-manual/bitbake-user-manual-intro.html#recipes>`__.
|
||
The recipes specific to the Corstone-1000 BSP are located at:
|
||
``<_workspace>/meta-arm/meta-arm-bsp/``.
|
||
|
||
The Yocto machine config files for the Corstone-1000 FVP and FPGA targets are:
|
||
|
||
- ``<_workspace>/meta-arm/meta-arm-bsp/conf/machine/include/corstone1000.inc``
|
||
- ``<_workspace>/meta-arm/meta-arm-bsp/conf/machine/corstone1000-fvp.conf``
|
||
- ``<_workspace>/meta-arm/meta-arm-bsp/conf/machine/corstone1000-mps3.conf``
|
||
|
||
**NOTE:** All the paths stated in this document are absolute paths.
|
||
|
||
*****************
|
||
Software for Host
|
||
*****************
|
||
|
||
Trusted Firmware-A
|
||
==================
|
||
Based on `Trusted Firmware-A <https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git>`__
|
||
|
||
+----------+-----------------------------------------------------------------------------------------------------+
|
||
| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.8.%.bbappend |
|
||
+----------+-----------------------------------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/meta-arm/meta-arm/recipes-bsp/trusted-firmware-a/trusted-firmware-a_2.8.0.bb |
|
||
+----------+-----------------------------------------------------------------------------------------------------+
|
||
|
||
OP-TEE
|
||
======
|
||
Based on `OP-TEE <https://git.trustedfirmware.org/OP-TEE/optee_os.git>`__
|
||
|
||
+----------+------------------------------------------------------------------------------------+
|
||
| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-security/optee/optee-os_3.20.0.bbappend |
|
||
+----------+------------------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/meta-arm/meta-arm/recipes-security/optee/optee-os_3.20.0.bb |
|
||
+----------+------------------------------------------------------------------------------------+
|
||
|
||
U-Boot
|
||
======
|
||
Based on `U-Boot repo`_
|
||
|
||
+----------+-------------------------------------------------------------------------+
|
||
| bbappend | <_workspace>/meta-arm/meta-arm/recipes-bsp/u-boot/u-boot_%.bbappend |
|
||
+----------+-------------------------------------------------------------------------+
|
||
| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/u-boot/u-boot_%.bbappend |
|
||
+----------+-------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/poky/meta/recipes-bsp/u-boot/u-boot_2023.01.bb |
|
||
+----------+-------------------------------------------------------------------------+
|
||
|
||
Linux
|
||
=====
|
||
The distro is based on the `poky-tiny <https://wiki.yoctoproject.org/wiki/Poky-Tiny>`__
|
||
distribution which is a Linux distribution stripped down to a minimal configuration.
|
||
|
||
The provided distribution is based on busybox and built using musl libc. The
|
||
recipe responsible for building a tiny version of Linux is listed below.
|
||
|
||
+-----------+----------------------------------------------------------------------------------------------+
|
||
| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-kernel/linux/linux-yocto_%.bbappend |
|
||
+-----------+----------------------------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/poky/meta/recipes-kernel/linux/linux-yocto_6.1.bb |
|
||
+-----------+----------------------------------------------------------------------------------------------+
|
||
| defconfig | <_workspace>/meta-arm/meta-arm-bsp/recipes-kernel/linux/files/corstone1000/defconfig |
|
||
+-----------+----------------------------------------------------------------------------------------------+
|
||
|
||
External System Tests
|
||
=====================
|
||
Based on `Corstone-1000/applications <https://git.gitlab.arm.com/arm-reference-solutions/corstone1000/applications>`__
|
||
|
||
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/meta-arm/meta-arm-bsp/recipes-test/corstone1000-external-sys-tests/corstone1000-external-sys-tests_1.0.bb |
|
||
+------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
|
||
The recipe provides the systems-comms-tests command run in Linux and used for testing the External System.
|
||
|
||
**************************************************
|
||
Software for Boot Processor (a.k.a Secure Enclave)
|
||
**************************************************
|
||
Based on `Trusted Firmware-M <https://git.trustedfirmware.org/TF-M/trusted-firmware-m.git>`__
|
||
|
||
+----------+-----------------------------------------------------------------------------------------------------+
|
||
| bbappend | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.7.%.bbappend |
|
||
+----------+-----------------------------------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/meta-arm/meta-arm/recipes-bsp/trusted-firmware-m/trusted-firmware-m_1.7.0.bb |
|
||
+----------+-----------------------------------------------------------------------------------------------------+
|
||
|
||
********************************
|
||
Software for the External System
|
||
********************************
|
||
|
||
RTX
|
||
====
|
||
Based on `RTX RTOS <https://git.gitlab.arm.com/arm-reference-solutions/corstone1000/external_system/rtx>`__
|
||
|
||
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
| Recipe | <_workspace>/meta-arm/meta-arm-bsp/recipes-bsp/external-system/external-system_0.1.0.bb |
|
||
+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||
|
||
Building the software stack
|
||
---------------------------
|
||
Create a new folder that will be your workspace and will henceforth be referred
|
||
to as ``<_workspace>`` in these instructions. To create the folder, run:
|
||
|
||
::
|
||
|
||
mkdir <_workspace>
|
||
cd <_workspace>
|
||
|
||
Corstone-1000 software is based on the Yocto Project which uses kas and bitbake
|
||
commands to build the stack. To install kas tool, run:
|
||
|
||
::
|
||
|
||
pip3 install kas
|
||
|
||
If 'kas' command is not found in command-line, please make sure the user installation directories are visible on $PATH. If you have sudo rights, try 'sudo pip3 install kas'.
|
||
|
||
In the top directory of the workspace ``<_workspace>``, run:
|
||
|
||
::
|
||
|
||
git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2023.06
|
||
|
||
To build a Corstone-1000 image for MPS3 FPGA, run:
|
||
|
||
::
|
||
|
||
kas build meta-arm/kas/corstone1000-mps3.yml
|
||
|
||
Alternatively, to build a Corstone-1000 image for FVP, you need to accept
|
||
the EULA at https://developer.arm.com/downloads/-/arm-ecosystem-fvps/eula
|
||
by setting the ARM_FVP_EULA_ACCEPT environment variable as follows:
|
||
|
||
::
|
||
|
||
export ARM_FVP_EULA_ACCEPT="True"
|
||
|
||
then run:
|
||
|
||
::
|
||
|
||
kas build meta-arm/kas/corstone1000-fvp.yml
|
||
|
||
The initial clean build will be lengthy, given that all host utilities are to
|
||
be built as well as the target images. This includes host executables (python,
|
||
cmake, etc.) and the required toolchain(s).
|
||
|
||
Once the build is successful, all output binaries will be placed in the following folders:
|
||
- ``<_workspace>/build/tmp/deploy/images/corstone1000-fvp/`` folder for FVP build;
|
||
- ``<_workspace>/build/tmp/deploy/images/corstone1000-mps3/`` folder for FPGA build.
|
||
|
||
Everything apart from the Secure Enclave ROM firmware and External System firmware, is bundled into a single binary, the
|
||
``corstone1000-image-corstone1000-{mps3,fvp}.wic`` file.
|
||
|
||
The output binaries run in the Corstone-1000 platform are the following:
|
||
- The Secure Enclave ROM firmware: ``<_workspace>/build/tmp/deploy/images/corstone1000-{mps3,fvp}/bl1.bin``
|
||
- The External System firmware: ``<_workspace>/build/tmp/deploy/images/corstone1000-{mps3,fvp}/es_flashfw.bin``
|
||
- The flash image: ``<_workspace>/build/tmp/deploy/images/corstone1000-{mps3,fvp}/corstone1000-image-corstone1000-{mps3,fvp}.wic``
|
||
|
||
Flash the firmware image on FPGA
|
||
--------------------------------
|
||
|
||
The user should download the FPGA bit file image ``AN550: Arm® Corstone™-1000 for MPS3 Version 2.0``
|
||
from `this link <https://developer.arm.com/tools-and-software/development-boards/fpga-prototyping-boards/download-fpga-images>`__
|
||
and under the section ``Arm® Corstone™-1000 for MPS3``. The download is available after logging in.
|
||
|
||
The directory structure of the FPGA bundle is shown below.
|
||
|
||
::
|
||
|
||
Boardfiles
|
||
├── config.txt
|
||
├── MB
|
||
│ ├── BRD_LOG.TXT
|
||
│ ├── HBI0309B
|
||
│ │ ├── AN550
|
||
│ │ │ ├── AN550_v2.bit
|
||
│ │ │ ├── an550_v2.txt
|
||
│ │ │ └── images.txt
|
||
│ │ ├── board.txt
|
||
│ │ └── mbb_v210.ebf
|
||
│ └── HBI0309C
|
||
│ ├── AN550
|
||
│ │ ├── AN550_v2.bit
|
||
│ │ ├── an550_v2.txt
|
||
│ │ └── images.txt
|
||
│ ├── board.txt
|
||
│ └── mbb_v210.ebf
|
||
└── SOFTWARE
|
||
├── an550_st.axf
|
||
├── bl1.bin
|
||
├── cs1000.bin
|
||
└── ES0.bin
|
||
|
||
Depending upon the MPS3 board version (printed on the MPS3 board) you should update the images.txt file
|
||
(in corresponding HBI0309x folder. Boardfiles/MB/HBI0309<board_revision>/AN550/images.txt) so that the file points to the images under SOFTWARE directory.
|
||
|
||
The images.txt file that is compatible with the latest version of the software
|
||
stack can be seen below;
|
||
|
||
::
|
||
|
||
;************************************************
|
||
; Preload port mapping *
|
||
;************************************************
|
||
; PORT 0 & ADDRESS: 0x00_0000_0000 QSPI Flash (XNVM) (32MB)
|
||
; PORT 0 & ADDRESS: 0x00_8000_0000 OCVM (DDR4 2GB)
|
||
; PORT 1 Secure Enclave (M0+) ROM (64KB)
|
||
; PORT 2 External System 0 (M3) Code RAM (256KB)
|
||
; PORT 3 Secure Enclave OTP memory (8KB)
|
||
; PORT 4 CVM (4MB)
|
||
;************************************************
|
||
|
||
[IMAGES]
|
||
TOTALIMAGES: 3 ;Number of Images (Max: 32)
|
||
|
||
IMAGE0PORT: 1
|
||
IMAGE0ADDRESS: 0x00_0000_0000
|
||
IMAGE0UPDATE: RAM
|
||
IMAGE0FILE: \SOFTWARE\bl1.bin
|
||
|
||
IMAGE1PORT: 0
|
||
IMAGE1ADDRESS: 0x00_0000_0000
|
||
IMAGE1UPDATE: AUTOQSPI
|
||
IMAGE1FILE: \SOFTWARE\cs1000.bin
|
||
|
||
IMAGE2PORT: 2
|
||
IMAGE2ADDRESS: 0x00_0000_0000
|
||
IMAGE2UPDATE: RAM
|
||
IMAGE2FILE: \SOFTWARE\es0.bin
|
||
|
||
OUTPUT_DIR = ``<_workspace>/build/tmp/deploy/images/corstone1000-mps3``
|
||
|
||
1. Copy ``bl1.bin`` from OUTPUT_DIR directory to SOFTWARE directory of the FPGA bundle.
|
||
2. Copy ``es_flashfw.bin`` from OUTPUT_DIR directory to SOFTWARE directory of the FPGA bundle
|
||
and rename the binary to ``es0.bin``.
|
||
3. Copy ``corstone1000-image-corstone1000-mps3.wic`` from OUTPUT_DIR directory to SOFTWARE
|
||
directory of the FPGA bundle and rename the wic image to ``cs1000.bin``.
|
||
|
||
**NOTE:** Renaming of the images are required because MCC firmware has
|
||
limitation of 8 characters before .(dot) and 3 characters after .(dot).
|
||
|
||
Now, copy the entire folder to board's SDCard and reboot the board.
|
||
|
||
Running the software on FPGA
|
||
----------------------------
|
||
|
||
On the host machine, open 4 serial port terminals. In case of Linux machine it will
|
||
be ttyUSB0, ttyUSB1, ttyUSB2, ttyUSB3 and it might be different on Windows machines.
|
||
|
||
- ttyUSB0 for MCC, OP-TEE and Secure Partition
|
||
- ttyUSB1 for Boot Processor (Cortex-M0+)
|
||
- ttyUSB2 for Host Processor (Cortex-A35)
|
||
- ttyUSB3 for External System Processor (Cortex-M3)
|
||
|
||
Run following commands to open serial port terminals on Linux:
|
||
|
||
::
|
||
|
||
sudo picocom -b 115200 /dev/ttyUSB0 # in one terminal
|
||
sudo picocom -b 115200 /dev/ttyUSB1 # in another terminal
|
||
sudo picocom -b 115200 /dev/ttyUSB2 # in another terminal.
|
||
sudo picocom -b 115200 /dev/ttyUSB3 # in another terminal.
|
||
|
||
**NOTE:** The MPS3 expects an ethernet cable to be plugged in, otherwise it will
|
||
wait for the network for a considerable amount of time, printing the following
|
||
logs:
|
||
|
||
::
|
||
|
||
Generic PHY 40100000.ethernet-ffffffff:01: attached PHY driver (mii_bus:phy_addr=40100000.ethernet-ffffffff:01, irq=POLL)
|
||
smsc911x 40100000.ethernet eth0: SMSC911x/921x identified at 0xffffffc008e50000, IRQ: 17
|
||
Waiting up to 100 more seconds for network.
|
||
|
||
Once the system boot is completed, you should see console
|
||
logs on the serial port terminals. Once the HOST(Cortex-A35) is
|
||
booted completely, user can login to the shell using
|
||
**"root"** login.
|
||
|
||
If system does not boot and only the ttyUSB1 logs are visible, please follow the
|
||
steps in `Clean Secure Flash Before Testing (applicable to FPGA only)`_ under
|
||
`SystemReady-IR tests`_ section. The previous image used in FPGA (MPS3) might
|
||
have filled the Secure Flash completely. The best practice is to clean the
|
||
secure flash in this case.
|
||
|
||
|
||
Running the software on FVP
|
||
---------------------------
|
||
|
||
An FVP (Fixed Virtual Platform) model of the Corstone-1000 platform must be available to run the
|
||
Corstone-1000 FVP software image.
|
||
|
||
A Yocto recipe is provided and allows to download the latest supported FVP version.
|
||
|
||
The recipe is located at <_workspace>/meta-arm/meta-arm/recipes-devtools/fvp/fvp-corstone1000.bb
|
||
|
||
The latest supported Fixed Virtual Platform (FVP) version is 11.19_21 and is automatically downloaded and installed when using the runfvp command as detailed below. The FVP version can be checked by running the following command:
|
||
|
||
::
|
||
|
||
<_workspace>/meta-arm/scripts/runfvp <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- --version
|
||
|
||
The FVP can also be manually downloaded from the `Arm Ecosystem FVPs`_ page. On this page, navigate
|
||
to "Corstone IoT FVPs" section to download the Corstone-1000 platform FVP installer. Follow the
|
||
instructions of the installer and setup the FVP.
|
||
|
||
To run the FVP using the runfvp command, please run the following command:
|
||
|
||
::
|
||
|
||
<_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf
|
||
|
||
When the script is executed, three terminal instances will be launched, one for the boot processor
|
||
(aka Secure Enclave) processing element and two for the Host processing element. Once the FVP is
|
||
executing, the Boot Processor will start to boot, wherein the relevant memory contents of the .wic
|
||
file are copied to their respective memory locations within the model, enforce firewall policies
|
||
on memories and peripherals and then, bring the host out of reset.
|
||
|
||
The host will boot trusted-firmware-a, OP-TEE, U-Boot and then Linux, and present a login prompt
|
||
(FVP host_terminal_0):
|
||
|
||
::
|
||
|
||
corstone1000-fvp login:
|
||
|
||
Login using the username root.
|
||
|
||
The External System can be released out of reset on demand using the systems-comms-tests command.
|
||
|
||
SystemReady-IR tests
|
||
--------------------
|
||
|
||
*************
|
||
Testing steps
|
||
*************
|
||
|
||
**NOTE**: Running the SystemReady-IR tests described below requires the user to
|
||
work with USB sticks. In our testing, not all USB stick models work well with
|
||
MPS3 FPGA. Here are the USB sticks models that are stable in our test
|
||
environment.
|
||
|
||
- HP V165W 8 GB USB Flash Drive
|
||
- SanDisk Ultra 32GB Dual USB Flash Drive USB M3.0
|
||
- SanDisk Ultra 16GB Dual USB Flash Drive USB M3.0
|
||
|
||
**NOTE**:
|
||
Before running each of the tests in this chapter, the user should follow the
|
||
steps described in following section "Clean Secure Flash Before Testing" to
|
||
erase the SecureEnclave flash cleanly and prepare a clean board environment for
|
||
the testing.
|
||
|
||
Clean Secure Flash Before Testing (applicable to FPGA only)
|
||
===========================================================
|
||
|
||
To prepare a clean board environment with clean secure flash for the testing,
|
||
the user should prepare an image that erases the secure flash cleanly during
|
||
boot. Run following commands to build such image.
|
||
|
||
::
|
||
|
||
cd <_workspace>
|
||
git clone https://git.yoctoproject.org/git/meta-arm -b CORSTONE1000-2023.06
|
||
git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.06
|
||
cp -f systemready-patch/embedded-a/corstone1000/erase_flash/0001-embedded-a-corstone1000-clean-secure-flash.patch meta-arm
|
||
cd meta-arm
|
||
git apply 0001-embedded-a-corstone1000-clean-secure-flash.patch
|
||
cd ..
|
||
kas build meta-arm/kas/corstone1000-mps3.yml
|
||
|
||
Replace the bl1.bin and cs1000.bin files on the SD card with following files:
|
||
- The ROM firmware: <_workspace>/build/tmp/deploy/images/corstone1000-mps3/bl1.bin
|
||
- The flash image: <_workspace>/build/tmp/deploy/images/corstone1000-mps3/corstone1000-image-corstone1000-mps3.wic
|
||
|
||
Now reboot the board. This step erases the Corstone-1000 SecureEnclave flash
|
||
completely, the user should expect following message from TF-M log (can be seen
|
||
in ttyUSB1):
|
||
|
||
::
|
||
|
||
!!!SECURE FLASH HAS BEEN CLEANED!!!
|
||
NOW YOU CAN FLASH THE ACTUAL CORSTONE1000 IMAGE
|
||
PLEASE REMOVE THE LATEST ERASE SECURE FLASH PATCH AND BUILD THE IMAGE AGAIN
|
||
|
||
Then the user should follow "Building the software stack" to build a clean
|
||
software stack and flash the FPGA as normal. And continue the testing.
|
||
|
||
Run SystemReady-IR ACS tests
|
||
============================
|
||
|
||
Architecture Compliance Suite (ACS) is used to ensure architectural compliance
|
||
across different implementations of the architecture. Arm Enterprise ACS
|
||
includes a set of examples of the invariant behaviors that are provided by a
|
||
set of specifications for enterprise systems (For example: SBSA, SBBR, etc.),
|
||
so that implementers can verify if these behaviours have been interpreted correctly.
|
||
|
||
ACS image contains two partitions. BOOT partition and RESULT partition.
|
||
Following test suites and bootable applications are under BOOT partition:
|
||
|
||
* SCT
|
||
* FWTS
|
||
* BSA uefi
|
||
* BSA linux
|
||
* grub
|
||
* uefi manual capsule application
|
||
|
||
BOOT partition contains the following:
|
||
|
||
::
|
||
|
||
├── EFI
|
||
│ └── BOOT
|
||
│ ├── app
|
||
│ ├── bbr
|
||
│ ├── bootaa64.efi
|
||
│ ├── bsa
|
||
│ ├── debug
|
||
│ ├── Shell.efi
|
||
│ └── startup.nsh
|
||
├── grub
|
||
├── grub.cfg
|
||
├── Image
|
||
└── ramdisk-busybox.img
|
||
|
||
RESULT partition is used to store the test results.
|
||
**NOTE**: PLEASE MAKE SURE THAT THE RESULT PARTITION IS EMPTY BEFORE YOU START THE TESTING. OTHERWISE THE TEST RESULTS
|
||
WILL NOT BE CONSISTENT
|
||
|
||
FPGA instructions for ACS image
|
||
===============================
|
||
|
||
This section describes how the user can build and run Architecture Compliance
|
||
Suite (ACS) tests on Corstone-1000.
|
||
|
||
First, the user should download the `Arm SystemReady ACS repository <https://github.com/ARM-software/arm-systemready/>`__.
|
||
This repository contains the infrastructure to build the Architecture
|
||
Compliance Suite (ACS) and the bootable prebuilt images to be used for the
|
||
certifications of SystemReady-IR. To download the repository, run command:
|
||
|
||
::
|
||
|
||
cd <_workspace>
|
||
git clone https://github.com/ARM-software/arm-systemready.git -b v21.09_REL1.0
|
||
|
||
Once the repository is successfully downloaded, the prebuilt ACS live image can be found in:
|
||
- ``<_workspace>/arm-systemready/IR/prebuilt_images/v21.07_0.9_BETA/ir_acs_live_image.img.xz``
|
||
|
||
**NOTE**: This prebuilt ACS image includes v5.13 kernel, which doesn't provide
|
||
USB driver support for Corstone-1000. The ACS image with newer kernel version
|
||
and with full USB support for Corstone-1000 will be available in the next
|
||
SystemReady release in this repository.
|
||
|
||
Then, the user should prepare a USB stick with ACS image. In the given example here,
|
||
we assume the USB device is ``/dev/sdb`` (the user should use ``lsblk`` command to
|
||
confirm). Be cautious here and don't confuse your host PC's own hard drive with the
|
||
USB drive. Run the following commands to prepare the ACS image in USB stick:
|
||
|
||
::
|
||
|
||
cd <_workspace>/arm-systemready/IR/prebuilt_images/v21.07_0.9_BETA
|
||
unxz ir_acs_live_image.img.xz
|
||
sudo dd if=ir_acs_live_image.img of=/dev/sdb iflag=direct oflag=direct bs=1M status=progress; sync
|
||
|
||
Once the USB stick with ACS image is prepared, the user should make sure that
|
||
ensure that only the USB stick with the ACS image is connected to the board,
|
||
and then boot the board.
|
||
|
||
The FPGA will reset multiple times during the test, and it might take approx. 24-36 hours to finish the test.
|
||
|
||
|
||
FVP instructions for ACS image and run
|
||
======================================
|
||
|
||
Download ACS image from:
|
||
- ``https://gitlab.arm.com/systemready/acs/arm-systemready/-/tree/linux-5.17-rc7/IR/prebuilt_images/v22.04_1.0-Linux-v5.17-rc7``
|
||
|
||
Use the below command to run the FVP with ACS image support in the
|
||
SD card.
|
||
|
||
::
|
||
|
||
unxz ${<path-to-img>/ir_acs_live_image.img.xz}
|
||
|
||
tmux
|
||
|
||
<_workspace>/meta-arm/scripts/runfvp <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="${<path-to-img>/ir_acs_live_image.img}"
|
||
|
||
The test results can be fetched using following commands:
|
||
|
||
::
|
||
|
||
sudo mkdir /mnt/test
|
||
sudo mount -o rw,offset=<offset_2nd_partition> <path-to-img>/ir_acs_live_image.img /mnt/test/
|
||
fdisk -lu <path-to-img>/ir_acs_live_image.img
|
||
-> Device Start End Sectors Size Type
|
||
<path-to-img>/ir_acs_live_image_modified.img1 2048 1050622 1048575 512M Microsoft basic data
|
||
<path-to-img>/ir_acs_live_image_modified.img2 1050624 1153022 102399 50M Microsoft basic data
|
||
|
||
-> <offset_2nd_partition> = 1050624 * 512 (sector size) = 537919488
|
||
|
||
The FVP will reset multiple times during the test, and it might take up to 1 day to finish
|
||
the test. At the end of test, the FVP host terminal will halt showing a shell prompt.
|
||
Once test is finished, the FVP can be stoped, and result can be copied following above
|
||
instructions.
|
||
|
||
Common to FVP and FPGA
|
||
======================
|
||
|
||
U-Boot should be able to boot the grub bootloader from
|
||
the 1st partition and if grub is not interrupted, tests are executed
|
||
automatically in the following sequence:
|
||
|
||
- SCT
|
||
- UEFI BSA
|
||
- FWTS
|
||
|
||
The results can be fetched from the ``acs_results`` folder in the RESULT partition of the USB stick (FPGA) / SD Card (FVP).
|
||
|
||
#####################################################
|
||
|
||
Manual capsule update and ESRT checks
|
||
-------------------------------------
|
||
|
||
The following section describes running manual capsule update with the ``direct`` method.
|
||
|
||
The steps described in this section perform manual capsule update and show how to use the ESRT feature
|
||
to retrieve the installed capsule details.
|
||
|
||
For the following tests two capsules are needed to perform 2 capsule updates. A positive update and a negative update.
|
||
|
||
A positive test case capsule which boots the platform correctly until the Linux prompt, and a negative test case with an
|
||
incorrect capsule (corrupted or outdated) which fails to boot to the host software.
|
||
|
||
Check the "Run SystemReady-IR ACS tests" section above to download and unpack the ACS image file
|
||
- ``ir_acs_live_image.img.xz``
|
||
|
||
Download edk2 under <_workspace>:
|
||
|
||
::
|
||
|
||
git clone https://github.com/tianocore/edk2.git
|
||
cd edk2
|
||
git checkout f2188fe5d1553ad1896e27b2514d2f8d0308da8a
|
||
|
||
Download systemready-patch repo under <_workspace>:
|
||
::
|
||
|
||
git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.06
|
||
|
||
*******************
|
||
Generating Capsules
|
||
*******************
|
||
|
||
Generating FPGA Capsules
|
||
========================
|
||
|
||
::
|
||
|
||
cd <_workspace>/build/tmp/deploy/images/corstone1000-mps3/
|
||
sh <_workspace>/systemready-patch/embedded-a/corstone1000/capsule_gen/capsule_gen.sh -d mps3
|
||
|
||
This will generate a file called "corstone1000_image.nopt" which will be used to
|
||
generate a UEFI capsule.
|
||
|
||
::
|
||
|
||
cd <_workspace>
|
||
edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_mps3_v6 --fw-version 6 \
|
||
--lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index 0 \
|
||
--verbose build/tmp/deploy/images/corstone1000-mps3/corstone1000_image.nopt
|
||
|
||
edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_mps3_v5 --fw-version 5 \
|
||
--lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index 0 \
|
||
--verbose build/tmp/deploy/images/corstone1000-mps3/corstone1000_image.nopt
|
||
|
||
Generating FVP Capsules
|
||
=======================
|
||
|
||
::
|
||
|
||
cd <_workspace>/build/tmp/deploy/images/corstone1000-fvp/
|
||
sh <_workspace>/systemready-patch/embedded-a/corstone1000/capsule_gen/capsule_gen.sh -d fvp
|
||
|
||
This will generate a file called "corstone1000_image.nopt" which will be used to
|
||
generate a UEFI capsule.
|
||
|
||
|
||
::
|
||
|
||
cd <_workspace>
|
||
edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_fvp_v6 \
|
||
--fw-version 6 --lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index \
|
||
0 --verbose build/tmp/deploy/images/corstone1000-fvp/corstone1000_image.nopt
|
||
|
||
edk2/BaseTools/BinWrappers/PosixLike/GenerateCapsule -e -o cs1k_cap_fvp_v5 --fw-version 5 \
|
||
--lsv 0 --guid e2bb9c06-70e9-4b14-97a3-5a7913176e3f --verbose --update-image-index \
|
||
0 --verbose build/tmp/deploy/images/corstone1000-fvp/corstone1000_image.nopt
|
||
|
||
|
||
Common Notes for FVP and FPGA
|
||
=============================
|
||
|
||
The capsule binary size (wic file) should be less than 15 MB.
|
||
|
||
Based on the user's requirement, the user can change the firmware version
|
||
number given to ``--fw-version`` option (the version number needs to be >= 1).
|
||
|
||
|
||
****************
|
||
Copying Capsules
|
||
****************
|
||
|
||
Copying the FPGA capsules
|
||
=========================
|
||
|
||
The user should prepare a USB stick as explained in ACS image section `FPGA instructions for ACS image`_.
|
||
Place the generated ``cs1k_cap`` files in the root directory of the boot partition
|
||
in the USB stick. Note: As we are running the direct method, the ``cs1k_cap`` file
|
||
should not be under the EFI/UpdateCapsule directory as this may or may not trigger
|
||
the on disk method.
|
||
|
||
::
|
||
|
||
sudo cp cs1k_cap_mps3_v6 <mounting path>/BOOT/
|
||
sudo cp cs1k_cap_mps3_v5 <mounting path>/BOOT/
|
||
sync
|
||
|
||
Copying the FVP capsules
|
||
========================
|
||
|
||
First, mount the IR image:
|
||
|
||
::
|
||
|
||
sudo mkdir /mnt/test
|
||
sudo mount -o rw,offset=1048576 <path-to-img>/ir_acs_live_image.img /mnt/test
|
||
|
||
Then, copy the capsules:
|
||
|
||
::
|
||
|
||
sudo cp cs1k_cap_fvp_v6 /mnt/test/
|
||
sudo cp cs1k_cap_fvp_v5 /mnt/test/
|
||
sync
|
||
|
||
Then, unmount the IR image:
|
||
|
||
::
|
||
|
||
sudo umount /mnt/test
|
||
|
||
**NOTE:**
|
||
|
||
The size of first partition in the image file is calculated in the following way. The data is
|
||
just an example and might vary with different ir_acs_live_image.img files.
|
||
|
||
::
|
||
|
||
fdisk -lu <path-to-img>/ir_acs_live_image.img
|
||
-> Device Start End Sectors Size Type
|
||
<path-to-img>/ir_acs_live_image_modified.img1 2048 1050622 1048575 512M Microsoft basic data
|
||
<path-to-img>/ir_acs_live_image_modified.img2 1050624 1153022 102399 50M Microsoft basic data
|
||
|
||
-> <offset_1st_partition> = 2048 * 512 (sector size) = 1048576
|
||
|
||
******************************
|
||
Performing the capsule update
|
||
******************************
|
||
|
||
During this section we will be using the capsule with the higher version (cs1k_cap_<fvp/mps3>_v6) for the positive scenario
|
||
and the capsule with the lower version (cs1k_cap_<fvp/mps3>_v5) for the negative scenario.
|
||
|
||
Running the FVP with the IR prebuilt image
|
||
==========================================
|
||
|
||
Run the FVP with the IR prebuilt image:
|
||
|
||
::
|
||
|
||
<_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C "board.msd_mmc.p_mmc_file=${<path-to-img>/ir_acs_live_image.img}"
|
||
|
||
Running the FPGA with the IR prebuilt image
|
||
===========================================
|
||
|
||
Insert the prepared USB stick then Power cycle the MPS3 board.
|
||
|
||
Executing capsule update for FVP and FPGA
|
||
=========================================
|
||
|
||
Reach u-boot then interrupt the boot to reach the EFI shell.
|
||
|
||
::
|
||
|
||
Press ESC in 4 seconds to skip startup.nsh or any other key to continue.
|
||
|
||
Then, type FS0: as shown below:
|
||
|
||
::
|
||
|
||
FS0:
|
||
|
||
In case of the positive scenario run the update with the higher version capsule as shown below:
|
||
|
||
::
|
||
|
||
EFI/BOOT/app/CapsuleApp.efi cs1k_cap_<fvp/mps3>_v6
|
||
|
||
After successfully updating the capsule the system will reset.
|
||
|
||
In case of the negative scenario run the update with the lower version capsule as shown below:
|
||
|
||
::
|
||
|
||
EFI/BOOT/app/CapsuleApp.efi cs1k_cap_<fvp/mps3>_v5
|
||
|
||
The command above should fail and in the TF-M logs the following message should appear:
|
||
|
||
::
|
||
|
||
ERROR: flash_full_capsule: version error
|
||
|
||
Then, reboot manually:
|
||
|
||
::
|
||
|
||
Shell> reset
|
||
|
||
FPGA: Select Corstone-1000 Linux kernel boot
|
||
============================================
|
||
|
||
Remove the USB stick before u-boot is reached so the Corstone-1000 kernel will be detected and used for booting.
|
||
|
||
**NOTE:** Otherwise, the execution ends up in the ACS live image.
|
||
|
||
FVP: Select Corstone-1000 Linux kernel boot
|
||
===========================================
|
||
|
||
Interrupt the u-boot shell.
|
||
|
||
::
|
||
|
||
Hit any key to stop autoboot:
|
||
|
||
Run the following commands in order to run the Corstone-1000 Linux kernel and being able to check the ESRT table.
|
||
|
||
**NOTE:** Otherwise, the execution ends up in the ACS live image.
|
||
|
||
::
|
||
|
||
$ unzip $kernel_addr 0x90000000
|
||
$ loadm 0x90000000 $kernel_addr_r 0xf00000
|
||
$ bootefi $kernel_addr_r $fdtcontroladdr
|
||
|
||
|
||
*********************
|
||
Capsule update status
|
||
*********************
|
||
|
||
Positive scenario
|
||
=================
|
||
|
||
In the positive case scenario, the user should see following log in TF-M log,
|
||
indicating the new capsule image is successfully applied, and the board boots
|
||
correctly.
|
||
|
||
::
|
||
|
||
...
|
||
SysTick_Handler: counted = 10, expiring on = 360
|
||
SysTick_Handler: counted = 20, expiring on = 360
|
||
SysTick_Handler: counted = 30, expiring on = 360
|
||
...
|
||
metadata_write: success: active = 1, previous = 0
|
||
flash_full_capsule: exit
|
||
corstone1000_fwu_flash_image: exit: ret = 0
|
||
...
|
||
|
||
|
||
It's possible to check the content of the ESRT table after the system fully boots.
|
||
|
||
In the Linux command-line run the following:
|
||
|
||
::
|
||
|
||
# cd /sys/firmware/efi/esrt/entries/entry0
|
||
# cat *
|
||
|
||
0x0
|
||
e2bb9c06-70e9-4b14-97a3-5a7913176e3f
|
||
0
|
||
6
|
||
0
|
||
6
|
||
0
|
||
|
||
.. line-block::
|
||
capsule_flags: 0x0
|
||
fw_class: e2bb9c06-70e9-4b14-97a3-5a7913176e3f
|
||
fw_type: 0
|
||
fw_version: 6
|
||
last_attempt_status: 0
|
||
last_attempt_version: 6
|
||
lowest_supported_fw_ver: 0
|
||
|
||
|
||
Negative scenario
|
||
=================
|
||
|
||
In the negative case scenario (rollback the capsule version), the user should
|
||
see appropriate logs in the secure enclave terminal.
|
||
|
||
::
|
||
|
||
...
|
||
uefi_capsule_retrieve_images: image 0 at 0xa0000070, size=15654928
|
||
uefi_capsule_retrieve_images: exit
|
||
flash_full_capsule: enter: image = 0x0xa0000070, size = 7764541, version = 5
|
||
ERROR: flash_full_capsule: version error
|
||
private_metadata_write: enter: boot_index = 1
|
||
private_metadata_write: success
|
||
fmp_set_image_info:133 Enter
|
||
FMP image update: image id = 0
|
||
FMP image update: status = 1version=6 last_attempt_version=5.
|
||
fmp_set_image_info:157 Exit.
|
||
corstone1000_fwu_flash_image: exit: ret = -1
|
||
fmp_get_image_info:232 Enter
|
||
pack_image_info:207 ImageInfo size = 105, ImageName size = 34, ImageVersionName
|
||
size = 36
|
||
fmp_get_image_info:236 Exit
|
||
...
|
||
|
||
|
||
If capsule pass initial verification, but fails verifications performed during
|
||
boot time, secure enclave will try new images predetermined number of times
|
||
(defined in the code), before reverting back to the previous good bank.
|
||
|
||
::
|
||
|
||
...
|
||
metadata_write: success: active = 0, previous = 1
|
||
fwu_select_previous: in regular state by choosing previous active bank
|
||
...
|
||
|
||
It's possible to check the content of the ESRT table after the system fully boots.
|
||
|
||
In the Linux command-line run the following:
|
||
|
||
::
|
||
|
||
# cd /sys/firmware/efi/esrt/entries/entry0
|
||
# cat *
|
||
|
||
0x0
|
||
e2bb9c06-70e9-4b14-97a3-5a7913176e3f
|
||
0
|
||
6
|
||
1
|
||
5
|
||
0
|
||
|
||
.. line-block::
|
||
capsule_flags: 0x0
|
||
fw_class: e2bb9c06-70e9-4b14-97a3-5a7913176e3f
|
||
fw_type: 0
|
||
fw_version: 6
|
||
last_attempt_status: 1
|
||
last_attempt_version: 5
|
||
lowest_supported_fw_ver: 0
|
||
|
||
Linux distros tests
|
||
-------------------
|
||
|
||
*************************************************************
|
||
Debian install and boot preparation (applicable to FPGA only)
|
||
*************************************************************
|
||
|
||
There is a known issue in the `Shim 15.7 <https://salsa.debian.org/efi-team/shim/-/tree/upstream/15.7?ref_type=tags>`__
|
||
provided with the Debian installer image (see below). This bug causes a fatal
|
||
error when attempting to boot media installer for Debian, and it resets the MPS3 before installation starts.
|
||
A patch to be applied to the Corstone-1000 stack (only applicable when
|
||
installing Debian) is provided to
|
||
`Skip the Shim <https://gitlab.arm.com/arm-reference-solutions/systemready-patch/-/blob/CORSTONE1000-2023.06/embedded-a/corstone1000/shim/0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch>`__.
|
||
This patch makes U-Boot automatically bypass the Shim and run grub and allows
|
||
the user to proceed with a normal installation. If at the moment of reading this
|
||
document the problem is solved in the Shim, the user is encouraged to try the
|
||
corresponding new installer image. Otherwise, please apply the patch as
|
||
indicated by the instructions listed below. These instructions assume that the
|
||
user has already built the stack by following the build steps of this
|
||
documentation.
|
||
|
||
::
|
||
|
||
cd <_workspace>
|
||
git clone https://git.gitlab.arm.com/arm-reference-solutions/systemready-patch.git -b CORSTONE1000-2023.06
|
||
cp -f systemready-patch/embedded-a/corstone1000/shim/0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch meta-arm
|
||
cd meta-arm
|
||
git am 0001-arm-bsp-u-boot-corstone1000-Skip-the-shim-by-booting.patch
|
||
cd ..
|
||
kas shell meta-arm/kas/corstone1000-mps3.yml -c="bitbake u-boot trusted-firmware-a corstone1000-image -c cleansstate; bitbake corstone1000-image"
|
||
|
||
Please update the cs1000.bin on the SD card with the newly generated wic file.
|
||
|
||
*************************************************
|
||
Debian/openSUSE install (applicable to FPGA only)
|
||
*************************************************
|
||
|
||
To test Linux distro install and boot, the user should prepare two empty USB
|
||
sticks (minimum size should be 4GB and formatted with FAT32).
|
||
|
||
Download one of following Linux distro images:
|
||
- `Debian 12.0.0 installer image <https://cdimage.debian.org/debian-cd/current/arm64/iso-dvd/debian-12.0.0-arm64-DVD-1.iso>`__
|
||
- `OpenSUSE Tumbleweed installer image <http://download.opensuse.org/ports/aarch64/tumbleweed/iso/>`__
|
||
|
||
**NOTE:** For OpenSUSE Tumbleweed, the user should look for a DVD Snapshot like
|
||
openSUSE-Tumbleweed-DVD-aarch64-Snapshot<date>-Media.iso
|
||
|
||
Once the iso file is downloaded, the iso file needs to be flashed to your USB
|
||
drive. This can be done with your development machine.
|
||
|
||
In the example given below, we assume the USB device is ``/dev/sdb`` (the user
|
||
should use the `lsblk` command to confirm).
|
||
|
||
**NOTE:** Please don't confuse your host PC's own hard drive with the USB drive.
|
||
Then, copy the contents of the iso file into the first USB stick by running the
|
||
following command in the development machine:
|
||
|
||
::
|
||
|
||
sudo dd if=<path-to-iso_file> of=/dev/sdb iflag=direct oflag=direct status=progress bs=1M; sync;
|
||
|
||
Unplug the first USB stick from the development machine and connect it to the
|
||
MSP3 board. At this moment, only the first USB stick should be connected. Open
|
||
the following picocom sessions in your development machine:
|
||
|
||
::
|
||
|
||
sudo picocom -b 115200 /dev/ttyUSB0 # in one terminal
|
||
sudo picocom -b 115200 /dev/ttyUSB2 # in another terminal.
|
||
|
||
When the installation screen is visible in ttyUSB2, plug in the second USB stick
|
||
in the MPS3 and start the distro installation process. If the installer does not
|
||
start, please try to reboot the board with both USB sticks connected and repeat
|
||
the process.
|
||
|
||
**NOTE:** Due to the performance limitation of Corstone-1000 MPS3 FPGA, the
|
||
distro installation process can take up to 24 hours to complete.
|
||
|
||
*******************************************************
|
||
Debian install clarifications (applicable to FPGA only)
|
||
*******************************************************
|
||
|
||
As the installation process for Debian is different than the one for openSUSE,
|
||
Debian may need some extra steps, that are indicated below:
|
||
|
||
During Debian installation, please answer the following question:
|
||
- "Force GRUB installation to the EFI removable media path?" Yes
|
||
- "Update NVRAM variables to automatically boot into Debian?" No
|
||
|
||
If the grub installation fails, these are the steps to follow on the subsequent
|
||
popups:
|
||
|
||
1. Select "Continue", then "Continue" again on the next popup
|
||
2. Scroll down and select "Execute a shell"
|
||
3. Select "Continue"
|
||
4. Enter the following command:
|
||
|
||
::
|
||
|
||
in-target grub-install --no-nvram --force-extra-removable
|
||
|
||
5. Enter the following command:
|
||
|
||
::
|
||
|
||
in-target update-grub
|
||
|
||
6. Enter the following command:
|
||
|
||
::
|
||
|
||
exit
|
||
|
||
7. Select "Continue without boot loader", then select "Continue" on the next popup
|
||
8. At this stage, the installation should proceed as normal.
|
||
|
||
*****************************************************************
|
||
Debian/openSUSE boot after installation (applicable to FPGA only)
|
||
*****************************************************************
|
||
|
||
Once the installation is complete, unplug the first USB stick and reboot the
|
||
board.
|
||
The board will then enter recovery mode, from which the user can access a shell
|
||
after entering the password for the root user. Proceed to edit the following
|
||
files accordingly:
|
||
|
||
::
|
||
|
||
vi /etc/systemd/system.conf
|
||
DefaultDeviceTimeoutSec=infinity
|
||
|
||
The file to be editted next is different depending on the installed distro:
|
||
|
||
::
|
||
|
||
vi /etc/login.defs # Only applicable to Debian
|
||
vi /usr/etc/login.defs # Only applicable to openSUSE
|
||
LOGIN_TIMEOUT 180
|
||
|
||
To make sure the changes are applied, please run:
|
||
|
||
::
|
||
|
||
systemctl daemon-reload
|
||
|
||
After applying the previous commands, please reboot the board. The user should
|
||
see a login prompt after booting, for example, for debian:
|
||
|
||
::
|
||
|
||
debian login:
|
||
|
||
Login with the username root and its corresponding password (already set at
|
||
installation time).
|
||
|
||
************************************************************
|
||
OpenSUSE Raw image install and boot (applicable to FVP only)
|
||
************************************************************
|
||
|
||
Steps to download OpenSUSE Tumbleweed raw image:
|
||
- Under `OpenSUSE Tumbleweed appliances <http://download.opensuse.org/ports/aarch64/tumbleweed/appliances/>`__
|
||
- The user should look for a Tumbleweed-ARM-JeOS-efi.aarch64-* Snapshot, for example,
|
||
``openSUSE-Tumbleweed-ARM-JeOS-efi.aarch64-<date>-Snapshot<date>.raw.xz``
|
||
|
||
Once the .raw.xz file is downloaded, the raw image file needs to be extracted:
|
||
|
||
::
|
||
|
||
unxz <file-name.raw.xz>
|
||
|
||
|
||
The above command will generate a file ending with extension .raw image. Now, use the following command
|
||
to run FVP with raw image installation process.
|
||
|
||
::
|
||
|
||
<_workspace>/meta-arm/scripts/runfvp --terminals=xterm <_workspace>/build/tmp/deploy/images/corstone1000-fvp/corstone1000-image-corstone1000-fvp.fvpconf -- -C board.msd_mmc.p_mmc_file="${openSUSE raw image file path}"
|
||
|
||
After successfully installing and booting the Linux distro, the user should see
|
||
a openSUSE login prompt.
|
||
|
||
::
|
||
|
||
localhost login:
|
||
|
||
Login with the username 'root' and password 'linux'.
|
||
|
||
PSA API tests
|
||
-------------
|
||
|
||
***********************************************************
|
||
Run PSA API test commands (applicable to both FPGA and FVP)
|
||
***********************************************************
|
||
|
||
When running PSA API test commands (aka PSA Arch Tests) on MPS3 FPGA, the user should make sure there is no
|
||
USB stick connected to the board. Power on the board and boot the board to
|
||
Linux. Then, the user should follow the steps below to run the tests.
|
||
|
||
When running the tests on the Corstone-1000 FVP, the user should follow the
|
||
instructions in `Running the software on FVP`_ section to boot Linux in FVP
|
||
host_terminal_0, and login using the username ``root``.
|
||
|
||
First, load FF-A TEE kernel module:
|
||
|
||
::
|
||
|
||
insmod /lib/modules/6.1.32-yocto-standard/extra/arm-ffa-tee.ko
|
||
|
||
Then, check whether the FF-A TEE driver is loaded correctly by using the following command:
|
||
|
||
::
|
||
|
||
cat /proc/modules | grep arm_ffa_tee
|
||
|
||
The output should be:
|
||
|
||
::
|
||
|
||
arm_ffa_tee 16384 - - Live 0xffffffc000510000 (O)
|
||
|
||
Now, run the PSA API tests in the following order:
|
||
|
||
::
|
||
|
||
psa-iat-api-test
|
||
psa-crypto-api-test
|
||
psa-its-api-test
|
||
psa-ps-api-test
|
||
|
||
**NOTE:** The psa-crypto-api-test takes between 30 minutes to 1 hour to run.
|
||
|
||
External System tests
|
||
---------------------
|
||
|
||
**************************************************************
|
||
Running the External System test command (systems-comms-tests)
|
||
**************************************************************
|
||
|
||
Test 1: Releasing the External System out of reset
|
||
==================================================
|
||
|
||
Run this command in the Linux command-line:
|
||
|
||
::
|
||
|
||
systems-comms-tests 1
|
||
|
||
The output on the External System terminal should be:
|
||
|
||
::
|
||
|
||
___ ___
|
||
| / __|
|
||
|=== \___
|
||
|___ |___/
|
||
External System Cortex-M3 Processor
|
||
Running RTX RTOS
|
||
v0.1.0_2022-10-19_16-41-32-8c9dca7
|
||
MHUv2 module 'MHU0_H' started
|
||
MHUv2 module 'MHU1_H' started
|
||
MHUv2 module 'MHU0_SE' started
|
||
MHUv2 module 'MHU1_SE' started
|
||
|
||
Test 2: Communication
|
||
=====================
|
||
|
||
Test 2 releases the External System out of reset if not already done. Then, it performs communication between host and External System.
|
||
|
||
After running Test 1, run this command in the Linux command-line:
|
||
|
||
::
|
||
|
||
systems-comms-tests 2
|
||
|
||
Additional output on the External System terminal will be printed:
|
||
|
||
::
|
||
|
||
MHUv2: Message from 'MHU0_H': 0xabcdef1
|
||
Received 'abcdef1' From Host MHU0
|
||
CMD: Increment and return to sender...
|
||
MHUv2: Message from 'MHU1_H': 0xabcdef1
|
||
Received 'abcdef1' From Host MHU1
|
||
CMD: Increment and return to sender...
|
||
|
||
When running Test 2 the first, Test 1 will be run in the background.
|
||
|
||
The output on the External System terminal should be:
|
||
|
||
::
|
||
|
||
___ ___
|
||
| / __|
|
||
|=== \___
|
||
|___ |___/
|
||
External System Cortex-M3 Processor
|
||
Running RTX RTOS
|
||
v0.1.0_2022-10-19_16-41-32-8c9dca7
|
||
MHUv2 module 'MHU0_H' started
|
||
MHUv2 module 'MHU1_H' started
|
||
MHUv2 module 'MHU0_SE' started
|
||
MHUv2 module 'MHU1_SE' started
|
||
MHUv2: Message from 'MHU0_H': 0xabcdef1
|
||
Received 'abcdef1' From Host MHU0
|
||
CMD: Increment and return to sender...
|
||
MHUv2: Message from 'MHU1_H': 0xabcdef1
|
||
Received 'abcdef1' From Host MHU1
|
||
CMD: Increment and return to sender...
|
||
|
||
The output on the Host terminal should be:
|
||
|
||
::
|
||
|
||
Received abcdf00 from es0mhu0
|
||
Received abcdf00 from es0mhu1
|
||
|
||
|
||
Tests results
|
||
-------------
|
||
|
||
As a reference for the end user, reports for various tests for `Corstone-1000 software (CORSTONE1000-2023.06) <https://git.yoctoproject.org/meta-arm/tag/?h=CORSTONE1000-2023.06>`__
|
||
can be found `here <https://gitlab.arm.com/arm-reference-solutions/arm-reference-solutions-test-report/-/tree/master/embedded-a/corstone1000>`__.
|
||
|
||
Running the software on FVP on Windows
|
||
--------------------------------------
|
||
|
||
If the user needs to run the Corstone-1000 software on FVP on Windows. The user
|
||
should follow the build instructions in this document to build on Linux host
|
||
PC, and copy the output binaries to the Windows PC where the FVP is located,
|
||
and launch the FVP binary.
|
||
|
||
--------------
|
||
|
||
*Copyright (c) 2022-2023, Arm Limited. All rights reserved.*
|
||
|
||
.. _Arm Ecosystem FVPs: https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
|
||
.. _U-Boot repo: https://github.com/u-boot/u-boot.git
|