[STM32F4] 调试多个 .elf文件

[复制链接]
911|1
地瓜patch 发表于 2025-11-24 10:50 | 显示全部楼层 |阅读模式
调试, ar, or, bi, 08, RA
在我的一个项目中,开发了一个bootloader和一个application。这两个项目分别位于 STM32CubeIDE的独立工作空间中。我的想法是配置 GDB 调试器,使其能够从引导程序启动调试,最终进入应用程序的调试环境 。
和大多数引导程序一样,我的引导程序会先检查版本是否正确,然后跳转到主应用程序的起始地址。
引导程序的内存地址定义如下:
/* Memories definition */
MEMORY
{
  CCMRAM        (xrw)        : ORIGIN = 0x10000000,        LENGTH = 64K
  SHAREDDATA (xrw)   : ORIGIN = 0x20000000, LENGTH = 512
  RAM        (xrw)        : ORIGIN = 0x20000200,        LENGTH = 128K-512
  FLASH        (rx)        : ORIGIN = 0x8000000,        LENGTH = 16K-128  
  PRELOADERINFO (rx) : ORIGIN = 0x08003F80, LENGTH = 128
}
应用程序的内存地址定义如下
/* Memories definition */
MEMORY
{
    PROGRAMINFO (rx) : ORIGIN = 0x08020000, LENGTH = 512 /* ProgramInfo and BootInfo */
    FLASH (rx)       : ORIGIN = 0x08020200, LENGTH = 5*128K-512  /* Move APP to sector 5-9 */
    CCMRAM        (rwx)        : ORIGIN = 0x10000000,        LENGTH = 64K
    SHAREDDATA (xrw)        : ORIGIN = 0x20000000, LENGTH = 512
    RAM        (rwx)        : ORIGIN = 0x20000200,        LENGTH = 128K-512
}
我找到了多种配置多个 ELF 文件的方法,但这些方法测试都没成功
我发现了一个可行的配置选项:在 “Run”→“Debug Configurations” 的【Startup】标签页中,可以指定多个 ELF 文件。启动调试时,所有选定的文件都会被编译并下载到微控制器中,而且调试器还会从这些 ELF 文件中加载信息。但是,我没有找到任何官方文档,这里需要配置的 “偏移量” 具体该如何设置?
该配置项中需要分别定义下载地址偏移量和符号地址偏移量。
关于下载地址偏移量:这个偏移量在链接脚本中已经定义好了,所以这里的偏移量应该设为 0,对吗?
关于符号地址偏移量:我该从哪里获取这个偏移量呢?使用代码段(.text)的偏移量尝试后,问题依然存在。当调试器跳转至应用程序代码时,只能看到汇编代码的反汇编视图,无法看到源码。我想能对主应用程序也进行调试。
我已经使用 readelf.exe 工具获取了程序的地址和偏移量相关信息:
There are 26 section headers, starting at offset 0x19101c:
Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES ** Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .isr_vector       PROGBITS        08020200 010200 000188 00   A  0   0  1
  [ 2] .text             PROGBITS        08020388 010388 00e954 00  AX  0   0  8
  [ 3] .rodata           PROGBITS        0802ecdc 01ecdc 0001a0 00   A  0   0  4
  [ 4] .programinfo      PROGBITS        08020000 010000 000076 00  WA  0   0  4
  [ 5] .ARM.extab        PROGBITS        0802ee7c 0204ac 000000 00   W  0   0  1
  [ 6] .ARM              ARM_EXIDX       0802ee7c 01ee7c 000008 00  AL  2   0  4
  [ 7] .preinit_array    PREINIT_ARRAY   0802ee84 0204ac 000000 04  WA  0   0  1
  [ 8] .init_array       INIT_ARRAY      0802ee84 01ee84 000004 04  WA  0   0  4
  [ 9] .fini_array       FINI_ARRAY      0802ee88 01ee88 000004 04  WA  0   0  4
  [10] .data             PROGBITS        20000200 020200 0002ac 00  WA  0   0  4
  [11] .bss              NOBITS          200004ac 0204ac 001564 00  WA  0   0  4
  [12] ._user_heap_stack NOBITS          20001a10 021a10 000600 00  WA  0   0  1
  [13] .ARM.attributes   ARM_ATTRIBUTES  00000000 0204ac 000030 00      0   0  1
  [14] .debug_info       PROGBITS        00000000 0204dc 0383ea 00      0   0  1
  [15] .debug_abbrev     PROGBITS        00000000 0588c6 0055fd 00      0   0  1
  [16] .debug_aranges    PROGBITS        00000000 05dec8 0019f0 00      0   0  8
  [17] .debug_ranges     PROGBITS        00000000 05f8b8 0017a8 00      0   0  8
  [18] .debug_macro      PROGBITS        00000000 061060 026f58 00      0   0  1
  [19] .debug_line       PROGBITS        00000000 087fb8 01a315 00      0   0  1
  [20] .debug_str        PROGBITS        00000000 0a22cd 0def19 01  MS  0   0  1
  [21] .comment          PROGBITS        00000000 1811e6 00007b 01  MS  0   0  1
  [22] .debug_frame      PROGBITS        00000000 181264 006f40 00      0   0  4
  [23] .symtab           SYMTAB          00000000 1881a4 005aa0 10     24 849  4
  [24] .strtab           STRTAB          00000000 18dc44 0032c0 00      0   0  1
  [25] .shstrtab         STRTAB          00000000 190f04 000117 00      0   0  1
Key to Flags:
  W (write), A (alloc), X (execute), M (merge), S (strings), I (info),
  L (link order), O (extra OS processing required), G (group), T (TLS),
  C (compressed), x (unknown), o (OS specific), E (exclude),
  y (purecode), p (processor specific)

[color=rgba(0, 0, 0, 0.85)]请教高手在该 IDE 中配置多 ELF 文件的相关操作?

onlycook 发表于 2025-11-24 16:30 | 显示全部楼层
在 STM32CubeIDE 中配置多 ELF 文件调试 Bootloader 和 Application 的核心在于正确设置下载地址偏移和符号地址偏移。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

2907

主题

17818

帖子

30

粉丝
快速回复 在线客服 返回列表 返回顶部
0