在我的一个项目中,开发了一个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 文件的相关操作?
|
|