build-system: add loadable elf support for ESP32-S2 and C3

This commit is contained in:
Marius Vikhammer 2021-02-01 16:53:13 +08:00
parent d653d52e3c
commit fa7aa656d3
6 changed files with 41 additions and 7 deletions

View File

@ -134,7 +134,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
Select the way the application is built.
By default, the application is built as a binary file in a format compatible with
the ESP32 bootloader. In addition to this application, 2nd stage bootloader is
the ESP-IDF bootloader. In addition to this application, 2nd stage bootloader is
also built. Application and bootloader binaries can be written into flash and
loaded/executed from there.
@ -146,7 +146,7 @@ mainmenu "Espressif IoT Development Framework Configuration"
written into flash.
Note that at the moment, ESP-IDF does not contain all the startup code required to
initialize the CPUs and ROM memory (data/bss). Therefore it is necessary to execute
a bit of ROM code prior to executing the application. A gdbinit file may look as follows:
a bit of ROM code prior to executing the application. A gdbinit file may look as follows (for ESP32):
# Connect to a running instance of OpenOCD
target remote :3333
@ -166,6 +166,8 @@ mainmenu "Espressif IoT Development Framework Configuration"
xtensa-esp32-elf-gdb build/app-name.elf -x gdbinit
Example gdbinit files for other targets can be found in tools/test_apps/system/gdb_loadable_elf/
Recommended sdkconfig.defaults for building loadable ELF files is as follows.
CONFIG_APP_BUILD_TYPE_ELF_RAM is required, other options help reduce application
memory footprint.

View File

@ -78,8 +78,12 @@ entries:
[scheme:default]
entries:
text -> flash_text
rodata -> flash_rodata
if APP_BUILD_USE_FLASH_SECTIONS = y:
text -> flash_text
rodata -> flash_rodata
else:
text -> iram0_text
rodata -> dram0_data
data -> dram0_data
bss -> dram0_bss
common -> dram0_bss

View File

@ -37,10 +37,10 @@ class SerialThread(object):
@ttfw_idf.idf_custom_test(env_tag='test_jtag_arm', group='test-apps')
def test_app_loadable_elf(env, extra_data):
rel_project_path = os.path.join('tools', 'test_apps', 'system', 'gdb_loadable_elf')
app_files = ['gdb_loadable_elf.elf']
app = ttfw_idf.LoadableElfTestApp(rel_project_path, app_files, target='esp32')
target = 'esp32'
app = ttfw_idf.LoadableElfTestApp(rel_project_path, app_files, target=target)
idf_path = app.get_sdk_path()
proj_path = os.path.join(idf_path, rel_project_path)
elf_path = os.path.join(app.binary_path, 'gdb_loadable_elf.elf')
@ -49,7 +49,7 @@ def test_app_loadable_elf(env, extra_data):
with SerialThread(esp_log_path):
openocd_log = os.path.join(proj_path, 'openocd.log')
gdb_log = os.path.join(proj_path, 'gdb.log')
gdb_init = os.path.join(proj_path, 'gdbinit')
gdb_init = os.path.join(proj_path, 'gdbinit_' + target)
gdb_dir = os.path.join(proj_path, 'main')
with ttfw_idf.OCDBackend(openocd_log, app.target):

View File

@ -0,0 +1,14 @@
set pagination off
# Connect to a running instance of OpenOCD
target remote 127.0.0.1:3333
# Reset and halt the target
mon reset halt
# Run to a specific point in ROM code,
# where most of initialization is complete.
thb *0x40047654
c
# Load the application into RAM
load
# Run till app_main
tb app_main
c

View File

@ -0,0 +1,14 @@
set pagination off
# Connect to a running instance of OpenOCD
target remote 127.0.0.1:3333
# Reset and halt the target
mon reset halt
# Run to a specific point in ROM code,
# where most of initialization is complete.
thb *0x4000f6e2
c
# Load the application into RAM
load
# Run till app_main
tb app_main
c