Extended Manifest

The extended manifest is a place to store build-time known firmware metadata such as the firmware version or a used compiler description. Given that information is read on the host side before firmware startup, this is especially important for ABI compatibility checks. This part of the output binary is located as a first structure in the binary file and it is skipped in the DSP loading routine; so, the attached information does not affect DSP memory.

Build flow

@startuml

title Extended manifest build flow

class firmware_elf_file << (F, orchid) >> {
   suffix:
   -- Content --
   +FW metadata section
   +other sections
}

rectangle rimage {
   class ext_man_write {
      1. Create .ri.xman file
      2. Find elf file with .fw_metadata section
      3. Read .fw_metadata section
      4. Build ext_man_header
      5. Validate sum of elements size with section size
      6. Save output to .ri.xman file
   }
}

class ext_man_file << (F, orchid) >> {
   suffix: .ri.xman
   -- Content --
   + ext_man_header
   + .fw_metadata section content
}

firmware_elf_file -down-> ext_man_write
ext_man_write -down-> ext_man_file

@enduml

Figure 139 Extended manifest generation

Add a new element

To add a new element to the extended manifest, do the following:

  1. Add a new element definition in the ext_manifest.h file located in the firmware and driver repository.

  2. Add a new element declaration in the ext_manifest.c file located in the firmware repository.

  3. Add a new element handling routine in the driver repository: sound/soc/sof/loader.c:snd_sof_fw_ext_man_parse()