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

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

commit afad13dfaadb734c2e18edb968a02b29340a01ad
Author: Gustavo Henrique Nihei <[email protected]>
AuthorDate: Tue Feb 2 19:08:54 2021 -0300

    esp32: Refactor QEMU image generation on POSTBUILD
---
 boards/xtensa/esp32/common/Kconfig                 |  6 +++
 boards/xtensa/esp32/esp32-devkitc/Kconfig          |  6 +--
 .../xtensa/esp32/esp32-devkitc/scripts/Config.mk   | 20 +++-----
 boards/xtensa/esp32/esp32-ethernet-kit/Kconfig     |  6 +--
 .../esp32/esp32-ethernet-kit/scripts/Config.mk     | 20 +++-----
 boards/xtensa/esp32/esp32-wrover-kit/Kconfig       |  6 +--
 .../esp32/esp32-wrover-kit/scripts/Config.mk       | 20 +++-----
 tools/esp32/mk_qemu_img.sh                         | 60 ++++++++++++++++++++++
 8 files changed, 93 insertions(+), 51 deletions(-)

diff --git a/boards/xtensa/esp32/common/Kconfig 
b/boards/xtensa/esp32/common/Kconfig
index f72f3c0..334b83c 100644
--- a/boards/xtensa/esp32/common/Kconfig
+++ b/boards/xtensa/esp32/common/Kconfig
@@ -2,3 +2,9 @@
 # For a description of the syntax of this configuration file,
 # see the file kconfig-language.txt in the NuttX tools repository.
 #
+
+config ESP32_QEMU_IMAGE
+       bool "ESP32 binary image for QEMU"
+       default n
+       ---help---
+               Create a binary flash image used for QEMU.
diff --git a/boards/xtensa/esp32/esp32-devkitc/Kconfig 
b/boards/xtensa/esp32/esp32-devkitc/Kconfig
index 84eff9f..48006c6 100644
--- a/boards/xtensa/esp32/esp32-devkitc/Kconfig
+++ b/boards/xtensa/esp32/esp32-devkitc/Kconfig
@@ -38,11 +38,7 @@ config ESP32_DEVKITC_RUN_IRAM
                allows interoperability with the esp-idf system but makes you
                reliant on the esp-idf design for these parts. Both are 
possible.
 
-config ESP32_DEVKITC_FLASH_IMAGE
-       bool "esp32 flash image"
-       default n
-       ---help---
-               Create flash_image.bin mainly used for QEMU.
+source boards/xtensa/esp32/common/Kconfig
 
 choice
   prompt "SPIFLASH File System"
diff --git a/boards/xtensa/esp32/esp32-devkitc/scripts/Config.mk 
b/boards/xtensa/esp32/esp32-devkitc/scripts/Config.mk
index 8b74d41..9ba9717 100644
--- a/boards/xtensa/esp32/esp32-devkitc/scripts/Config.mk
+++ b/boards/xtensa/esp32/esp32-devkitc/scripts/Config.mk
@@ -32,10 +32,15 @@ else
        
PARTITION_TABLE=$(IDF_PATH)/hello_world/build/partition_table/partition-table.bin
 endif
 
-ifeq ($(CONFIG_ESP32_DEVKITC_FLASH_IMAGE),y)
+ifeq ($(CONFIG_ESP32_QEMU_IMAGE),y)
+       MK_QEMU_IMG=$(TOPDIR)/tools/esp32/mk_qemu_img.sh $(BOOTLOADER) 
$(PARTITION_TABLE) $(NUTTXNAME)
+else
+       MK_QEMU_IMG=
+endif
+
 define POSTBUILD
        @echo "MKIMAGE: ESP32 binary"
-        $(Q) if ! esptool.py version ; then \
+       $(Q) if ! esptool.py version ; then \
                echo ""; \
                echo "Please install ESP-IDF tools"; \
                echo ""; \
@@ -48,15 +53,6 @@ define POSTBUILD
                echo "Generating: $(NUTTXNAME).bin (ESP32 compatible)"; \
                esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 
4MB -o $(NUTTXNAME).bin nuttx; \
                echo "Generated: $(NUTTXNAME).bin (ESP32 compatible)"; \
-               echo "Generating: flash_image.bin"; \
-               echo "  Bootloader: $(BOOTLOADER)"; \
-               echo "  Parition Table: $(PARTITION_TABLE)"; \
-               dd if=/dev/zero bs=1024 count=4096 of=flash_image.bin && \
-               dd if=$(BOOTLOADER) bs=1 seek=$(shell printf "%d" 0x1000) 
of=flash_image.bin conv=notrunc && \
-               dd if=$(PARTITION_TABLE) bs=1 seek=$(shell printf "%d" 0x8000) 
of=flash_image.bin conv=notrunc && \
-               dd if=$(NUTTXNAME).bin bs=1 seek=$(shell printf "%d" 0x10000) 
of=flash_image.bin conv=notrunc && \
-               echo "Generated: flash_image.bin (it can be run with 
'qemu-system-xtensa -nographic -machine esp32 -drive 
file=flash_image.bin,if=mtd,format=raw')"; \
-               echo "flash_image.bin" >> $(NUTTXNAME).manifest; \
        fi
