soc: esp32: add support to mcuboot build
Select configuration when mcuboot is enabled. At this moment, only UNSIGNED image is supported as per Espressif's mcuboot porting. This also updates esp32 runner to use proper bin_file name and updates default bootloader check. Move CMakeLists.txt content from board to soc directory as this support is for esp32 architecture and not board specific. Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
This commit is contained in:
parent
f9eaabbd9b
commit
16571db029
|
@ -695,7 +695,8 @@ endif # BOOTLOADER_MCUBOOT
|
|||
|
||||
config BOOTLOADER_ESP_IDF
|
||||
bool "ESP-IDF bootloader support"
|
||||
depends on SOC_ESP32 || SOC_ESP32S2
|
||||
depends on (SOC_ESP32 || SOC_ESP32S2 || SOC_ESP32C3) && !BOOTLOADER_MCUBOOT
|
||||
default y
|
||||
help
|
||||
This option will trigger the compilation of the ESP-IDF bootloader
|
||||
inside the build folder.
|
||||
|
|
|
@ -1,65 +0,0 @@
|
|||
# SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
if(CONFIG_BOOTLOADER_ESP_IDF)
|
||||
include(ExternalProject)
|
||||
|
||||
## we use hell-world project, but I think any can be used.
|
||||
set(espidf_components_dir ${ESP_IDF_PATH}/components)
|
||||
set(espidf_prefix ${CMAKE_BINARY_DIR}/esp-idf)
|
||||
set(espidf_build_dir ${espidf_prefix}/build)
|
||||
|
||||
ExternalProject_Add(
|
||||
EspIdfBootloader
|
||||
PREFIX ${espidf_prefix}
|
||||
SOURCE_DIR ${espidf_components_dir}/bootloader/subproject
|
||||
BINARY_DIR ${espidf_build_dir}/bootloader
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND} -G${CMAKE_GENERATOR}
|
||||
-S ${espidf_components_dir}/bootloader/subproject
|
||||
-B ${espidf_build_dir}/bootloader -DSDKCONFIG=${espidf_build_dir}/sdkconfig
|
||||
-DIDF_PATH=${ESP_IDF_PATH} -DIDF_TARGET=${CONFIG_BOARD}
|
||||
-DPYTHON_DEPS_CHECKED=1
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER}
|
||||
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
|
||||
-DPYTHON=${PYTHON_EXECUTABLE}
|
||||
BUILD_COMMAND
|
||||
${CMAKE_COMMAND} --build .
|
||||
INSTALL_COMMAND "" # This particular build system has no install command
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
EspPartitionTable
|
||||
SOURCE_DIR ${espidf_components_dir}/partition_table
|
||||
BINARY_DIR ${espidf_build_dir}
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND
|
||||
${PYTHON_EXECUTABLE} ${ESP_IDF_PATH}/components/partition_table/gen_esp32part.py -q
|
||||
--offset 0x8000 --flash-size 4MB ${ESP_IDF_PATH}/components/partition_table/partitions_singleapp.csv ${espidf_build_dir}/partitions_singleapp.bin
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
if(CONFIG_BUILD_OUTPUT_BIN)
|
||||
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${ESP_IDF_PATH}/components/esptool_py/esptool/esptool.py
|
||||
ARGS --chip esp32 elf2image --flash_mode dio --flash_freq 40m
|
||||
-o ${CMAKE_BINARY_DIR}/zephyr/${CONFIG_KERNEL_BIN_NAME}.bin
|
||||
${CMAKE_BINARY_DIR}/zephyr/${CONFIG_KERNEL_BIN_NAME}.elf)
|
||||
endif()
|
||||
|
||||
set_property(TARGET bintools PROPERTY disassembly_flag_inline_source)
|
||||
|
||||
add_dependencies(app EspIdfBootloader EspPartitionTable)
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-flash-bootloader=${espidf_build_dir}/bootloader/bootloader.bin")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-flash-partition_table=${espidf_build_dir}/partitions_singleapp.bin")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-boot-address=0x1000")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-partition-table-address=0x8000")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-app-address=0x10000")
|
||||
|
||||
endif()
|
|
@ -26,5 +26,3 @@ CONFIG_GEN_IRQ_VECTOR_TABLE=n
|
|||
|
||||
CONFIG_I2C=y
|
||||
CONFIG_CLOCK_CONTROL=y
|
||||
|
||||
CONFIG_BOOTLOADER_ESP_IDF=y
|
||||
|
|
|
@ -18,9 +18,10 @@ class Esp32BinaryRunner(ZephyrBinaryRunner):
|
|||
def __init__(self, cfg, device, boot_address, part_table_address,
|
||||
app_address, baud=921600, flash_size='detect',
|
||||
flash_freq='40m', flash_mode='dio', espidf='espidf',
|
||||
bootloader_bin=None, partition_table_bin=None, app_bin=None):
|
||||
bootloader_bin=None, partition_table_bin=None):
|
||||
super().__init__(cfg)
|
||||
self.elf = cfg.elf_file
|
||||
self.app_bin = cfg.bin_file
|
||||
self.device = device
|
||||
self.boot_address = boot_address
|
||||
self.part_table_address = part_table_address
|
||||
|
@ -32,7 +33,6 @@ class Esp32BinaryRunner(ZephyrBinaryRunner):
|
|||
self.espidf = espidf
|
||||
self.bootloader_bin = bootloader_bin
|
||||
self.partition_table_bin = partition_table_bin
|
||||
self.app_bin = app_bin
|
||||
|
||||
@classmethod
|
||||
def name(cls):
|
||||
|
@ -72,8 +72,6 @@ class Esp32BinaryRunner(ZephyrBinaryRunner):
|
|||
help='Bootloader image to flash')
|
||||
parser.add_argument('--esp-flash-partition_table',
|
||||
help='Partition table to flash')
|
||||
parser.add_argument('--esp-flash-app',
|
||||
help='App to flash')
|
||||
|
||||
@classmethod
|
||||
def do_create(cls, cfg, args):
|
||||
|
@ -86,19 +84,14 @@ class Esp32BinaryRunner(ZephyrBinaryRunner):
|
|||
return Esp32BinaryRunner(
|
||||
cfg, args.esp_device, boot_address=args.esp_boot_address,
|
||||
part_table_address=args.esp_partition_table_address,
|
||||
app_address=args.esp_app_address,baud=args.esp_baud_rate,
|
||||
app_address=args.esp_app_address, baud=args.esp_baud_rate,
|
||||
flash_size=args.esp_flash_size, flash_freq=args.esp_flash_freq,
|
||||
flash_mode=args.esp_flash_mode, espidf=espidf,
|
||||
bootloader_bin=args.esp_flash_bootloader,
|
||||
partition_table_bin=args.esp_flash_partition_table,
|
||||
app_bin=args.esp_flash_app)
|
||||
partition_table_bin=args.esp_flash_partition_table)
|
||||
|
||||
def do_run(self, command, **kwargs):
|
||||
self.require(self.espidf)
|
||||
if self.app_bin:
|
||||
bin_name = self.app_bin
|
||||
else:
|
||||
bin_name = path.splitext(self.elf)[0] + path.extsep + 'bin'
|
||||
|
||||
cmd_flash = [self.espidf, '--chip', 'auto']
|
||||
if self.device is not None:
|
||||
|
@ -116,12 +109,12 @@ class Esp32BinaryRunner(ZephyrBinaryRunner):
|
|||
|
||||
if self.bootloader_bin:
|
||||
cmd_flash.extend([self.boot_address, self.bootloader_bin])
|
||||
if self.partition_table_bin:
|
||||
cmd_flash.extend([self.part_table_address, self.partition_table_bin])
|
||||
cmd_flash.extend([self.app_address, bin_name])
|
||||
cmd_flash.extend([self.part_table_address, self.partition_table_bin])
|
||||
cmd_flash.extend([self.app_address, self.app_bin])
|
||||
else:
|
||||
cmd_flash.extend([self.boot_address, bin_name])
|
||||
cmd_flash.extend([self.app_address, self.app_bin])
|
||||
|
||||
self.logger.info("Flashing esp32 chip on {} ({}bps)".
|
||||
format(self.device, self.baud))
|
||||
print(cmd_flash)
|
||||
self.check_call(cmd_flash)
|
||||
|
|
|
@ -6,4 +6,78 @@ zephyr_sources(
|
|||
loader.c
|
||||
)
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_GDBSTUB gdbstub.c)
|
||||
zephyr_library_sources_ifdef(CONFIG_GDBSTUB gdbstub.c)
|
||||
|
||||
if(CONFIG_BOOTLOADER_ESP_IDF)
|
||||
include(ExternalProject)
|
||||
|
||||
## we use hello-world project, but I think any can be used.
|
||||
set(espidf_components_dir ${ESP_IDF_PATH}/components)
|
||||
set(espidf_prefix ${CMAKE_BINARY_DIR}/esp-idf)
|
||||
set(espidf_build_dir ${espidf_prefix}/build)
|
||||
|
||||
ExternalProject_Add(
|
||||
EspIdfBootloader
|
||||
PREFIX ${espidf_prefix}
|
||||
SOURCE_DIR ${espidf_components_dir}/bootloader/subproject
|
||||
BINARY_DIR ${espidf_build_dir}/bootloader
|
||||
CONFIGURE_COMMAND
|
||||
${CMAKE_COMMAND} -G${CMAKE_GENERATOR}
|
||||
-S ${espidf_components_dir}/bootloader/subproject
|
||||
-B ${espidf_build_dir}/bootloader -DSDKCONFIG=${espidf_build_dir}/sdkconfig
|
||||
-DIDF_PATH=${ESP_IDF_PATH} -DIDF_TARGET=${CONFIG_BOARD}
|
||||
-DPYTHON_DEPS_CHECKED=1
|
||||
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
|
||||
-DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER}
|
||||
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
|
||||
-DPYTHON=${PYTHON_EXECUTABLE}
|
||||
BUILD_COMMAND
|
||||
${CMAKE_COMMAND} --build .
|
||||
INSTALL_COMMAND "" # This particular build system has no install command
|
||||
)
|
||||
|
||||
ExternalProject_Add(
|
||||
EspPartitionTable
|
||||
SOURCE_DIR ${espidf_components_dir}/partition_table
|
||||
BINARY_DIR ${espidf_build_dir}
|
||||
CONFIGURE_COMMAND ""
|
||||
BUILD_COMMAND
|
||||
${PYTHON_EXECUTABLE} ${ESP_IDF_PATH}/components/partition_table/gen_esp32part.py -q
|
||||
--offset 0x8000 --flash-size 4MB ${ESP_IDF_PATH}/components/partition_table/partitions_singleapp.csv ${espidf_build_dir}/partitions_singleapp.bin
|
||||
INSTALL_COMMAND ""
|
||||
)
|
||||
|
||||
if(CONFIG_BUILD_OUTPUT_BIN)
|
||||
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${ESP_IDF_PATH}/components/esptool_py/esptool/esptool.py
|
||||
ARGS --chip esp32 elf2image --flash_mode dio --flash_freq 40m
|
||||
-o ${CMAKE_BINARY_DIR}/zephyr/${CONFIG_KERNEL_BIN_NAME}.bin
|
||||
${CMAKE_BINARY_DIR}/zephyr/${CONFIG_KERNEL_BIN_NAME}.elf)
|
||||
endif()
|
||||
|
||||
set_property(TARGET bintools PROPERTY disassembly_flag_inline_source)
|
||||
|
||||
add_dependencies(app EspIdfBootloader EspPartitionTable)
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-flash-bootloader=${espidf_build_dir}/bootloader/bootloader.bin")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-flash-partition_table=${espidf_build_dir}/partitions_singleapp.bin")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-boot-address=0x1000")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-partition-table-address=0x8000")
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-app-address=0x10000")
|
||||
|
||||
endif()
|
||||
|
||||
if(CONFIG_BOOTLOADER_MCUBOOT)
|
||||
|
||||
# get code-partition slot0 address
|
||||
dt_nodelabel(dts_partition_path NODELABEL "slot0_partition")
|
||||
dt_reg_addr(img_0_off PATH ${dts_partition_path})
|
||||
|
||||
board_finalize_runner_args(esp32 "--esp-app-address=${img_0_off}")
|
||||
|
||||
endif()
|
||||
|
|
|
@ -5,6 +5,23 @@
|
|||
|
||||
if SOC_ESP32
|
||||
|
||||
if BOOTLOADER_MCUBOOT
|
||||
config HAS_FLASH_LOAD_OFFSET
|
||||
default y
|
||||
|
||||
config XIP
|
||||
default y
|
||||
|
||||
config MCUBOOT_GENERATE_UNSIGNED_IMAGE
|
||||
default y
|
||||
|
||||
config MCUBOOT_GENERATE_CONFIRMED_IMAGE
|
||||
default y
|
||||
|
||||
config ROM_START_OFFSET
|
||||
default 0x20
|
||||
endif
|
||||
|
||||
config SOC
|
||||
default "esp32"
|
||||
|
||||
|
|
Loading…
Reference in a new issue