Просмотр исходного кода

Merge branch 'feature/loadable_elf_c3' into 'master'

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

Closes IDF-2137

See merge request espressif/esp-idf!12217
Ivan Grokhotkov 5 лет назад
Родитель
Сommit
4edaf134bb

+ 4 - 2
Kconfig

@@ -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.

+ 6 - 2
components/esp32s2/ld/esp32s2_fragments.lf

@@ -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

+ 3 - 3
tools/test_apps/system/gdb_loadable_elf/app_test.py

@@ -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):

+ 0 - 0
tools/test_apps/system/gdb_loadable_elf/gdbinit → tools/test_apps/system/gdb_loadable_elf/gdbinit_esp32


+ 14 - 0
tools/test_apps/system/gdb_loadable_elf/gdbinit_esp32c3

@@ -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

+ 14 - 0
tools/test_apps/system/gdb_loadable_elf/gdbinit_esp32s2

@@ -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