+       $(MK_QEMU_IMG)
 endef
-endif
diff --git a/boards/xtensa/esp32/esp32-ethernet-kit/Kconfig 
b/boards/xtensa/esp32/esp32-ethernet-kit/Kconfig
index 8605747..6b4f996 100644
--- a/boards/xtensa/esp32/esp32-ethernet-kit/Kconfig
+++ b/boards/xtensa/esp32/esp32-ethernet-kit/Kconfig
@@ -38,10 +38,6 @@ config ESP32_ETHERNETKIT_RUN_IRAM
                allows interoperability with the esp-idf system but makes you
                reliant on the esp-idf design for these parts. Both are 
possible.
 
-config ESP32_ETHERNETKIT_FLASH_IMAGE
-       bool "esp32 flash image"
-       default n
-       ---help---
-               Create flash_image.bin mainly used for QEMU.
+source boards/xtensa/esp32/common/Kconfig
 
 endif # ARCH_BOARD_ESP32_ETHERNETKIT
diff --git a/boards/xtensa/esp32/esp32-ethernet-kit/scripts/Config.mk 
b/boards/xtensa/esp32/esp32-ethernet-kit/scripts/Config.mk
index 11397d9..6891b49 100644
--- a/boards/xtensa/esp32/esp32-ethernet-kit/scripts/Config.mk
+++ b/boards/xtensa/esp32/esp32-ethernet-kit/scripts/Config.mk
@@ -32,10 +32,15 @@ else
        
PARTITION_TABLE=$(IDF_PATH)/hello_world/build/partition_table/partition-table.bin
 endif
 
-ifeq ($(CONFIG_ESP32_ETHERNETKIT_FLASH_IMAGE),y)
+ifeq ($(CONFIG_ESP32_QEMU_IMAGE),y)
+       MK_QEMU_IMG=$(TOPDIR)/tools/esp32/mk_qemu_img.sh $(BOOTLOADER) 
$(PARTITION_TABLE) $(NUTTXNAME)
+else
+       MK_QEMU_IMG=
+endif
+
 define POSTBUILD
        @echo "MKIMAGE: ESP32 binary"
-        $(Q) if ! esptool.py version ; then \
+       $(Q) if ! esptool.py version ; then \
                echo ""; \
                echo "Please install ESP-IDF tools"; \
                echo ""; \
@@ -48,15 +53,6 @@ define POSTBUILD
                echo "Generating: $(NUTTXNAME).bin (ESP32 compatible)"; \
                esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 
4MB -o $(NUTTXNAME).bin nuttx; \
                echo "Generated: $(NUTTXNAME).bin (ESP32 compatible)"; \
-               echo "Generating: flash_image.bin"; \
-               echo "  Bootloader: $(BOOTLOADER)"; \
-               echo "  Parition Table: $(PARTITION_TABLE)"; \
-               dd if=/dev/zero bs=1024 count=4096 of=flash_image.bin && \
-               dd if=$(BOOTLOADER) bs=1 seek=$(shell printf "%d" 0x1000) 
of=flash_image.bin conv=notrunc && \
-               dd if=$(PARTITION_TABLE) bs=1 seek=$(shell printf "%d" 0x8000) 
of=flash_image.bin conv=notrunc && \
-               dd if=$(NUTTXNAME).bin bs=1 seek=$(shell printf "%d" 0x10000) 
of=flash_image.bin conv=notrunc && \
-               echo "Generated: flash_image.bin (it can be run with 
'qemu-system-xtensa -nographic -machine esp32 -drive 
file=flash_image.bin,if=mtd,format=raw')"; \
-               echo "flash_image.bin" >> $(NUTTXNAME).manifest; \
        fi
+       $(MK_QEMU_IMG)
 endef
-endif
diff --git a/boards/xtensa/esp32/esp32-wrover-kit/Kconfig 
b/boards/xtensa/esp32/esp32-wrover-kit/Kconfig
index a06be3c..6e16fb8 100644
--- a/boards/xtensa/esp32/esp32-wrover-kit/Kconfig
+++ b/boards/xtensa/esp32/esp32-wrover-kit/Kconfig
@@ -38,10 +38,6 @@ config ESP32_WROVERKIT_RUN_IRAM
                allows interoperability with the esp-idf system but makes you
                reliant on the esp-idf design for these parts. Both are 
possible.
 
-config ESP32_WROVERKIT_FLASH_IMAGE
-       bool "esp32 flash image"
-       default n
-       ---help---
-               Create flash_image.bin mainly used for QEMU.
+source boards/xtensa/esp32/common/Kconfig
 
 endif # ARCH_BOARD_ESP32_WROVERKIT
diff --git a/boards/xtensa/esp32/esp32-wrover-kit/scripts/Config.mk 
b/boards/xtensa/esp32/esp32-wrover-kit/scripts/Config.mk
index cec7497..428c35f 100644
--- a/boards/xtensa/esp32/esp32-wrover-kit/scripts/Config.mk
+++ b/boards/xtensa/esp32/esp32-wrover-kit/scripts/Config.mk
@@ -32,10 +32,15 @@ else
        
