mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-17 04:52:59 +01:00
esptool: Allow to pass the partition table CSV.
The partition table of the device in the esp8266 and esp32 based boards was set to a default table with one "factory" partition with exactly the size of the compiled firmware. This is problematic if we want to update the device on the field. This patch allows to set the `PARTITION_TABLE_CSV` variable from the Makefile to a .csv file with a custom partition table, for example this could be set to a partition table with two ota entries, or with a single factory entry but of a known fixed size.
This commit is contained in:
parent
fed2c8e87e
commit
4d40e55edf
@ -9,11 +9,18 @@ BOOTLOADER_BIN = bootloader$(BOOTLOADER_COLOR)$(BOOTLOADER_INFO).bin
|
||||
|
||||
ESPTOOL ?= $(RIOTTOOLS)/esptool/esptool.py
|
||||
|
||||
# The ELFFILE is the base one used for flashing
|
||||
FLASHFILE ?= $(ELFFILE)
|
||||
# The ELFFILE is defined by default in $(RIOTBASE)/Makefile.include but only
|
||||
# after the $(PROGRAMMER).inc.mk file is included, so we need ELFFILE defined
|
||||
# earlier. This is used to create new make rules in this file (based on
|
||||
# FLASHFILE) and can't be deferred.
|
||||
ELFFILE ?= $(BINDIR)/$(APPLICATION).elf
|
||||
FLASHFILE ?= $(ELFFILE).bin
|
||||
|
||||
# Convert .elf to .bin before flashing
|
||||
FLASHDEPS += esp-image-convert
|
||||
# Convert .elf and .csv to .bin files at build time, but make them available for
|
||||
# tests at flash time. These can't be added to FLASHDEPS because they depend on
|
||||
# on ELFFILE and would trigger a rebuild with "flash-only".
|
||||
BUILD_FILES += $(FLASHFILE) $(BINDIR)/partitions.bin
|
||||
TEST_EXTRA_FILES += $(FLASHFILE) $(BINDIR)/partitions.bin
|
||||
|
||||
# flasher configuration
|
||||
ifneq (,$(filter esp_qemu,$(USEMODULE)))
|
||||
@ -28,22 +35,30 @@ else
|
||||
FFLAGS += --flash_mode $(FLASH_MODE) --flash_freq $(FLASH_FREQ)
|
||||
FFLAGS += $(BOOTLOADER_POS) $(RIOTCPU)/$(CPU)/bin/$(BOOTLOADER_BIN)
|
||||
FFLAGS += 0x8000 $(BINDIR)/partitions.bin
|
||||
FFLAGS += 0x10000 $(FLASHFILE).bin
|
||||
FFLAGS += 0x10000 $(FLASHFILE)
|
||||
endif
|
||||
|
||||
.PHONY: esp-image-convert esp-qemu
|
||||
# prepare image to flash: convert .elf to .bin
|
||||
esp-image-convert:
|
||||
# This is the binary that ends up programmed in the flash.
|
||||
$(ELFFILE).bin: $(ELFFILE)
|
||||
$(Q)$(ESPTOOL) --chip $(FLASH_CHIP) elf2image --flash_mode $(FLASH_MODE) \
|
||||
--flash_size $(FLASH_SIZE)MB --flash_freq $(FLASH_FREQ) $(FLASH_OPTS) \
|
||||
-o $(FLASHFILE).bin $(FLASHFILE)
|
||||
-o $@ $<
|
||||
|
||||
# Default partition table with no OTA. Can be replaced with a custom partition
|
||||
# table setting PARTITION_TABLE_CSV.
|
||||
PARTITION_TABLE_CSV ?= $(BINDIR)/partitions.csv
|
||||
|
||||
$(BINDIR)/partitions.csv: $(FLASHFILE)
|
||||
$(Q)printf "\n" > $(BINDIR)/partitions.csv
|
||||
$(Q)printf "nvs, data, nvs, 0x9000, 0x6000\n" >> $(BINDIR)/partitions.csv
|
||||
$(Q)printf "phy_init, data, phy, 0xf000, 0x1000\n" >> $(BINDIR)/partitions.csv
|
||||
$(Q)printf "factory, app, factory, 0x10000, " >> $(BINDIR)/partitions.csv
|
||||
$(Q)ls -l $(FLASHFILE).bin | awk '{ print $$5 }' >> $(BINDIR)/partitions.csv
|
||||
$(Q)python3 $(RIOTTOOLS)/esptool/gen_esp32part.py --verify \
|
||||
$(BINDIR)/partitions.csv $(BINDIR)/partitions.bin
|
||||
$(Q)printf "nvs, data, nvs, 0x9000, 0x6000\n" >> $@
|
||||
$(Q)printf "phy_init, data, phy, 0xf000, 0x1000\n" >> $@
|
||||
$(Q)printf "factory, app, factory, 0x10000, " >> $@
|
||||
$(Q)ls -l $< | awk '{ print $$5 }' >> $@
|
||||
|
||||
$(BINDIR)/partitions.bin: $(PARTITION_TABLE_CSV)
|
||||
$(Q)python3 $(RIOTTOOLS)/esptool/gen_esp32part.py --verify $< $@
|
||||
|
||||
.PHONY: esp-qemu
|
||||
|
||||
esp-qemu:
|
||||
$(Q)dd if=/dev/zero bs=1M count=$(FLASH_SIZE) | \
|
||||
@ -53,7 +68,7 @@ esp-qemu:
|
||||
head -c $$((0x8000)) | \
|
||||
cat - $(BINDIR)/partitions.bin tmp.bin | \
|
||||
head -c $$((0x10000)) | \
|
||||
cat - $(FLASHFILE).bin tmp.bin | \
|
||||
cat - $(FLASHFILE) tmp.bin | \
|
||||
head -c $(FLASH_SIZE)MB > $(BINDIR)/$(CPU)flash.bin && rm tmp.bin
|
||||
ifeq (esp32,$(CPU_FAM))
|
||||
$(Q)cp $(RIOTCPU)/$(CPU)/bin/rom_0x3ff90000_0x00010000.bin $(BINDIR)/rom1.bin
|
||||
|
Loading…
Reference in New Issue
Block a user