【发布时间】:2018-02-10 01:13:09
【问题描述】:
我有一个 ARM Cortex M 的二进制固件映像,我知道它应该在 0x20000000 加载。我想将其转换为可用于使用 gdb 进行汇编级调试的格式,我认为这意味着转换为 .elf。但是我还没有弄清楚如何向 .elf 添加足够的元数据来实现这一点。这是我迄今为止尝试过的。
arm-none-eabi-objcopy -I binary -O elf32-littlearm --set-section-flags \
.data=alloc,contents,load,readonly \
--change-section-address .data=0x20000000 efr32.bin efr32.elf
efr32.elf: file format elf32-little
efr32.elf
architecture: UNKNOWN!, flags 0x00000010:
HAS_SYMS
start address 0x00000000
Sections:
Idx Name Size VMA LMA File off Algn
0 .data 00000168 20000000 20000000 00000034 2**0
CONTENTS, ALLOC, LOAD, READONLY, DATA
SYMBOL TABLE:
20000000 l d .data 00000000 .data
20000000 g .data 00000000 _binary_efr32_bin_start
20000168 g .data 00000000 _binary_efr32_bin_end
00000168 g *ABS* 00000000 _binary_efr32_bin_size
我是否需要首先将二进制文件转换为 .o 并编写一个简单的链接器脚本?我应该向 objcopy 命令添加架构选项吗?
【问题讨论】:
-
有 objcopy 方法可以做到这一点,但你需要一个固定长度的指令集,没有 thumb2 的拇指(虽然这可能不适用于 gnu),没有拇指的手臂,只有 mips 32 位(没有 16 位说明),而不是 x86,而不是其他一些。
标签: arm gdb embedded elf objcopy