You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by gu...@apache.org on 2021/09/16 17:15:13 UTC

[incubator-nuttx] 01/02: xtensa/esp32: Enable build system to download or build bins from source

This is an automated email from the ASF dual-hosted git repository.

gustavonihei pushed a commit to branch feature/esp32_build_binaries
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git

commit d6cfcf7dc4c70271a90a9f4d1998ec6f9a7250e3
Author: Gustavo Henrique Nihei <gu...@espressif.com>
AuthorDate: Tue Sep 14 10:41:59 2021 -0300

    xtensa/esp32: Enable build system to download or build bins from source
    
    Signed-off-by: Gustavo Henrique Nihei <gu...@espressif.com>
---
 arch/xtensa/src/esp32/Bootloader.mk | 92 +++++++++++++++++++++++++++++++++++++
 arch/xtensa/src/esp32/Kconfig       | 27 +++++++++++
 arch/xtensa/src/esp32/Make.defs     |  4 ++
 3 files changed, 123 insertions(+)

diff --git a/arch/xtensa/src/esp32/Bootloader.mk b/arch/xtensa/src/esp32/Bootloader.mk
new file mode 100644
index 0000000..1d71a18
--- /dev/null
+++ b/arch/xtensa/src/esp32/Bootloader.mk
@@ -0,0 +1,92 @@
+############################################################################
+# arch/xtensa/src/esp32/Bootloader.mk
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.  The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+ifeq ($(CONFIG_ESP32_BINARIES_BUILD_FROM_SOURCE),y)
+
+BOOTLOADER_SRCDIR   = esp-nuttx-bootloader
+BOOTLOADER_VERSION  = feature/refactor_mcuboot
+BOOTLOADER_URL      = https://github.com/espressif/esp-nuttx-bootloader
+BOOTLOADER_OUTDIR   = out
+ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
+BOOTLOADER_CONFIG   = mcuboot.conf
+endif
+
+$(BOOTLOADER_SRCDIR):
+	$(Q) echo "Downloading Bootloader sources"
+	$(Q) git clone $(BOOTLOADER_URL) chip/$(BOOTLOADER_SRCDIR) -b $(BOOTLOADER_VERSION)
+
+ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
+$(BOOTLOADER_CONFIG):
+	$(Q) echo "Creating Bootloader configuration"
+	$(Q) {                                                                                                  \
+			echo "CONFIG_ESP_BOOTLOADER_SIZE=0xF000";                                                       \
+			echo "CONFIG_ESP_APPLICATION_PRIMARY_START_ADDRESS=$(CONFIG_ESP32_OTA_PRIMARY_SLOT_OFFSET)";    \
+			echo "CONFIG_ESP_APPLICATION_SIZE=$(CONFIG_ESP32_OTA_SLOT_SIZE)";                               \
+			echo "CONFIG_ESP_APPLICATION_SECONDARY_START_ADDRESS=$(CONFIG_ESP32_OTA_SECONDARY_SLOT_OFFSET)";\
+			echo "CONFIG_ESP_MCUBOOT_WDT_ENABLE=y";                                                         \
+			echo "CONFIG_ESP_SCRATCH_OFFSET=$(CONFIG_ESP32_OTA_SCRATCH_OFFSET)";                            \
+			echo "CONFIG_ESP_SCRATCH_SIZE=$(CONFIG_ESP32_OTA_SCRATCH_SIZE)";                                \
+		} > chip/$(BOOTLOADER_CONFIG)
+endif
+
+context:: $(BOOTLOADER_SRCDIR) $(BOOTLOADER_CONFIG)
+	$(Q) echo "Building Bootloader binaries"
+ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
+	$(Q) chip/$(BOOTLOADER_SRCDIR)/build_mcuboot.sh -c esp32 -s -f chip/$(BOOTLOADER_CONFIG)
+	$(call COPYFILE, chip/$(BOOTLOADER_SRCDIR)/$(BOOTLOADER_OUTDIR)/mcuboot-esp32.bin, $(TOPDIR))
+else ifeq ($(CONFIG_ESP32_APP_FORMAT_LEGACY),y)
+	$(Q) docker run --rm --user=$(shell id -u):$(shell id -g) -v $(CURDIR)/chip/$(BOOTLOADER_SRCDIR):/work -w /work espressif/idf:release-v4.3 ./build_idfboot.sh -c esp32
+	$(call COPYFILE, chip/$(BOOTLOADER_SRCDIR)/$(BOOTLOADER_OUTDIR)/bootloader-esp32.bin, $(TOPDIR))
+	$(call COPYFILE, chip/$(BOOTLOADER_SRCDIR)/$(BOOTLOADER_OUTDIR)/partition-table-esp32.bin, $(TOPDIR))
+endif
+
+distclean::
+	$(call DELDIR, chip/$(BOOTLOADER_SRCDIR))
+ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
+	$(call DELFILE, chip/$(BOOTLOADER_CONFIG))
+	$(call DELFILE, $(TOPDIR)/mcuboot-esp32.bin)
+else ifeq ($(CONFIG_ESP32_APP_FORMAT_LEGACY),y)
+	$(call DELFILE, $(TOPDIR)/bootloader-esp32.bin)
+	$(call DELFILE, $(TOPDIR)/partition-table-esp32.bin)
+endif
+
+else ifeq ($(CONFIG_ESP32_BINARIES_DOWNLOAD_PREBUILT),y)
+
+BOOTLOADER_VERSION  = latest
+BOOTLOADER_URL      = https://github.com/espressif/esp-nuttx-bootloader/releases/download/$(BOOTLOADER_VERSION)
+
+context::
+	$(Q) echo "Downloading Bootloader binaries"
+ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
+	$(Q) curl -L $(BOOTLOADER_URL)/mcuboot-esp32.bin -o $(TOPDIR)/mcuboot-esp32.bin
+else ifeq ($(CONFIG_ESP32_APP_FORMAT_LEGACY),y)
+	$(Q) curl -L $(BOOTLOADER_URL)/bootloader-esp32.bin -o $(TOPDIR)/bootloader-esp32.bin
+	$(Q) curl -L $(BOOTLOADER_URL)/partition-table-esp32.bin -o $(TOPDIR)/partition-table-esp32.bin
+endif
+
+distclean::
+ifeq ($(CONFIG_ESP32_APP_FORMAT_MCUBOOT),y)
+	$(call DELFILE, $(TOPDIR)/mcuboot-esp32.bin)
+else ifeq ($(CONFIG_ESP32_APP_FORMAT_LEGACY),y)
+	$(call DELFILE, $(TOPDIR)/bootloader-esp32.bin)
+	$(call DELFILE, $(TOPDIR)/partition-table-esp32.bin)
+endif
+
+endif
\ No newline at end of file
diff --git a/arch/xtensa/src/esp32/Kconfig b/arch/xtensa/src/esp32/Kconfig
index a5ecd7b..90714c6 100644
--- a/arch/xtensa/src/esp32/Kconfig
+++ b/arch/xtensa/src/esp32/Kconfig
@@ -1245,6 +1245,33 @@ comment "MCUboot support depends on CONFIG_EXPERIMENTAL"
 endchoice # Application Image Format
 
 choice
