3d5f7b3efd
This is a workaround for the inconsistent device naming pattern implemented in the device driver for Silicon Labs CP2102 USB to UART Bridge Controller. When there are multiple devices installed on one computer, the second and subsequent devices are given a numeric suffix that increments every time one of the devices is plugged in. Thus, unplugging and reinserting a cable causes the device name to change. The workaround is to use the device USB location identifier as an alternative consistent handle for the device, assuming that the cable is plugged into the same jack each time. This workaround does not interfere with using the normal device name as the handle for cases where only one device is used or when the inconsistent naming is not a problem.
101 lines
4.2 KiB
Makefile
101 lines
4.2 KiB
Makefile
# Component support for esptool.py. Doesn't do much by itself,
|
|
# components have their own flash targets that can use these variables.
|
|
|
|
PYTHON ?= $(call dequote,$(CONFIG_PYTHON))
|
|
|
|
ifdef CONFIG_ESPTOOLPY_PORT
|
|
ESPPORT ?= $(shell $(PYTHON) $(IDF_PATH)/tools/findcp2102.py $(CONFIG_ESPTOOLPY_PORT))
|
|
endif
|
|
ESPBAUD ?= $(CONFIG_ESPTOOLPY_BAUD)
|
|
ESPFLASHMODE ?= $(CONFIG_ESPTOOLPY_FLASHMODE)
|
|
ESPFLASHFREQ ?= $(CONFIG_ESPTOOLPY_FLASHFREQ)
|
|
ESPFLASHSIZE ?= $(CONFIG_ESPTOOLPY_FLASHSIZE)
|
|
|
|
CONFIG_ESPTOOLPY_COMPRESSED ?=
|
|
|
|
# two commands that can be used from other components
|
|
# to invoke esptool.py (with or without serial port args)
|
|
#
|
|
ESPTOOLPY_SRC := $(COMPONENT_PATH)/esptool/esptool.py
|
|
ESPTOOLPY := $(PYTHON) $(ESPTOOLPY_SRC) --chip esp32
|
|
ESPTOOLPY_SERIAL := $(ESPTOOLPY) --port $(ESPPORT) --baud $(ESPBAUD) --before $(CONFIG_ESPTOOLPY_BEFORE) --after $(CONFIG_ESPTOOLPY_AFTER)
|
|
|
|
# Supporting esptool command line tools
|
|
ESPEFUSEPY := $(PYTHON) $(COMPONENT_PATH)/esptool/espefuse.py
|
|
ESPSECUREPY := $(PYTHON) $(COMPONENT_PATH)/esptool/espsecure.py
|
|
export ESPSECUREPY # is used in bootloader_support component
|
|
|
|
ESPTOOL_FLASH_OPTIONS := --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ) --flash_size $(ESPFLASHSIZE)
|
|
ifdef CONFIG_ESPTOOLPY_FLASHSIZE_DETECT
|
|
ESPTOOL_WRITE_FLASH_OPTIONS := --flash_mode $(ESPFLASHMODE) --flash_freq $(ESPFLASHFREQ) --flash_size detect
|
|
else
|
|
ESPTOOL_WRITE_FLASH_OPTIONS := $(ESPTOOL_FLASH_OPTIONS)
|
|
endif
|
|
|
|
ESPTOOL_ELF2IMAGE_OPTIONS :=
|
|
|
|
ESPTOOLPY_WRITE_FLASH=$(ESPTOOLPY_SERIAL) write_flash $(if $(CONFIG_ESPTOOLPY_COMPRESSED),-z,-u) $(ESPTOOL_WRITE_FLASH_OPTIONS)
|
|
|
|
ESPTOOL_ALL_FLASH_ARGS += $(CONFIG_APP_OFFSET) $(APP_BIN)
|
|
|
|
ifdef CONFIG_SECURE_BOOT_BUILD_SIGNED_BINARIES
|
|
ifndef IS_BOOTLOADER_BUILD
|
|
# for locally signed secure boot image, add a signing step to get from unsigned app to signed app
|
|
APP_BIN_UNSIGNED := $(APP_BIN:.bin=-unsigned.bin)
|
|
|
|
$(APP_BIN): $(APP_BIN_UNSIGNED) $(SECURE_BOOT_SIGNING_KEY) $(SDKCONFIG_MAKEFILE)
|
|
$(ESPSECUREPY) sign_data --keyfile $(SECURE_BOOT_SIGNING_KEY) -o $@ $<
|
|
endif
|
|
endif
|
|
# non-secure boot (or bootloader), both these files are the same
|
|
APP_BIN_UNSIGNED ?= $(APP_BIN)
|
|
|
|
$(APP_BIN_UNSIGNED): $(APP_ELF) $(ESPTOOLPY_SRC)
|
|
$(ESPTOOLPY) elf2image $(ESPTOOL_FLASH_OPTIONS) $(ESPTOOL_ELF2IMAGE_OPTIONS) -o $@ $<
|
|
|
|
flash: all_binaries $(ESPTOOLPY_SRC) $(call prereq_if_explicit,erase_flash)
|
|
@echo "Flashing binaries to serial port $(ESPPORT) (app at offset $(CONFIG_APP_OFFSET))..."
|
|
ifdef CONFIG_SECURE_BOOT_ENABLED
|
|
@echo "(Secure boot enabled, so bootloader not flashed automatically. See 'make bootloader' output)"
|
|
endif
|
|
$(ESPTOOLPY_WRITE_FLASH) $(ESPTOOL_ALL_FLASH_ARGS)
|
|
|
|
app-flash: $(APP_BIN) $(ESPTOOLPY_SRC) $(call prereq_if_explicit,erase_flash)
|
|
@echo "Flashing app to serial port $(ESPPORT), offset $(CONFIG_APP_OFFSET)..."
|
|
$(ESPTOOLPY_WRITE_FLASH) $(CONFIG_APP_OFFSET) $(APP_BIN)
|
|
|
|
# Submodules normally added in component.mk, but can be added
|
|
# at the project level as long as qualified path
|
|
COMPONENT_SUBMODULES += $(COMPONENT_PATH)/esptool
|
|
|
|
erase_flash:
|
|
@echo "Erasing entire flash..."
|
|
$(ESPTOOLPY_SERIAL) erase_flash
|
|
|
|
MONITORBAUD ?= $(CONFIG_MONITOR_BAUD)
|
|
|
|
MONITOR_PYTHON := $(PYTHON)
|
|
|
|
ifeq ("$(OS)","Windows_NT")
|
|
# miniterm and idf_monitor both need a Windows Console PTY in order
|
|
# to correctly handle user input
|
|
MONITOR_PYTHON := winpty $(PYTHON)
|
|
endif
|
|
|
|
# note: if you want to run miniterm from command line, can simply run
|
|
# miniterm.py on the console. The '$(PYTHON) -m serial.tools.miniterm'
|
|
# is to allow for the $(PYTHON) variable overriding the python path.
|
|
simple_monitor: $(call prereq_if_explicit,%flash)
|
|
$(MONITOR_PYTHON) -m serial.tools.miniterm --rts 0 --dtr 0 --raw $(ESPPORT) $(MONITORBAUD)
|
|
|
|
MONITOR_OPTS := --baud $(MONITORBAUD) --port $(ESPPORT) --toolchain-prefix $(CONFIG_TOOLPREFIX) --make "$(MAKE)"
|
|
|
|
monitor: $(call prereq_if_explicit,%flash)
|
|
$(summary) MONITOR
|
|
[ -f $(APP_ELF) ] || echo "*** 'make monitor' target requires an app to be compiled and flashed first."
|
|
[ -f $(APP_ELF) ] || echo "*** Run 'make flash monitor' to build, flash and monitor"
|
|
[ -f $(APP_ELF) ] || echo "*** Or alternatively 'make simple_monitor' to view the serial port as-is."
|
|
[ -f $(APP_ELF) ] || exit 1
|
|
$(MONITOR_PYTHON) $(IDF_PATH)/tools/idf_monitor.py $(MONITOR_OPTS) $(APP_ELF)
|
|
|
|
.PHONY: erase_flash
|