Expand
.. code-block:: none
name: bootwrapper.yaml
description: Best choice for: I have a linux-system.axf boot-wrapper and
want to run it.
This config does not build any components (although
shrinkwrap still requires you to build it before running).
Instead the user is expected to provide a boot-wrapper
executable (usually called linux-system.axf) as the
BOOTWRAPPER rtvar, which will be executed in the FVP. A
ROOTFS can be optionally provided. If present it is loaded
into the virtio block device (/dev/vda).
concrete: True
run-time variables: LOCAL_NET_PORT: 8022
BOOTWRAPPER: None
ROOTFS:
--------------------------------------------------------------------------------
name: ns-edk2-acpi.yaml
description: Best choice for: I want to run Linux on FVP, booting with
ACPI, and have easy control over its command line.
Brings together TF-A and EDK2 to provide a simple non-
secure world environment running on FVP. Allows easy
specification of the kernel image and command line, and
rootfs at runtime (see rtvars). ACPI is provided by UEFI.
By default (if not overriding the rtvars) a sensible
command line is used that will set up the console for
logging and attempt to mount the rootfs image from the
FVP's virtio block device. However the default rootfs image
is empty, so the kernel will panic when attempting to
mount; the user must supply a rootfs if it is required that
the kernel completes its boot. No default kernel image is
supplied and the config will refuse to run unless it is
explicitly specified.
Note that by default, a pre-canned flash image is loaded
into the model, which contains UEFI variables directing
EDK2 to boot to the shell. This will cause startup.nsh to
be executed and will start the kernel boot. This way
everything is automatic. By default, all EDK2 output is
muxed to stdout. If you prefer booting UEFI to its UI,
override the EDK2FLASH rtvar with an empty string and
override terminals.'bp.terminal_0'.type to 'telnet'.
concrete: True
run-time variables: LOCAL_NET_PORT: 8022
BL1: ${artifact:BL1}
FIP: ${artifact:FIP}
CMDLINE: console=ttyAMA0
earlycon=pl011,0x1c090000
root=/dev/vda ip=dhcp
KERNEL: None
ROOTFS:
EDK2FLASH: ${artifact:EDK2FLASH}
--------------------------------------------------------------------------------
name: ns-edk2-dt.yaml
description: Best choice for: I want to run Linux on FVP, booting with
device tree, and have easy control over its command line.
Builds on ns-edk2-acpi.yaml, but adds a device tree that is
passed to the kernel to use instead of ACPI. See the
description in that file for details.
An extra rtvar is added (DTB) which allows specification of
a custom device tree. By default (if not overriding the
rtvar), the upstream kernel device tree is used.
concrete: True
run-time variables: LOCAL_NET_PORT: 8022
BL1: ${artifact:BL1}
FIP: ${artifact:FIP}
CMDLINE: console=ttyAMA0
earlycon=pl011,0x1c090000
root=/dev/vda ip=dhcp
KERNEL: None
ROOTFS:
EDK2FLASH: ${artifact:EDK2FLASH}
DTB: ${artifact:DTB}
--------------------------------------------------------------------------------
name: ns-preload.yaml
description: Best choice for: I just want to run Linux on FVP.
A simple, non-secure-only configuration where all
components are preloaded into memory (TF-A's BL31, DTB and
kernel). The system resets directly to BL31. Allows easy
specification of a custom command line at build-time (via
build.dt.params dictionary) and specification of the device
tree, kernel image and rootfs at run-time (see rtvars).
By default (if not overriding the rtvars), the upstream
kernel device tree is used along with a sensible command
line that will set up the console for logging and attempt
to mount the rootfs image from the FVP's virtio block
device. However the default rootfs image is empty, so the
kernel will panic when attempting to mount; the user must
supply a rootfs if it is required that the kernel completes
its boot. No default kernel image is supplied and the
config will refuse to run unless it is explicitly
specified. Note: If specifying a custom dtb at runtime,
this will also override any command line specified at build
time, since the command line is added to the chosen node of
the default dtb.
concrete: True
run-time variables: LOCAL_NET_PORT: 8022
BL31: ${artifact:BL31}
DTB: ${artifact:DTB}
KERNEL: None
ROOTFS:
.. raw:: html
Expand
.. code-block:: none
#!/bin/bash
# SHRINKWRAP AUTOGENERATED SCRIPT.
# Exit on error and echo commands.
set -ex
# Remove old package.
rm -rf
Expand
.. code-block:: none
[ fvp ] terminal_0: Listening for serial connection on port 5000
[ fvp ] terminal_1: Listening for serial connection on port 5001
[ fvp ] terminal_2: Listening for serial connection on port 5002
[ fvp ] terminal_3: Listening for serial connection on port 5003
[ fvp ]
[ fvp ] Info: FVP_Base_RevC_2xAEMvA: FVP_Base_RevC_2xAEMvA.bp.flashloader0: FlashLoader: Loaded 100 kB from file '
Expand
.. code-block:: none
#!/bin/bash
# SHRINKWRAP AUTOGENERATED SCRIPT.
# Exit on error.
set -e
# Execute prerun commands.
SEMIHOSTDIR=`mktemp -d`
function finish { rm -rf $SEMIHOSTDIR; }
trap finish EXIT
cp ./path/to/Image ${SEMIHOSTDIR}/Image
cp
Expand
.. code-block:: none
%YAML 1.2
---
name: ns-edk2-dt
fullname: ns-edk2-dt.yaml
description: 'Best choice for: I want to run Linux on FVP, booting with device tree,
and have easy control over its command line.
Builds on ns-edk2-acpi.yaml, but adds a device tree that is passed to the kernel
to use instead of ACPI. See the description in that file for details.
An extra rtvar is added (DTB) which allows specification of a custom device tree.
By default (if not overriding the rtvar), the upstream kernel device tree is used.'
concrete: true
graph: {}
build:
dt:
repo:
.:
remote: git://git.kernel.org/pub/scm/linux/kernel/git/devicetree/devicetree-rebasing.git
revision: v6.0-dts
sourcedir: null
builddir: null
toolchain: aarch64-none-elf-
params: {}
prebuild:
- DTS_IN=${param:sourcedir}/src/arm64/arm/fvp-base-revc.dts
- DTS_OUT=${param:sourcedir}/src/arm64/arm/fvp-base-revc_args.dts
- if [ -z "${param:join_equal}" ]; then
- cp $$DTS_IN $$DTS_OUT
- else
- ESC_PARAMS=$$(printf '%s\n' "${param:join_equal}" | sed -e 's/[\/&]/\\&/g')
- sed "s/chosen {.*};/chosen { bootargs = \"$$ESC_PARAMS\"; };/g" $$DTS_IN > $$DTS_OUT
- fi
build:
- make CPP=$${CROSS_COMPILE}cpp -j${param:jobs} src/arm64/arm/fvp-base-revc_args.dtb
postbuild: []
clean:
- make CPP=$${CROSS_COMPILE}cpp -j${param:jobs} clean
artifacts:
DTB: ${param:sourcedir}/src/arm64/arm/fvp-base-revc_args.dtb
edk2:
repo:
edk2:
remote: https://github.com/tianocore/edk2.git
revision: edk2-stable202208
edk2-platforms:
remote: https://github.com/tianocore/edk2-platforms.git
revision: ad00518399fc624688d434321693439062c39bde
acpica:
remote: https://github.com/acpica/acpica.git
revision: R03_31_22
sourcedir: null
builddir: null
toolchain: aarch64-none-elf-
params:
-a: AARCH64
-t: GCC5
-p: Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc
-b: RELEASE
prebuild:
- export WORKSPACE=${param:sourcedir}
- export GCC5_AARCH64_PREFIX=$$CROSS_COMPILE
- export PACKAGES_PATH=$$WORKSPACE/edk2:$$WORKSPACE/edk2-platforms
- export IASL_PREFIX=$$WORKSPACE/acpica/generate/unix/bin/
- export PYTHON_COMMAND=/usr/bin/python3
build:
- make -j${param:jobs} -C acpica
- source edk2/edksetup.sh
- make -j${param:jobs} -C edk2/BaseTools
- build -n ${param:jobs} -D EDK2_OUT_DIR=${param:builddir} ${param:join_space}
postbuild: []
clean: []
artifacts:
EDK2: ${param:builddir}/RELEASE_GCC5/FV/FVP_AARCH64_EFI.fd
edk2flash:
repo: {}
sourcedir: null
builddir: null
toolchain: null
params: {}
prebuild: []
build: []
postbuild: []
clean: []
artifacts:
EDK2FLASH: ${param:configdir}/edk2-flash.img
tfa:
repo:
.:
remote: https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
revision: v2.7.0
sourcedir: null
builddir: null
toolchain: aarch64-none-elf-
params:
PLAT: fvp
DEBUG: 0
LOG_LEVEL: 40
ARM_DISABLE_TRUSTED_WDOG: 1
FVP_HW_CONFIG_DTS: fdts/fvp-base-gicv3-psci-1t.dts
BL33: ${artifact:EDK2}
ARM_ARCH_MINOR: 5
ENABLE_SVE_FOR_NS: 1
ENABLE_SVE_FOR_SWD: 1
CTX_INCLUDE_PAUTH_REGS: 1
BRANCH_PROTECTION: 1
CTX_INCLUDE_MTE_REGS: 1
ENABLE_FEAT_HCX: 1
CTX_INCLUDE_AARCH32_REGS: 0
ENABLE_SME_FOR_NS: 1
ENABLE_SME_FOR_SWD: 1
prebuild: []
build:
- make BUILD_BASE=${param:builddir} ${param:join_equal} all fip
postbuild: []
clean:
- make BUILD_BASE=${param:builddir} realclean
artifacts:
BL1: ${param:builddir}/fvp/release/bl1.bin
BL2: ${param:builddir}/fvp/release/bl2.bin
BL31: ${param:builddir}/fvp/release/bl31.bin
FIP: ${param:builddir}/fvp/release/fip.bin
artifacts: {}
run:
name: FVP_Base_RevC-2xAEMvA
rtvars:
LOCAL_NET_PORT:
type: string
value: 8022
BL1:
type: path
value: ${artifact:BL1}
FIP:
type: path
value: ${artifact:FIP}
CMDLINE:
type: string
value: console=ttyAMA0 earlycon=pl011,0x1c090000 root=/dev/vda ip=dhcp
KERNEL:
type: path
value: null
ROOTFS:
type: path
value: ''
EDK2FLASH:
type: path
value: ${artifact:EDK2FLASH}
DTB:
type: path
value: ${artifact:DTB}
params:
-C bp.dram_size: 4
-C cluster0.NUM_CORES: 4
-C cluster1.NUM_CORES: 4
-C cluster0.PA_SIZE: 48
-C cluster1.PA_SIZE: 48
--stat: null
-C bp.vis.disable_visualisation: 1
-C bp.dram_metadata.is_enabled: 1
-C bp.refcounter.non_arch_start_at_default: 1
-C bp.refcounter.use_real_time: 0
-C bp.secure_memory: 1
-C bp.ve_sysregs.exit_on_shutdown: 1
-C pctl.startup: 0.0.0.0
-C cluster0.clear_reg_top_eret: 2
-C cluster1.clear_reg_top_eret: 2
-C bp.smsc_91c111.enabled: 1
-C bp.hostbridge.userNetworking: 1
-C bp.hostbridge.userNetPorts: ${rtvar:LOCAL_NET_PORT}=22
-C cache_state_modelled: 0
-C cluster0.stage12_tlb_size: 1024
-C cluster1.stage12_tlb_size: 1024
-C cluster0.check_memory_attributes: 0
-C cluster1.check_memory_attributes: 0
-C cluster0.gicv3.cpuintf-mmap-access-level: 2
-C cluster1.gicv3.cpuintf-mmap-access-level: 2
-C cluster0.gicv3.without-DS-support: 1
-C cluster1.gicv3.without-DS-support: 1
-C cluster0.gicv4.mask-virtual-interrupt: 1
-C cluster1.gicv4.mask-virtual-interrupt: 1
-C pci.pci_smmuv3.mmu.SMMU_AIDR: 2
-C pci.pci_smmuv3.mmu.SMMU_IDR0: 4592187
-C pci.pci_smmuv3.mmu.SMMU_IDR1: 6291458
-C pci.pci_smmuv3.mmu.SMMU_IDR3: 5908
-C pci.pci_smmuv3.mmu.SMMU_IDR5: 4294902901
-C pci.pci_smmuv3.mmu.SMMU_S_IDR1: 2684354562
-C pci.pci_smmuv3.mmu.SMMU_S_IDR2: 0
-C pci.pci_smmuv3.mmu.SMMU_S_IDR3: 0
-C pci.pci_smmuv3.mmu.SMMU_ROOT_IDR0: 3
-C pci.pci_smmuv3.mmu.SMMU_ROOT_IIDR: 1083
-C pci.pci_smmuv3.mmu.root_register_page_offset: 131072
-C bp.secureflashloader.fname: ${rtvar:BL1}
-C bp.flashloader0.fname: ${rtvar:FIP}
-C bp.virtioblockdevice.image_path: ${rtvar:ROOTFS}
-C cluster0.cpu0.semihosting-cwd: $${SEMIHOSTDIR}
-C bp.flashloader1.fname: ${rtvar:EDK2FLASH}
-C cluster0.has_16k_granule: 1
-C cluster1.has_16k_granule: 1
-C cluster0.has_arm_v8-1: 1
-C cluster1.has_arm_v8-1: 1
-C cluster0.has_large_system_ext: 1
-C cluster1.has_large_system_ext: 1
-C cluster0.has_arm_v8-2: 1
-C cluster1.has_arm_v8-2: 1
-C cluster0.has_large_va: 1
-C cluster1.has_large_va: 1
--plugin: $$(which ScalableVectorExtension.so)
-C cluster0.has_arm_v8-3: 1
-C cluster1.has_arm_v8-3: 1
-C cluster0.has_arm_v8-4: 1
-C cluster1.has_arm_v8-4: 1
-C cluster0.has_amu: 1
-C cluster1.has_amu: 1
-C cluster0.has_arm_v8-5: 1
-C cluster1.has_arm_v8-5: 1
-C cluster0.has_branch_target_exception: 1
-C cluster1.has_branch_target_exception: 1
-C cluster0.has_rndr: 1
-C cluster1.has_rndr: 1
-C cluster0.memory_tagging_support_level: 3
-C cluster1.memory_tagging_support_level: 3
-C cluster0.has_arm_v8-6: 1
-C cluster1.has_arm_v8-6: 1
-C cluster0.ecv_support_level: 2
-C cluster1.ecv_support_level: 2
-C cluster0.enhanced_pac2_level: 3
-C cluster1.enhanced_pac2_level: 3
-C cluster0.has_arm_v8-7: 1
-C cluster1.has_arm_v8-7: 1
-C cluster0.has_arm_v8-8: 1
-C cluster1.has_arm_v8-8: 1
-C cluster0.has_const_pac: 1
-C cluster1.has_const_pac: 1
-C cluster0.has_hpmn0: 1
-C cluster1.has_hpmn0: 1
-C cluster0.pmb_idr_external_abort: 1
-C cluster1.pmb_idr_external_abort: 1
-C cluster0.has_arm_v9-0: 1
-C cluster1.has_arm_v9-0: 1
-C cluster0.max_32bit_el: 0
-C cluster1.max_32bit_el: 0
-C SVE.ScalableVectorExtension.has_sve2: 1
-C cluster0.has_arm_v9-1: 1
-C cluster1.has_arm_v9-1: 1
-C cluster0.has_arm_v9-2: 1
-C cluster1.has_arm_v9-2: 1
-C cluster0.has_brbe: 1
-C cluster1.has_brbe: 1
-C SVE.ScalableVectorExtension.has_sme: 1
-C cluster0.has_arm_v9-3: 1
-C cluster1.has_arm_v9-3: 1
-C cluster0.has_brbe_v1p1: 1
-C cluster1.has_brbe_v1p1: 1
-C SVE.ScalableVectorExtension.has_sme2: 1
prerun:
- SEMIHOSTDIR=`mktemp -d`
- function finish { rm -rf $$SEMIHOSTDIR; }
- trap finish EXIT
- cp ${rtvar:KERNEL} $${SEMIHOSTDIR}/Image
- cat <