Support to run NuttX on ESP32 QEMU
This commit is contained in:
parent
652e152d66
commit
d410a29693
@ -48,6 +48,7 @@ CONFIG_START_DAY=6
|
||||
CONFIG_START_MONTH=12
|
||||
CONFIG_START_YEAR=2011
|
||||
CONFIG_SUPPRESS_CLOCK_CONFIG=y
|
||||
CONFIG_SUPPRESS_UART_CONFIG=y
|
||||
CONFIG_SYSTEM_NSH=y
|
||||
CONFIG_SYSTEM_NSH_CXXINITIALIZE=y
|
||||
CONFIG_UART0_SERIAL_CONSOLE=y
|
||||
|
@ -42,6 +42,7 @@ CONFIG_START_DAY=6
|
||||
CONFIG_START_MONTH=12
|
||||
CONFIG_START_YEAR=2011
|
||||
CONFIG_SUPPRESS_CLOCK_CONFIG=y
|
||||
CONFIG_SUPPRESS_UART_CONFIG=y
|
||||
CONFIG_SYSTEM_READLINE=y
|
||||
CONFIG_TESTING_OSTEST=y
|
||||
CONFIG_TESTING_OSTEST_LOOPS=10
|
||||
|
@ -58,6 +58,7 @@ CONFIG_START_DAY=6
|
||||
CONFIG_START_MONTH=12
|
||||
CONFIG_START_YEAR=2011
|
||||
CONFIG_SUPPRESS_CLOCK_CONFIG=y
|
||||
CONFIG_SUPPRESS_UART_CONFIG=y
|
||||
CONFIG_SYSTEM_NSH=y
|
||||
CONFIG_SYSTEM_NSH_CXXINITIALIZE=y
|
||||
CONFIG_SYSTEM_TASKSET=y
|
||||
|
49
boards/xtensa/esp32/esp32-core/scripts/Config.mk
Normal file
49
boards/xtensa/esp32/esp32-core/scripts/Config.mk
Normal file
@ -0,0 +1,49 @@
|
||||
############################################################################
|
||||
# boards/xtensa/esp32/esp32-core/scripts/Config.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.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
# These are the macros that will be used in the NuttX make system to compile
|
||||
# and assembly source files and to insert the resulting object files into an
|
||||
# archive. These replace the default definitions at tools/Config.mk
|
||||
|
||||
# POSTBUILD -- Perform post build operations
|
||||
|
||||
define POSTBUILD
|
||||
@echo "MKIMAGE: ESP32 binary"
|
||||
$(Q) if ! esptool.py version ; then \
|
||||
echo ""; \
|
||||
echo "Please install ESP-IDF tools"; \
|
||||
echo ""; \
|
||||
echo "Check https://docs.espressif.com/projects/esp-idf/en/v4.0/get-started/index.html#installation-step-by-step or run the following command"; \
|
||||
echo ""; \
|
||||
echo "cd tools/esp32 && make && cd ../.."; \
|
||||
echo ""; \
|
||||
echo "run make again to create the nuttx.bin image."; \
|
||||
else \
|
||||
echo "Generating: $(NUTTXNAME).bin (ESP32 compatible)"; \
|
||||
esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 4MB -o nuttx.bin nuttx; \
|
||||
echo "Generated: $(NUTTXNAME).bin (ESP32 compatible)"; \
|
||||
echo "Generating: flash_image.bin"; \
|
||||
dd if=/dev/zero bs=1024 count=4096 of=flash_image.bin && \
|
||||
dd if=$(IDF_PATH)/hello_world/build/bootloader/bootloader.bin bs=1 seek=$(shell printf "%d" 0x1000) of=flash_image.bin conv=notrunc && \
|
||||
dd if=$(IDF_PATH)/hello_world/build/partition_table/partition-table.bin 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')"; \
|
||||
fi
|
||||
endef
|
@ -35,6 +35,7 @@
|
||||
|
||||
include ${TOPDIR}/.config
|
||||
include ${TOPDIR}/tools/Config.mk
|
||||
include ${TOPDIR}/boards/xtensa/esp32/esp32-core/scripts/Config.mk
|
||||
include ${TOPDIR}/arch/xtensa/src/lx6/Toolchain.defs
|
||||
|
||||
LDSCRIPT1 = $(TOPDIR)/boards/$(CONFIG_ARCH)/$(CONFIG_ARCH_CHIP)/$(CONFIG_ARCH_BOARD)/scripts/esp32_out.ld
|
||||
|
80
tools/esp32/Makefile
Normal file
80
tools/esp32/Makefile
Normal file
@ -0,0 +1,80 @@
|
||||
############################################################################
|
||||
# tools/esp32/Makefile
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
############################################################################
|
||||
|
||||
ESP_PATH = ${HOME}/esp
|
||||
|
||||
IDF_PATH = ${ESP_PATH}/esp-idf
|
||||
QEMU_PATH = ${ESP_PATH}/qemu
|
||||
|
||||
QEMU_BIN = ${QEMU_PATH}/xtensa-softmmu/qemu-system-xtensa
|
||||
QEMU_LINK = ${IDF_PATH}/tools/qemu-system-xtensa
|
||||
|
||||
BOOTLOADER_BIN = ${IDF_PATH}/hello_world/build/bootloader/bootloader.bin
|
||||
PARTITION_TABLE_BIN = ${IDF_PATH}/hello_world/build/partition_table/partition-table.bin
|
||||
|
||||
all: ${IDF_PATH} ${BOOTLOADER_BIN} ${PARTITION_TABLE_BIN} ${QEMU_BIN} ${QEMU_LINK}
|
||||
default: all
|
||||
.PHONY: clean esp-idf-hello-world
|
||||
|
||||
# Add CFLAGS=-g on the make command line to build debug versions
|
||||
|
||||
CFLAGS = -O2 -Wall -I.
|
||||
|
||||
${IDF_PATH}:
|
||||
mkdir -p ${ESP_PATH}
|
||||
echo "WARNING:this directory can be automatically removed" > ${ESP_PATH}/README
|
||||
cd ${ESP_PATH} && \
|
||||
ls esp-idf || git clone -b master --recursive https://github.com/espressif/esp-idf.git && \
|
||||
cd ${IDF_PATH} && \
|
||||
./install.sh
|
||||
|
||||
${IDF_PATH}/hello_world:
|
||||
cp -r ${IDF_PATH}/examples/get-started/hello_world ${IDF_PATH}/hello_world
|
||||
|
||||
${IDF_PATH}/hello_world/build: SHELL:=/usr/bin/env bash
|
||||
${IDF_PATH}/hello_world/build: ${IDF_PATH}/hello_world
|
||||
cd ${IDF_PATH} && \
|
||||
. export.sh && \
|
||||
cd hello_world && \
|
||||
idf.py menuconfig && \
|
||||
echo "CONFIG_ESPTOOLPY_FLASHMODE_DOUT=y" >> sdkconfig && \
|
||||
idf.py build
|
||||
|
||||
${BOOTLOADER_BIN}: ${IDF_PATH}/hello_world/build
|
||||
|
||||
${PARTITION_TABLE_BIN}: ${IDF_PATH}/hello_world/build
|
||||
|
||||
${QEMU_BIN}:
|
||||
cd ${ESP_PATH} && \
|
||||
git clone https://github.com/espressif/qemu && \
|
||||
cd qemu && \
|
||||
./configure --target-list=xtensa-softmmu \
|
||||
--enable-debug --enable-sanitizers \
|
||||
--disable-strip --disable-user \
|
||||
--disable-capstone --disable-vnc \
|
||||
--disable-sdl --disable-gtk && \
|
||||
make -j8
|
||||
|
||||
${QEMU_LINK}: ${QEMU_BIN}
|
||||
ln -srf ${QEMU_BIN} ${QEMU_LINK}
|
||||
|
||||
clean:
|
||||
@rm -rf ${HOME}/.espressif
|
||||
@grep "WARNING:this directory can be automatically removed" ${ESP_PATH}/README > /dev/null 2> /dev/null && rm -rf ${ESP_PATH}; echo
|
Loading…
Reference in New Issue
Block a user