Please Note: The code in the "baremetal" directory is only a reference code for implementation of PAL API's and it has not been verified on any model or SoC's. The directory baremetal consists of the reference code of the PAL API's specific to a platform. Description of each directory are as follows:
- base: The implementation for all modules are present in this directory.
- include: Consists of the include files
- src: Source files for all modules which do not require user modification.
Eg: Info tables parsing, PCIe enumeration code, etc.
- target: Contains Platform specific code. The details in this folder need to be modified w.r.t the platform
- <platformname>: Info tables parsing, PCIe enumeration code, etc
- include: Consists of the include files for the platform specific information
- src: Source files for all modules which require user modification.\
Note: .bin stands for either bsa.bin or sbsa.bin or pc_bsa.bin. Any platform specific changes can be done by using
TARGET_BAREMETALmacro definition. The baremetal reference code is located in baremetal.
Run the command
cd sysarch-acspython tools/scripts/generate.py <platformname>
Eg:
python tools/scripts/generate.py RDN2This command will create a folder RDN2 under thepal/targetfolder path and the filespal_bsa.c,pal_sbsa.candpal_exerciser.cfiles within theRDN2/srcfolder.
-
To compile BSA, perform the following steps
1.1cd sysarch-acs
1.2export CROSS_COMPILE=<path_to_the_toolchain>/bin/aarch64-none-elf-
1.3cmake --preset bsa -DTARGET="Target platform"
1.4cmake --build --preset bsa -
To compile SBSA, perform the following steps
2.1cd sysarch-acs
2.2export CROSS_COMPILE=<path_to_the_toolchain>/bin/aarch64-none-elf-
2.3cmake --preset sbsa -DTARGET="Target platform"
2.4cmake --build --preset sbsa -
To compile PC_BSA, perform the following steps
3.1cd sysarch-acs
3.2export CROSS_COMPILE=<path_to_the_toolchain>/bin/aarch64-none-elf-
3.3cmake --preset pc_bsa -DTARGET="Target platform"
3.4cmake --build --preset pc_bsa
Note: You can check available presets using
cmake --list-presetsIf you do not provide-DTARGET, defaults toRDN2.
If you like to use make command docmake --preset acs_all; cd build; make bsa(for all baremetal acsmake acs_all)
Recommended: CMake v3.21 (min version to support --preset), GCC v12.2
CMake Command Line Options:
`-DARM_ARCH_MAJOR` = Arch major version. Default value is 9.
`-DARM_ARCH_MINOR` = Arch minor version. Default value is 0.
`-DCROSS_COMPILE` = Cross compiler path
`-DTARGET` = Target platform. Should be same as folder under baremetal/target/
`-DACS` = To compile <bsa/sbsa/pc_bsa> ACS
On a successful build, *.bin, *.elf, *.img and debug binaries are generated at
build/<acs>_build/outputdirectory. The output library files will be generated atbuild/<acs>_build/tools/cmakedirectory.
1. In RDN2 software stack make following change:
In <rdn2_path>/build-scripts/build-target-bins.sh - replace uefi.bin with acs_latest.bin
if [ "${!tfa_tbbr_enabled}" == "1" ]; then
$TOP_DIR/$TF_A_PATH/tools/cert_create/cert_create \
${cert_tool_param} \
- ${bl33_param_id} ${OUTDIR}/${!uefi_out}/uefi.bin
+ ${bl33_param_id} ${OUTDIR}/${!uefi_out}/acs_latest.bin
fi
${fip_tool} update \
${fip_param} \
- ${bl33_param_id} ${OUTDIR}/${!uefi_out}/uefi.bin \
+ ${bl33_param_id} ${OUTDIR}/${!uefi_out}/acs_latest.bin \
${PLATDIR}/${!target_name}/fip-uefi.bin
2. Repackage the FIP image with this new binary
cp <sysarch-acs>/build/<acs>_build/output/<acs>.bin <rdn2_path>/output/rdn2/components/css-common/acs_latest.bincd <rdn2_path>./build-scripts/rdinfra/build-test-acs.sh -p rdn2 packageexport MODEL=<path_to_FVP_RDN2_model>cd <rdn2>/model-scripts/rdinfra/platforms/rdn2./run_model.sh
For more details on how to port the reference code to a specific platform and for further customisation please refer to the User Guide
Copyright (c) 2023-2025, Arm Limited and Contributors. All rights reserved.