PARTITION_TABLE=$(IDF_PATH)/hello_world/build/partition_table/partition-table.bin
 endif
 
-ifeq ($(CONFIG_ESP32_WROVERKIT_FLASH_IMAGE),y)
+ifeq ($(CONFIG_ESP32_QEMU_IMAGE),y)
+       MK_QEMU_IMG=$(TOPDIR)/tools/esp32/mk_qemu_img.sh $(BOOTLOADER) 
$(PARTITION_TABLE) $(NUTTXNAME)
+else
+       MK_QEMU_IMG=
+endif
+
 define POSTBUILD
        @echo "MKIMAGE: ESP32 binary"
-        $(Q) if ! esptool.py version ; then \
+       $(Q) if ! esptool.py version ; then \
                echo ""; \
                echo "Please install ESP-IDF tools"; \
                echo ""; \
@@ -48,15 +53,6 @@ define POSTBUILD
                echo "Generating: $(NUTTXNAME).bin (ESP32 compatible)"; \
                esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 
4MB -o $(NUTTXNAME).bin nuttx; \
                echo "Generated: $(NUTTXNAME).bin (ESP32 compatible)"; \
-               echo "Generating: flash_image.bin"; \
-               echo "  Bootloader: $(BOOTLOADER)"; \
-               echo "  Parition Table: $(PARTITION_TABLE)"; \
-               dd if=/dev/zero bs=1024 count=4096 of=flash_image.bin && \
-               dd if=$(BOOTLOADER) bs=1 seek=$(shell printf "%d" 0x1000) 
of=flash_image.bin conv=notrunc && \
-               dd if=$(PARTITION_TABLE) bs=1 seek=$(shell printf "%d" 0x8000) 
of=flash_image.bin conv=notrunc && \
-               dd if=$(NUTTXNAME).bin bs=1 seek=$(shell printf "%d" 0x10000) 
of=flash_image.bin conv=notrunc && \
-               echo "Generated: flash_image.bin (it can be run with 
'qemu-system-xtensa -nographic -machine esp32 -drive 
file=flash_image.bin,if=mtd,format=raw')"; \
-               echo "flash_image.bin" >> $(NUTTXNAME).manifest; \
        fi
+       $(MK_QEMU_IMG)
 endef
-endif
diff --git a/tools/esp32/mk_qemu_img.sh b/tools/esp32/mk_qemu_img.sh
new file mode 100755
index 0000000..2e81360
--- /dev/null
+++ b/tools/esp32/mk_qemu_img.sh
@@ -0,0 +1,60 @@
+#!/usr/bin/env bash
+############################################################################
+# tools/esp32/mk_qemu_img.sh
+#
+# 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.
+#
+############################################################################
+
+SCRIPT_NAME=$(basename "${0}")
+USAGE="USAGE: ${SCRIPT_NAME} <bootloader_img> <partition_table_img> 
[nuttx_name]"
+
+# Make sure we have the required argument(s)
+
+if [ -z "${1}" ] || [ -z "${2}" ] ; then
+  printf "%s requires the bootloader and partition table binary images.\n " 
"${SCRIPT_NAME}"
+  printf "%s\n " "${USAGE}"
+  exit 1
+fi
+
+BOOTLOADER=${1}
+PARTITION_TABLE=${2}
+NUTTXNAME=${3}
+
+if [ -z "${NUTTXNAME}" ]; then
+  NUTTXNAME="nuttx"
+  printf "NUTTXNAME not provided, assuming \"%s\".\n" "${NUTTXNAME}"
+fi
+
+printf "Generating esp32_qemu_image.bin...\n"
+printf "\tBootloader: %s\n" "${BOOTLOADER}"
+printf "\tPartition Table: %s\n" "${PARTITION_TABLE}"
+
+dd if=/dev/zero bs=1024 count=4096 of=esp32_qemu_image.bin && \
+  dd if="${BOOTLOADER}" bs=1 seek="$(printf '%d' 0x1000)" 
of=esp32_qemu_image.bin conv=notrunc && \
+  dd if="${PARTITION_TABLE}" bs=1 seek="$(printf '%d' 0x8000)" 
of=esp32_qemu_image.bin conv=notrunc && \
+  dd if="${NUTTXNAME}".bin bs=1 seek="$(printf '%d' 0x10000)" 
of=esp32_qemu_image.bin conv=notrunc
+
+if [ ${?} -ne 0 ]; then
+  printf "Failed to generate esp32_qemu_image.bin.\n"
+  exit 1
+fi
+
+printf "Generated esp32_qemu_image.bin successfully!\n"
+printf "You can use QEMU for executing it with the following command line:\n"
+printf "\tqemu-system-xtensa -nographic -machine esp32 -drive 
file=esp32_qemu_image.bin,if=mtd,format=raw\n"
+
+echo "esp32_qemu_image.bin" >> "${NUTTXNAME}".manifest

Reply via email to