Skip to content

soc_esp32::app_desc

The ESP-IDF application image header. A chip-boot artifact, not a CPU one – the second-stage bootloader reads it, and the Xtensa core knows nothing about it. ESP-IDF application descriptor.

The ESP-IDF 2nd-stage bootloader (the one espflash bundles) refuses to hand off to an app whose image lacks a valid esp_app_desc_t at flash offset 0x20 — it calls abort() and the chip reset-loops. This is an Espressif-boot-image artifact, so it lives here in the Xtensa arch crate, not in the portable kernel or the declarative board manifests. A different chipset’s arch crate supplies whatever its boot format needs instead.

Placement: the linker puts .rodata_appdesc at the very start of the first loaded segment (DRAM, lowest address), so it lands at image offset 0x20. EXTERN(esp_app_desc) in the linker script forces it past --gc-sections.

struct EspAppDesc {
pub magic_word: u32,
pub secure_version: u32,
pub reserv1: [u32; 2],
pub version: [u8; 32],
pub project_name: [u8; 32],
pub time: [u8; 16],
pub date: [u8; 16],
pub idf_ver: [u8; 32],
pub app_elf_sha256: [u8; 32],
pub reserv2: [u32; 20],
}

Layout matches esp_app_desc_t (256 bytes). The bootloader only strictly validates magic_word; the rest is informational (shown in the boot log).