summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ports/esp32/Makefile244
-rw-r--r--ports/esp32/README.md13
-rw-r--r--ports/esp32/boards/sdkconfig26
-rw-r--r--ports/esp32/boards/sdkconfig.spiram27
-rw-r--r--ports/esp32/network_ppp.c2
-rw-r--r--ports/esp32/sdkconfig.h193
6 files changed, 233 insertions, 272 deletions
diff --git a/ports/esp32/Makefile b/ports/esp32/Makefile
index 9e465a935..b3b084bf6 100644
--- a/ports/esp32/Makefile
+++ b/ports/esp32/Makefile
@@ -20,8 +20,14 @@ FLASH_MODE ?= dio
FLASH_FREQ ?= 40m
FLASH_SIZE ?= 4MB
CROSS_COMPILE ?= xtensa-esp32-elf-
+OBJDUMP = $(CROSS_COMPILE)objdump
-ESPIDF_SUPHASH := 30545f4cccec7460634b656d278782dd7151098e
+# SDKCONFIG should be overridden to get a different configuration
+SDKCONFIG ?= boards/sdkconfig
+SDKCONFIG_H = $(BUILD)/sdkconfig.h
+
+# the git hash of the currently supported ESP IDF version
+ESPIDF_SUPHASH := 5c88c5996dbde6208e3bec05abc21ff6cd822d26
# paths to ESP IDF and its components
ifeq ($(ESPIDF),)
@@ -36,6 +42,8 @@ endif
endif
ESPCOMP = $(ESPIDF)/components
ESPTOOL ?= $(ESPCOMP)/esptool_py/esptool/esptool.py
+ESPCOMP_KCONFIGS = $(shell find $(ESPCOMP) -name Kconfig)
+ESPCOMP_KCONFIGS_PROJBUILD = $(shell find $(ESPCOMP) -name Kconfig.projbuild)
# verify the ESP IDF version
ESPIDF_CURHASH := $(shell git -C $(ESPIDF) show -s --pretty=format:'%H')
@@ -51,6 +59,12 @@ endif
# pretty format of ESP IDF version, used internally by the IDF
IDF_VER := $(shell git -C $(ESPIDF) describe)
+# include sdkconfig to get needed configuration values
+include $(SDKCONFIG)
+
+################################################################################
+# Compiler and linker flags
+
INC += -I.
INC += -I$(TOP)
INC += -I$(TOP)/lib/mp-readline
@@ -78,10 +92,12 @@ INC_ESPCOMP += -I$(ESPCOMP)/newlib/platform_include
INC_ESPCOMP += -I$(ESPCOMP)/newlib/include
INC_ESPCOMP += -I$(ESPCOMP)/nvs_flash/include
INC_ESPCOMP += -I$(ESPCOMP)/freertos/include
+INC_ESPCOMP += -I$(ESPCOMP)/esp_ringbuf/include
+INC_ESPCOMP += -I$(ESPCOMP)/esp_event/include
INC_ESPCOMP += -I$(ESPCOMP)/tcpip_adapter/include
-INC_ESPCOMP += -I$(ESPCOMP)/lwip/include/lwip
-INC_ESPCOMP += -I$(ESPCOMP)/lwip/include/lwip/port
-INC_ESPCOMP += -I$(ESPCOMP)/lwip/include/lwip/posix
+INC_ESPCOMP += -I$(ESPCOMP)/lwip/lwip/src/include
+INC_ESPCOMP += -I$(ESPCOMP)/lwip/port/esp32/include
+INC_ESPCOMP += -I$(ESPCOMP)/lwip/include/apps
INC_ESPCOMP += -I$(ESPCOMP)/mbedtls/mbedtls/include
INC_ESPCOMP += -I$(ESPCOMP)/mbedtls/port/include
INC_ESPCOMP += -I$(ESPCOMP)/spi_flash/include
@@ -117,7 +133,7 @@ LDFLAGS += -u call_user_start_cpu0 -u uxTopUsedPriority -u ld_include_panic_high
LDFLAGS += -u __cxa_guard_dummy # so that implementation of static guards is taken from cxx_guards.o instead of libstdc++.a
LDFLAGS += -L$(ESPCOMP)/esp32/ld
LDFLAGS += -T $(BUILD)/esp32_out.ld
-LDFLAGS += -T esp32.common.ld
+LDFLAGS += -T $(BUILD)/esp32.common.ld
LDFLAGS += -T esp32.rom.ld
LDFLAGS += -T esp32.peripherals.ld
@@ -134,9 +150,9 @@ COPT += -Os -DNDEBUG
#LDFLAGS += --gc-sections
endif
-# Enable SPIRAM support if CONFIG_SPIRAM_SUPPORT=1
-ifeq ($(CONFIG_SPIRAM_SUPPORT),1)
-CFLAGS_COMMON += -mfix-esp32-psram-cache-issue -DCONFIG_SPIRAM_SUPPORT=1
+# Enable SPIRAM support if CONFIG_SPIRAM_SUPPORT=y in sdkconfig
+ifeq ($(CONFIG_SPIRAM_SUPPORT),y)
+CFLAGS_COMMON += -mfix-esp32-psram-cache-issue
LIBC_LIBM = $(ESPCOMP)/newlib/lib/libc-psram-workaround.a $(ESPCOMP)/newlib/lib/libm-psram-workaround.a
else
LDFLAGS += -T esp32.rom.spiram_incompatible_fns.ld
@@ -214,6 +230,23 @@ SRC_QSTR += $(SRC_C) $(EXTMOD_SRC_C) $(LIB_SRC_C) $(DRIVERS_SRC_C)
SRC_QSTR_AUTO_DEPS +=
################################################################################
+# Generate sdkconfig.h from sdkconfig
+
+$(SDKCONFIG_H): $(SDKCONFIG)
+ $(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(ESPIDF)/tools/kconfig_new/confgen.py \
+ --output header $@ \
+ --config $< \
+ --kconfig $(ESPIDF)/Kconfig \
+ --env "IDF_TARGET=esp32" \
+ --env "IDF_CMAKE=n" \
+ --env "COMPONENT_KCONFIGS=$(ESPCOMP_KCONFIGS)" \
+ --env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)"
+ $(Q)touch $@
+
+$(HEADER_BUILD)/qstrdefs.generated.h: $(SDKCONFIG_H)
+
+################################################################################
# List of object files from the ESP32 IDF components
ESPIDF_DRIVER_O = $(addprefix $(ESPCOMP)/driver/,\
@@ -230,7 +263,11 @@ ESPIDF_DRIVER_O = $(addprefix $(ESPCOMP)/driver/,\
$(BUILD)/$(ESPCOMP)/esp32/dport_access.o: CFLAGS += -Wno-array-bounds
ESPIDF_ESP32_O = $(addprefix $(ESPCOMP)/esp32/,\
brownout.o \
+ cache_sram_mmu.o \
+ dbg_stubs.o \
+ esp_err_to_name.o \
panic.o \
+ reset_reason.o \
esp_timer.o \
esp_timer_esp32.o \
ets_timer_legacy.o \
@@ -253,6 +290,7 @@ ESPIDF_ESP32_O = $(addprefix $(ESPCOMP)/esp32/,\
system_api.o \
hw_random.o \
phy_init.o \
+ pm_esp32.o \
intr_alloc.o \
dport_access.o \
wifi_init.o \
@@ -262,6 +300,10 @@ ESPIDF_ESP32_O = $(addprefix $(ESPCOMP)/esp32/,\
spiram_psram.o \
)
+ESPIDF_ESP_RINGBUF_O = $(addprefix $(ESPCOMP)/esp_ringbuf/,\
+ ringbuf.o \
+ )
+
ESPIDF_HEAP_O = $(addprefix $(ESPCOMP)/heap/,\
heap_caps.o \
heap_caps_init.o \
@@ -277,6 +319,7 @@ ESPIDF_SOC_O = $(addprefix $(ESPCOMP)/soc/,\
esp32/rtc_pm.o \
esp32/rtc_sleep.o \
esp32/rtc_time.o \
+ esp32/rtc_wdt.o \
esp32/soc_memory_layout.o \
esp32/spi_periph.o \
src/memory_layout_utils.o \
@@ -312,12 +355,12 @@ ESPIDF_PTHREAD_O = $(addprefix $(ESPCOMP)/pthread/,\
# -Os because that generates subtly different code.
# We also need custom CFLAGS for .c files because FreeRTOS has headers with
# generic names (eg queue.h) which can clash with other files in the port.
-CFLAGS_ASM = -I$(ESPCOMP)/esp32/include -I$(ESPCOMP)/soc/esp32/include -I$(ESPCOMP)/freertos/include/freertos -I.
+CFLAGS_ASM = -I$(BUILD) -I$(ESPCOMP)/esp32/include -I$(ESPCOMP)/soc/esp32/include -I$(ESPCOMP)/freertos/include/freertos -I.
$(BUILD)/$(ESPCOMP)/freertos/portasm.o: CFLAGS = $(CFLAGS_ASM)
$(BUILD)/$(ESPCOMP)/freertos/xtensa_context.o: CFLAGS = $(CFLAGS_ASM)
$(BUILD)/$(ESPCOMP)/freertos/xtensa_intr_asm.o: CFLAGS = $(CFLAGS_ASM)
$(BUILD)/$(ESPCOMP)/freertos/xtensa_vectors.o: CFLAGS = $(CFLAGS_ASM)
-$(BUILD)/$(ESPCOMP)/freertos/%.o: CFLAGS = $(CFLAGS_BASE) -I. $(INC_ESPCOMP) -I$(ESPCOMP)/freertos/include/freertos -D_ESP_FREERTOS_INTERNAL
+$(BUILD)/$(ESPCOMP)/freertos/%.o: CFLAGS = $(CFLAGS_BASE) -I. -I$(BUILD) $(INC_ESPCOMP) -I$(ESPCOMP)/freertos/include/freertos -D_ESP_FREERTOS_INTERNAL
ESPIDF_FREERTOS_O = $(addprefix $(ESPCOMP)/freertos/,\
croutine.o \
event_groups.o \
@@ -326,7 +369,6 @@ ESPIDF_FREERTOS_O = $(addprefix $(ESPCOMP)/freertos/,\
portasm.o \
port.o \
queue.o \
- ringbuf.o \
tasks.o \
timers.o \
xtensa_context.o \
@@ -366,6 +408,7 @@ ESPIDF_APP_TRACE_O = $(addprefix $(ESPCOMP)/app_trace/,\
)
ESPIDF_APP_UPDATE_O = $(addprefix $(ESPCOMP)/app_update/,\
+ esp_app_desc.o \
esp_ota_ops.o \
)
@@ -404,6 +447,7 @@ ESPIDF_NGHTTP_O = $(addprefix $(ESPCOMP)/nghttp/,\
)
ESPIDF_NVS_FLASH_O = $(addprefix $(ESPCOMP)/nvs_flash/,\
+ src/nvs_ops.o \
src/nvs_types.o \
src/nvs_page.o \
src/nvs_item_hash_list.o \
@@ -433,69 +477,72 @@ ESPIDF_ULP_O = $(addprefix $(ESPCOMP)/ulp/,\
$(BUILD)/$(ESPCOMP)/lwip/%.o: CFLAGS += -Wno-address -Wno-unused-variable -Wno-unused-but-set-variable
ESPIDF_LWIP_O = $(addprefix $(ESPCOMP)/lwip/,\
- api/pppapi.o \
- api/netbuf.o \
- api/api_lib.o \
- api/netifapi.o \
- api/tcpip.o \
- api/netdb.o \
- api/err.o \
- api/api_msg.o \
- api/sockets.o \
- apps/sntp/sntp.o \
- apps/dhcpserver.o \
- core/ipv4/ip_frag.o \
- core/ipv4/dhcp.o \
- core/ipv4/ip4_addr.o \
- core/ipv4/igmp.o \
- core/ipv4/ip4.o \
- core/ipv4/autoip.o \
- core/ipv4/icmp.o \
- core/ipv6/ip6_frag.o \
- core/ipv6/dhcp6.o \
- core/ipv6/inet6.o \
- core/ipv6/ip6_addr.o \
- core/ipv6/ip6.o \
- core/ipv6/nd6.o \
- core/ipv6/mld6.o \
- core/ipv6/ethip6.o \
- core/ipv6/icmp6.o \
- core/mem.o \
- core/init.o \
- core/memp.o \
- core/sys.o \
- core/tcp_in.o \
- core/dns.o \
- core/ip.o \
- core/pbuf.o \
- core/raw.o \
- core/tcp.o \
- core/def.o \
- core/netif.o \
- core/stats.o \
- core/timers.o \
- core/inet_chksum.o \
- core/udp.o \
- core/tcp_out.o \
- netif/slipif.o \
- netif/etharp.o \
- netif/ethernet.o \
- netif/lowpan6.o \
- netif/ethernetif.o \
- netif/ppp/ppp.o \
- netif/ppp/magic.o \
- netif/ppp/lcp.o \
- netif/ppp/ipcp.o \
- netif/ppp/auth.o \
- netif/ppp/fsm.o \
- netif/ppp/ipv6cp.o \
- netif/ppp/utils.o \
- netif/ppp/vj.o \
- netif/ppp/pppos.o \
- port/freertos/sys_arch.o \
- port/netif/wlanif.o \
- port/netif/ethernetif.o \
- port/vfs_lwip.o \
+ apps/dhcpserver/dhcpserver.o \
+ lwip/src/api/netbuf.o \
+ lwip/src/api/api_lib.o \
+ lwip/src/api/netifapi.o \
+ lwip/src/api/tcpip.o \
+ lwip/src/api/netdb.o \
+ lwip/src/api/err.o \
+ lwip/src/api/api_msg.o \
+ lwip/src/api/sockets.o \
+ lwip/src/apps/sntp/sntp.o \
+ lwip/src/core/ipv4/dhcp.o \
+ lwip/src/core/ipv4/etharp.o \
+ lwip/src/core/ipv4/ip4_addr.o \
+ lwip/src/core/ipv4/igmp.o \
+ lwip/src/core/ipv4/ip4.o \
+ lwip/src/core/ipv4/autoip.o \
+ lwip/src/core/ipv4/icmp.o \
+ lwip/src/core/ipv6/ip6_frag.o \
+ lwip/src/core/ipv6/dhcp6.o \
+ lwip/src/core/ipv6/inet6.o \
+ lwip/src/core/ipv6/ip6_addr.o \
+ lwip/src/core/ipv6/ip6.o \
+ lwip/src/core/ipv6/nd6.o \
+ lwip/src/core/ipv6/mld6.o \
+ lwip/src/core/ipv6/ethip6.o \
+ lwip/src/core/ipv6/icmp6.o \
+ lwip/src/core/mem.o \
+ lwip/src/core/init.o \
+ lwip/src/core/memp.o \
+ lwip/src/core/sys.o \
+ lwip/src/core/tcp_in.o \
+ lwip/src/core/timeouts.o \
+ lwip/src/core/dns.o \
+ lwip/src/core/ip.o \
+ lwip/src/core/pbuf.o \
+ lwip/src/core/raw.o \
+ lwip/src/core/tcp.o \
+ lwip/src/core/def.o \
+ lwip/src/core/netif.o \
+ lwip/src/core/stats.o \
+ lwip/src/core/inet_chksum.o \
+ lwip/src/core/udp.o \
+ lwip/src/core/tcp_out.o \
+ lwip/src/netif/slipif.o \
+ lwip/src/netif/ethernet.o \
+ lwip/src/netif/lowpan6.o \
+ lwip/src/netif/ethernetif.o \
+ lwip/src/netif/ppp/auth.o \
+ lwip/src/netif/ppp/chap-md5.o \
+ lwip/src/netif/ppp/chap-new.o \
+ lwip/src/netif/ppp/fsm.o \
+ lwip/src/netif/ppp/ipcp.o \
+ lwip/src/netif/ppp/ipv6cp.o \
+ lwip/src/netif/ppp/lcp.o \
+ lwip/src/netif/ppp/magic.o \
+ lwip/src/netif/ppp/polarssl/md5.o \
+ lwip/src/netif/ppp/ppp.o \
+ lwip/src/netif/ppp/pppapi.o \
+ lwip/src/netif/ppp/pppos.o \
+ lwip/src/netif/ppp/upap.o \
+ lwip/src/netif/ppp/utils.o \
+ lwip/src/netif/ppp/vj.o \
+ port/esp32/freertos/sys_arch.o \
+ port/esp32/netif/ethernetif.o \
+ port/esp32/netif/wlanif.o \
+ port/esp32/vfs_lwip.o \
)
ESPIDF_MBEDTLS_O = $(addprefix $(ESPCOMP)/mbedtls/,\
@@ -572,6 +619,7 @@ ESPIDF_MBEDTLS_O = $(addprefix $(ESPCOMP)/mbedtls/,\
mbedtls/library/pk_wrap.o \
port/esp_bignum.o \
port/esp_hardware.o \
+ port/esp_mem.o \
port/esp_sha1.o \
port/esp_sha256.o \
port/esp_sha512.o \
@@ -611,6 +659,7 @@ OBJ_ESPIDF =
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_NEWLIB_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_DRIVER_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_ESP32_O))
+OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_ESP_RINGBUF_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_HEAP_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_SOC_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_CXX_O))
@@ -635,9 +684,12 @@ OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_SPI_FLASH_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_ULP_O))
OBJ_ESPIDF += $(addprefix $(BUILD)/, $(ESPIDF_WPA_SUPPLICANT_O))
+$(OBJ_ESPIDF): $(SDKCONFIG_H)
+
LIB_ESPIDF =
LIB_ESPIDF += driver
LIB_ESPIDF += esp32
+LIB_ESPIDF += esp_ringbuf
LIB_ESPIDF += heap
LIB_ESPIDF += soc
LIB_ESPIDF += cxx
@@ -677,6 +729,7 @@ endef
$(eval $(call gen_espidf_lib_rule,driver,$(ESPIDF_DRIVER_O)))
$(eval $(call gen_espidf_lib_rule,esp32,$(ESPIDF_ESP32_O)))
+$(eval $(call gen_espidf_lib_rule,esp_ringbuf,$(ESPIDF_ESP_RINGBUF_O)))
$(eval $(call gen_espidf_lib_rule,heap,$(ESPIDF_HEAP_O)))
$(eval $(call gen_espidf_lib_rule,soc,$(ESPIDF_SOC_O)))
$(eval $(call gen_espidf_lib_rule,cxx,$(ESPIDF_CXX_O)))
@@ -704,6 +757,38 @@ $(eval $(call gen_espidf_lib_rule,wpa_supplicant,$(ESPIDF_WPA_SUPPLICANT_O)))
LIB = $(foreach lib,$(LIB_ESPIDF),$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a)
################################################################################
+# ESP IDF ldgen
+
+LDGEN_FRAGMENTS = $(shell find $(ESPCOMP) -name "*.lf")
+LDGEN_SECTIONS_INFO = $(foreach lib,$(LIB_ESPIDF),$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a.sections_info)
+LDGEN_SECTION_INFOS = $(BUILD_ESPIDF_LIB)/ldgen.section_infos
+
+define gen_sections_info_rule
+$(1).sections_info: $(1)
+ $(ECHO) "GEN $(1).sections_info"
+ $(Q)$(OBJDUMP) -h $(1) > $(1).sections_info
+endef
+
+$(eval $(foreach lib,$(LIB_ESPIDF),$(eval $(call gen_sections_info_rule,$(BUILD_ESPIDF_LIB)/$(lib)/lib$(lib).a))))
+
+$(LDGEN_SECTION_INFOS): $(LDGEN_SECTIONS_INFO) $(ESPIDF)/make/ldgen.mk
+ $(Q)printf "$(foreach info,$(LDGEN_SECTIONS_INFO),$(info)\n)" > $@
+
+$(BUILD)/esp32.common.ld: $(ESPCOMP)/esp32/ld/esp32.common.ld.in $(LDGEN_FRAGMENTS) $(SDKCONFIG) $(LDGEN_SECTION_INFOS)
+ $(ECHO) "GEN $@"
+ $(Q)$(PYTHON) $(ESPIDF)/tools/ldgen/ldgen.py \
+ --input $< \
+ --output $@ \
+ --config $(SDKCONFIG) \
+ --kconfig $(ESPIDF)/Kconfig \
+ --fragments $(LDGEN_FRAGMENTS) \
+ --sections $(LDGEN_SECTION_INFOS) \
+ --env "IDF_TARGET=esp32" \
+ --env "IDF_CMAKE=n" \
+ --env "COMPONENT_KCONFIGS=$(ESPCOMP_KCONFIGS)" \
+ --env "COMPONENT_KCONFIGS_PROJBUILD=$(ESPCOMP_KCONFIGS_PROJBUILD)"
+
+################################################################################
# Main targets
all: $(BUILD)/firmware.bin
@@ -742,14 +827,14 @@ APP_LD_ARGS += $(OBJ)
APP_LD_ARGS += $(LIB)
APP_LD_ARGS += --end-group
-$(BUILD)/esp32_out.ld: sdkconfig.h
- $(Q)$(CC) -I. -C -P -x c -E $(ESPCOMP)/esp32/ld/esp32.ld -o $@
+$(BUILD)/esp32_out.ld: $(SDKCONFIG_H)
+ $(Q)$(CC) -I$(BUILD) -C -P -x c -E $(ESPCOMP)/esp32/ld/esp32.ld -o $@
$(BUILD)/application.bin: $(BUILD)/application.elf
$(ECHO) "Create $@"
$(Q)$(ESPTOOL) --chip esp32 elf2image --flash_mode $(FLASH_MODE) --flash_freq $(FLASH_FREQ) --flash_size $(FLASH_SIZE) $<
-$(BUILD)/application.elf: $(OBJ) $(LIB) $(BUILD)/esp32_out.ld
+$(BUILD)/application.elf: $(OBJ) $(LIB) $(BUILD)/esp32_out.ld $(BUILD)/esp32.common.ld
$(ECHO) "LINK $@"
$(Q)$(LD) $(LDFLAGS) -o $@ $(APP_LD_ARGS)
$(Q)$(SIZE) $@
@@ -830,7 +915,10 @@ $(BOOTLOADER_LIB_DIR)/libmicro-ecc.a: $(BOOTLOADER_LIB_MICRO_ECC_OBJ)
# remaining object files
BOOTLOADER_OBJ = $(addprefix $(BUILD)/bootloader/$(ESPCOMP)/,\
soc/esp32/rtc_clk.o \
+ soc/esp32/rtc_clk_init.o \
+ soc/esp32/rtc_init.o \
soc/esp32/rtc_time.o \
+ soc/esp32/rtc_wdt.o \
soc/esp32/cpu_util.o \
bootloader/subproject/main/bootloader_start.o \
)
@@ -843,6 +931,8 @@ BOOTLOADER_OBJ_ALL = \
$(BOOTLOADER_LIB_MICRO_ECC_OBJ) \
$(BOOTLOADER_OBJ)
+$(BOOTLOADER_OBJ_ALL): $(SDKCONFIG_H)
+
BOOTLOADER_LIBS =
BOOTLOADER_LIBS += -Wl,--start-group
BOOTLOADER_LIBS += $(BOOTLOADER_OBJ)
diff --git a/ports/esp32/README.md b/ports/esp32/README.md
index 85df001e3..0e6531db8 100644
--- a/ports/esp32/README.md
+++ b/ports/esp32/README.md
@@ -78,7 +78,7 @@ ESPIDF = <path to root of esp-idf repository>
#FLASH_MODE = qio
#FLASH_SIZE = 4MB
#CROSS_COMPILE = xtensa-esp32-elf-
-#CONFIG_SPIRAM_SUPPORT = 1
+#SDKCONFIG = boards/sdkconfig.spiram
include Makefile
```
@@ -92,6 +92,17 @@ are `PORT` for the serial port of your esp32 module, and `FLASH_MODE`
(which may need to be `dio` for some modules)
and `FLASH_SIZE`. See the Makefile for further information.
+The default ESP IDF configuration settings are provided in the file
+`boards/sdkconfig`, and this file is specified in the build by the make
+variable `SDKCONFIG`. To use a custom configuration either set `SDKCONFIG`
+in your custom `makefile` (or `GNUmakefile`) or set this variable on the
+command line:
+```bash
+$ make SDKCONFIG=sdkconfig.myboard
+```
+The file `boards/sdkconfig.spiram` is provided for ESP32 modules that have
+external SPIRAM.
+
Building the firmware
---------------------
diff --git a/ports/esp32/boards/sdkconfig b/ports/esp32/boards/sdkconfig
new file mode 100644
index 000000000..f68102bee
--- /dev/null
+++ b/ports/esp32/boards/sdkconfig
@@ -0,0 +1,26 @@
+# MicroPython on ESP32, ESP IDF configuration
+# The following options override the defaults
+
+CONFIG_IDF_TARGET="esp32"
+
+# Application manager
+CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
+CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
+
+# Bootloader config
+CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y
+
+# ESP32-specific
+CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
+CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
+
+# FreeRTOS
+CONFIG_FREERTOS_UNICORE=y
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
+CONFIG_SUPPORT_STATIC_ALLOCATION=y
+CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y
+
+# UDP
+CONFIG_PPP_SUPPORT=y
+CONFIG_PPP_PAP_SUPPORT=y
+CONFIG_PPP_CHAP_SUPPORT=y
diff --git a/ports/esp32/boards/sdkconfig.spiram b/ports/esp32/boards/sdkconfig.spiram
new file mode 100644
index 000000000..63908f4b0
--- /dev/null
+++ b/ports/esp32/boards/sdkconfig.spiram
@@ -0,0 +1,27 @@
+# MicroPython on ESP32, ESP IDF configuration with SPIRAM support
+# The following options override the defaults
+
+CONFIG_IDF_TARGET="esp32"
+
+# Application manager
+CONFIG_APP_EXCLUDE_PROJECT_VER_VAR=y
+CONFIG_APP_EXCLUDE_PROJECT_NAME_VAR=y
+
+# Bootloader config
+CONFIG_LOG_BOOTLOADER_LEVEL_WARN=y
+
+# ESP32-specific
+CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y
+CONFIG_SPIRAM_SUPPORT=y
+CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=n
+
+# FreeRTOS
+CONFIG_FREERTOS_UNICORE=y
+CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS=2
+CONFIG_SUPPORT_STATIC_ALLOCATION=y
+CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK=y
+
+# UDP
+CONFIG_PPP_SUPPORT=y
+CONFIG_PPP_PAP_SUPPORT=y
+CONFIG_PPP_CHAP_SUPPORT=y
diff --git a/ports/esp32/network_ppp.c b/ports/esp32/network_ppp.c
index 27dd5e043..da821478b 100644
--- a/ports/esp32/network_ppp.c
+++ b/ports/esp32/network_ppp.c
@@ -40,7 +40,7 @@
#include "lwip/sys.h"
#include "lwip/netdb.h"
#include "lwip/dns.h"
-#include "lwip/pppapi.h"
+#include "netif/ppp/pppapi.h"
typedef struct _ppp_if_obj_t {
mp_obj_base_t base;
diff --git a/ports/esp32/sdkconfig.h b/ports/esp32/sdkconfig.h
deleted file mode 100644
index ba2930bca..000000000
--- a/ports/esp32/sdkconfig.h
+++ /dev/null
@@ -1,193 +0,0 @@
-/* Start bootloader config */
-#define CONFIG_FLASHMODE_DIO 1
-#define CONFIG_ESPTOOLPY_FLASHFREQ_40M 1
-/* End bootloader config */
-
-#define CONFIG_TRACEMEM_RESERVE_DRAM 0x0
-#define CONFIG_BT_RESERVE_DRAM 0x0
-#define CONFIG_ULP_COPROC_RESERVE_MEM 2040
-#define CONFIG_PHY_DATA_OFFSET 0xf000
-#define CONFIG_APP_OFFSET 0x10000
-
-#define CONFIG_SPI_FLASH_ROM_DRIVER_PATCH 1
-#define CONFIG_FOUR_UNIVERSAL_MAC_ADDRESS 1
-#define CONFIG_NUMBER_OF_UNIVERSAL_MAC_ADDRESS 4
-
-#define CONFIG_BROWNOUT_DET 1
-#define CONFIG_BROWNOUT_DET_LVL 0
-#define CONFIG_BROWNOUT_DET_LVL_SEL_0 1
-
-#define CONFIG_TCPIP_TASK_STACK_SIZE 2560
-#define CONFIG_TCPIP_RECVMBOX_SIZE 32
-
-#define CONFIG_ESP32_APPTRACE_DEST_NONE 1
-#define CONFIG_ESP32_PHY_MAX_TX_POWER 20
-#define CONFIG_ESP32_PANIC_PRINT_REBOOT 1
-#define CONFIG_ESP32_RTC_CLOCK_SOURCE_INTERNAL_RC 1
-#define CONFIG_ESP32_RTC_XTAL_BOOTSTRAP_CYCLES 100
-#define CONFIG_ESP32_TIME_SYSCALL_USE_RTC_FRC1 1
-#define CONFIG_ESP32_DEFAULT_CPU_FREQ_MHZ 240
-#define CONFIG_ESP32_DEFAULT_CPU_FREQ_240 1
-#define CONFIG_ESP32_DEBUG_OCDAWARE 1
-#define CONFIG_ESP32_DEEP_SLEEP_WAKEUP_DELAY 2000
-#define CONFIG_ESP32_ENABLE_COREDUMP_TO_NONE 1
-#define CONFIG_ESP32_PHY_CALIBRATION_AND_DATA_STORAGE 1
-#define CONFIG_ESP32_WIFI_AMPDU_ENABLED 1
-#define CONFIG_ESP32_WIFI_NVS_ENABLED 1
-#define CONFIG_ESP32_WIFI_STATIC_RX_BUFFER_NUM 10
-#define CONFIG_ESP32_WIFI_DYNAMIC_RX_BUFFER_NUM 0
-#define CONFIG_ESP32_WIFI_TX_BUFFER_TYPE 1
-#define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER 1
-#define CONFIG_ESP32_WIFI_DYNAMIC_TX_BUFFER_NUM 32
-#define CONFIG_ESP32_WIFI_RX_BA_WIN 6
-#define CONFIG_ESP32_WIFI_TX_BA_WIN 6
-#define CONFIG_ESP32_XTAL_FREQ_AUTO 1
-#define CONFIG_ESP32_XTAL_FREQ 0
-#define CONFIG_ESP32_RTC_CLK_CAL_CYCLES 1024
-#define CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT 5
-#define CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT 2048
-
-#if CONFIG_SPIRAM_SUPPORT
-#define CONFIG_SPIRAM_TYPE_ESPPSRAM32 1
-#define CONFIG_SPIRAM_SIZE 4194304
-#define CONFIG_SPIRAM_SPEED_40M 1
-#define CONFIG_SPIRAM_CACHE_WORKAROUND 1
-#define CONFIG_SPIRAM_MALLOC_ALWAYSINTERNAL 16384
-#define CONFIG_SPIRAM_BOOT_INIT 1
-#define CONFIG_SPIRAM_MEMTEST 1
-#define CONFIG_SPIRAM_USE_MALLOC 1
-#define CONFIG_SPIRAM_MALLOC_RESERVE_INTERNAL 32768
-#define CONFIG_SPIRAM_ALLOW_STACK_EXTERNAL_MEMORY 0
-#endif
-
-#define CONFIG_FOUR_MAC_ADDRESS_FROM_EFUSE 1
-#define CONFIG_DMA_RX_BUF_NUM 10
-#define CONFIG_DMA_TX_BUF_NUM 10
-#define CONFIG_EMAC_TASK_PRIORITY 20
-
-#define CONFIG_INT_WDT 1
-#define CONFIG_INT_WDT_TIMEOUT_MS 300
-#define CONFIG_INT_WDT_CHECK_CPU1 0
-#define CONFIG_TASK_WDT 1
-#define CONFIG_TASK_WDT_PANIC 1
-#define CONFIG_TASK_WDT_TIMEOUT_S 5
-#define CONFIG_TASK_WDT_CHECK_IDLE_TASK 0
-#define CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1 0
-
-#define CONFIG_FREERTOS_UNICORE 1
-#define CONFIG_FREERTOS_CORETIMER_0 1
-#define CONFIG_FREERTOS_HZ 100
-#define CONFIG_FREERTOS_ASSERT_FAIL_ABORT 1
-#define CONFIG_FREERTOS_ASSERT_ON_UNTESTED_FUNCTION 1
-#define CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE 1
-#define CONFIG_FREERTOS_THREAD_LOCAL_STORAGE_POINTERS 2
-#define CONFIG_FREERTOS_IDLE_TASK_STACKSIZE 1024
-#define CONFIG_FREERTOS_ISR_STACKSIZE 1536
-#define CONFIG_FREERTOS_BREAK_ON_SCHEDULER_START_JTAG 1
-#define CONFIG_FREERTOS_MAX_TASK_NAME_LEN 16
-#define CONFIG_SUPPORT_STATIC_ALLOCATION 1
-#define CONFIG_ENABLE_STATIC_TASK_CLEAN_UP_HOOK 1
-
-#define CONFIG_MAIN_TASK_STACK_SIZE 4096
-#define CONFIG_IPC_TASK_STACK_SIZE 1024
-#define CONFIG_BTC_TASK_STACK_SIZE 3072
-#define CONFIG_SYSTEM_EVENT_TASK_STACK_SIZE 4096
-#define CONFIG_SYSTEM_EVENT_QUEUE_SIZE 32
-#define CONFIG_TIMER_TASK_STACK_SIZE 4096
-#define CONFIG_TIMER_TASK_PRIORITY 1
-#define CONFIG_TIMER_TASK_STACK_DEPTH 2048
-#define CONFIG_TIMER_QUEUE_LENGTH 10
-
-#define CONFIG_NEWLIB_STDIN_LINE_ENDING_CR 1
-#define CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF 1
-#define CONFIG_PHY_ENABLED 1
-#define CONFIG_WIFI_ENABLED 1
-#define CONFIG_OPTIMIZATION_LEVEL_DEBUG 1
-#define CONFIG_MEMMAP_SMP 1
-
-#define CONFIG_PARTITION_TABLE_OFFSET 0x8000
-#define CONFIG_PARTITION_TABLE_SINGLE_APP 1
-#define CONFIG_PARTITION_TABLE_FILENAME "partitions_singleapp.csv"
-#define CONFIG_PARTITION_TABLE_CUSTOM_APP_BIN_OFFSET 0x10000
-#define CONFIG_PARTITION_TABLE_CUSTOM_FILENAME "partitions.csv"
-
-#define CONFIG_CONSOLE_UART_BAUDRATE 115200
-#define CONFIG_CONSOLE_UART_NUM 0
-#define CONFIG_CONSOLE_UART_DEFAULT 1
-
-#define CONFIG_LOG_DEFAULT_LEVEL_INFO 1
-#define CONFIG_LOG_BOOTLOADER_LEVEL_WARN 1
-#define CONFIG_LOG_DEFAULT_LEVEL 3
-#define CONFIG_LOG_COLORS 1
-#define CONFIG_LOG_BOOTLOADER_LEVEL 2
-
-#define CONFIG_LWIP_THREAD_LOCAL_STORAGE_INDEX 0
-#define CONFIG_LWIP_DHCP_DOES_ARP_CHECK 1
-#define CONFIG_LWIP_DHCP_MAX_NTP_SERVERS 1
-#define CONFIG_LWIP_DHCPS_LEASE_UNIT 60
-#define CONFIG_LWIP_DHCPS_MAX_STATION_NUM 8
-#define CONFIG_LWIP_MAX_ACTIVE_TCP 16
-#define CONFIG_LWIP_MAX_SOCKETS 8
-#define CONFIG_LWIP_SO_REUSE 1
-#define CONFIG_LWIP_ETHARP_TRUST_IP_MAC 1
-#define CONFIG_PPP_SUPPORT 1
-#define CONFIG_IP_LOST_TIMER_INTERVAL 120
-#define CONFIG_UDP_RECVMBOX_SIZE 6
-#define CONFIG_TCP_MAXRTX 12
-#define CONFIG_TCP_SYNMAXRTX 6
-#define CONFIG_TCP_MSL 60000
-#define CONFIG_TCP_MSS 1436
-#define CONFIG_TCP_SND_BUF_DEFAULT 5744
-#define CONFIG_TCP_WND_DEFAULT 5744
-#define CONFIG_TCP_QUEUE_OOSEQ 1
-#define CONFIG_TCP_OVERSIZE_MSS 1
-#define CONFIG_TCP_RECVMBOX_SIZE 6
-
-#define CONFIG_MBEDTLS_AES_C 1
-#define CONFIG_MBEDTLS_CCM_C 1
-#define CONFIG_MBEDTLS_ECDH_C 1
-#define CONFIG_MBEDTLS_ECDSA_C 1
-#define CONFIG_MBEDTLS_ECP_C 1
-#define CONFIG_MBEDTLS_ECP_DP_BP256R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_BP384R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_BP512R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_CURVE25519_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP192K1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP192R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP224K1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP224R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP256K1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP256R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP384R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_DP_SECP521R1_ENABLED 1
-#define CONFIG_MBEDTLS_ECP_NIST_OPTIM 1
-#define CONFIG_MBEDTLS_GCM_C 1
-#define CONFIG_MBEDTLS_HARDWARE_AES 1
-#define CONFIG_MBEDTLS_HAVE_TIME 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_DHE_RSA 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDHE_RSA 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_ECDH_RSA 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_ELLIPTIC_CURVE 1
-#define CONFIG_MBEDTLS_KEY_EXCHANGE_RSA 1
-#define CONFIG_MBEDTLS_PEM_PARSE_C 1
-#define CONFIG_MBEDTLS_PEM_WRITE_C 1
-#define CONFIG_MBEDTLS_RC4_DISABLED 1
-#define CONFIG_MBEDTLS_SSL_ALPN 1
-#define CONFIG_MBEDTLS_SSL_MAX_CONTENT_LEN 16384
-#define CONFIG_MBEDTLS_SSL_PROTO_TLS1 1
-#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_1 1
-#define CONFIG_MBEDTLS_SSL_PROTO_TLS1_2 1
-#define CONFIG_MBEDTLS_SSL_RENEGOTIATION 1
-#define CONFIG_MBEDTLS_SSL_SESSION_TICKETS 1
-#define CONFIG_MBEDTLS_TLS_CLIENT 1
-#define CONFIG_MBEDTLS_TLS_ENABLED 1
-#define CONFIG_MBEDTLS_TLS_SERVER 1
-#define CONFIG_MBEDTLS_TLS_SERVER_AND_CLIENT 1
-#define CONFIG_MBEDTLS_X509_CRL_PARSE_C 1
-#define CONFIG_MBEDTLS_X509_CSR_PARSE_C 1
-
-#define CONFIG_MAKE_WARN_UNDEFINED_VARIABLES 1
-#define CONFIG_TOOLPREFIX "xtensa-esp32-elf-"
-#define CONFIG_PYTHON "python2"