AM263x MCU+ SDK  10.00.00
Understanding Multicore ELF image format

Note
RPRC format would be deprecated from SDK 11.00 release onwards. MCELF would be the default application format going forward.

Introduction

Multicore ELF, or MCELF is a new application image format different from the existing 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

Note
  • SBLs that supports parsing, loading and authenticating Multicore ELF (MCELF) are different from the one that supports RPRC format.
  • SBLs and application formats are tightly coupled and cannot be used interchangeably. MCELF SBLs support booting only MCELF format images and not RPRC format images. Similarly, RPRC SBLs support booting only RPRC format images and not MCELF format images.
  • SBLs with MCELF support have project names of the form sbl_<bootmode>_multicore_elf . Meanwhile, SBLs that support RPRC boot only have the boot mode specifier like sbl_<bootmode>.
    • For example,
      • sbl_uart is an SBL which only supports booting RPRC application image format.
      • sbl_uart_multicore_elf is an SBL which only supports booting MCELF application image format.

Limitations

  • TI Uniflash tool does not support flashing of .mcelf images currently.
  • XLAT and SSO features are still under development.