Files
PlantCtrl/bootloader/README.md
2025-10-04 01:24:00 +02:00

1.8 KiB
Raw Permalink Blame History

Custom ESP-IDF Bootloader (Rollback Enabled)

This minimal project builds a custom ESP-IDF bootloader with rollback support enabled. You can flash it later alongside a Rust firmware using espflash.

What this provides

  • A minimal ESP-IDF project (CMake) that can build just the bootloader.
  • Rollback support enabled via sdkconfig.defaults (CONFIG_BOOTLOADER_APP_ROLLBACK_ENABLE=y).
  • A sample OTA partition table (partitions.csv) suitable for OTA and rollback (otadata + two OTA slots).
  • A convenience script to build the bootloader for the desired target.

Requirements

  • ESP-IDF installed and set up (IDF_PATH exported, Python env activated).
  • A selected target (esp32, esp32s3, esp32c3, etc.).

Build

  1. Ensure ESP-IDF is set up: source "$IDF_PATH/export.sh"

  2. Pick a target (examples): idf.py set-target esp32

    or use the script:

    ./build_bootloader.sh esp32

  3. Build only the bootloader: idf.py bootloader

    or using the script (which also supports setting target):

    ./build_bootloader.sh esp32

Artifacts

  • build/bootloader/bootloader.bin

Using with espflash (Rust)

  • For a no_std Rust firmware, you can pass this custom bootloader to espflash: espflash flash --bootloader build/bootloader/bootloader.bin
    --partition-table partitions.csv

Notes

  • Rollback logic requires an OTA layout (otadata + at least two OTA app partitions). The provided partitions.csv is a starting point; adjust sizes/offsets to match your needs.
  • This project doesnt build an application; it exists solely to produce a bootloader with the right configuration.
  • If you need different log verbosity or features, run idf.py menuconfig and then diff/port the changes back into sdkconfig.defaults.
  • Targets supported depend on your ESP-IDF version. Use idf.py set-target <chip> or ./build_bootloader.sh <chip>.