AM261x MCU+ SDK: Understanding Multicore ELF image format

| AM261x MCU+ SDK 26.00.00 |

Understanding Multicore ELF image format

Note
  RPRC format has been deprecated from SDK 11.00 release onwards. MCELF is the default application format.

# Introduction

Multicore ELF, or MCELF is a new application image format different from the older RPRC format. Unlike a proprietary format like RPRC, multicore elf is based on the widely recognized ELF (Executable and Linkable format) standard. This ensures seamless compatibility with industry-standard tools and platforms.

For more information on ELF format please refer https://man7.org/linux/man-pages/man5/elf.5.html

# RPRC vs MCELF

Feature | RPRC | Multicore ELF
--- | --- | ---
Generated using TI custom tools | Yes | No proprietary tools in image generation flow
Readable by standard ELF tools | No | Yes
Customizable metadata | Not supported | Supported via PT_NOTE segment
Customizable data segment sizes | Not Supported | Supported
XIP | Supported | Supported
Secure boot time | Slow | Very fast

# Generation of MCELF images

MCELF Image Generation

Legend | Description
--- | ---
C0/C1.. | Individual core ELFs
SSO | Static shared object
ELF H | ELF Header
S0/S2.. | Segment 1,2..
PHT | Program Header Table

- When an application is built, a .out image is built for each core. These are ELF files themselves that contain data as segments within.
- The segments are extracted from the individual files and combined together into a single list.
- These segments represent chunks of data that need to be loaded into the memory when the program is executed.
- A segment contains the following information:
  - Memory address: Address where the segment should be loaded
  - File offset: offset of the segment start from the ELF header
  - Memory size: Size of segment in memory after loading
  - Flags: If segment is of type Read(R)/Write(W)/Execute(X)
- The sizes and order of these new segments can be controlled using suitable arguments to the genimage.py script.
- The first and last segments are the note segments by default. It can be tailored according to the application via the tool.
- Once segment list is fixed, the Program header table is re-written based on the current segments and then the ELF header is regenerated based on updated PHT.
- For more information on the tool refer MCELF Image Gen

# Booting MCELF images

- The SBL parses the image, loads the segments into memory and releases the core from reset. Refer Booting MCELF application.
- To boot mcelf images, SBLs are available with names as sbl_xx_multicore_elf.
- Please refer:
  - SBL CAN Multicore ELF
  - SBL CAN Uniflash Multicore ELF
  - SBL OSPI Multicore ELF
  - SBL OSPI FASTBOOT
  - SBL UART MULTICORE ELF

# Limitations

- XLAT and SSO features are still under development.