+	prompt "Source for required binaries"
+	default ESP32_BINARIES_USER_PROVIDED
+
+config ESP32_BINARIES_USER_PROVIDED
+	bool "User-provided prebuilt binaries"
+	---help---
+		If ESPTOOL_BINDIR argument is passed to "make download", the user is expected
+		to provide all the required binaries to be downloaded to the chip.
+
+config ESP32_BINARIES_DOWNLOAD_PREBUILT
+	bool "Download prebuilt binaries"
+	---help---
+		The build system will download the prebuilt binaries from
+		https://github.com/espressif/esp-nuttx-bootloader according to the chosen
+		Application Image Format (ESP32_APP_FORMAT_LEGACY or ESP32_APP_FORMAT_MCUBOOT)
+
+config ESP32_BINARIES_BUILD_FROM_SOURCE
+	bool "Build binaries from source"
+	---help---
+		The build system will build all the required binaries from source. It will clone
+		the https://github.com/espressif/esp-nuttx-bootloader repository and build a
+		custom bootloader according to the chosen Application Image Format
+		(ESP32_APP_FORMAT_LEGACY or ESP32_APP_FORMAT_MCUBOOT) and partition information.
+
+endchoice
+
+choice
 	prompt "Target slot for image flashing"
 	default ESP32_ESPTOOL_TARGET_PRIMARY
 	depends on ESP32_HAVE_OTA_PARTITION
diff --git a/arch/xtensa/src/esp32/Make.defs b/arch/xtensa/src/esp32/Make.defs
index d5d1c2f..4f17991 100644
--- a/arch/xtensa/src/esp32/Make.defs
+++ b/arch/xtensa/src/esp32/Make.defs
@@ -236,3 +236,7 @@ EXTRA_LIBS += -lcore -lrtc -lnet80211 -lpp -lsmartconfig -lcoexist -lespnow -lph
 
 LDFLAGS += --gc-sections
 endif
+
+# Provisioning for bootloader-related binary files
+
+include chip/Bootloader.mk