Arm 使用gdb将二进制文件加载到闪存中

Arm 使用gdb将二进制文件加载到闪存中,arm,gdb,Arm,Gdb,我想使用gdb将一个二进制文件闪存到我的ARM MCU闪存中 目前我可以像这样加载一个elf: # arm-none-eabi-gdb --command=flash.gdb "myfirmware.elf" # cat flash.gdb set confirm off target remote 127.0.0.1:7224 monitor reset load detach quit 基本上,load命令擅长将elf部分加载到正确的地址 然而,要在MCU闪存中放入多个固件,我想发送一个

我想使用gdb将一个二进制文件闪存到我的ARM MCU闪存中

目前我可以像这样加载一个elf:

# arm-none-eabi-gdb --command=flash.gdb "myfirmware.elf"

# cat flash.gdb
set confirm off
target remote 127.0.0.1:7224
monitor reset
load
detach
quit
基本上,
load
命令擅长将elf部分加载到正确的地址

然而,要在MCU闪存中放入多个固件,我想发送一个完整的二进制映像。 为了测试它,我制作了一个zero.bin图像(只包含0):

所以这似乎不起作用,正如您在0x0中看到的,它应该充满了“0”,但它仍然包含我以前的固件(实际上是向量表)


我错过了什么?或者,如果您使用的是OpenOCD,可能还有另一种方法可以使用gdb加载二进制文件

mon flash write_bank <num> <file_name> <offset>
mon flash write\u bank
我应该帮助你

例如,如果您的闪存从
0x400000开始

mon闪存写入\u银行0.bin 0x100000


将在
0x500000
处写入zero.bin文件,假设该地址是可写的。

您不能删除内存区域。因为GDB使用
vFlash写入
数据包写入闪存,使用
M或X
数据包写入RAM

我只知道使用gdb将二进制数据写入闪存的一种方法。 您需要使用一个
.data
部分将二进制图像转换为elf文件

powerpc-objcopy-I binary-O elf32 powerpc-B powerpc-S zero.bin zero.elf

要检查新的elf文件,请使用
readelf

powerpc readelf-h-tzero.elf

最后,只需使用带有闪存基址的
load
命令,因为此elf文件没有任何地址信息。(也可以使用--change addresses 0x0选项和objcopy)

load zero.elf 0x0

我在PowerPC上检查了这个。GDB版本是8.1


此GDB配置为“-host=x86\u 64-pc-linux-gnu--target=powerpc eabi”。

还原命令失败,在此上下文中禁止写入闪存。我试图弄清楚为什么我也会这样,实际上在我的例子中,这是因为这个区域被映射到闪存,gdb需要一种方法来确定如何编程闪存,它不能像
addr[I]=data[I]
那样。我不知道如何设置gdb来实现这一点。不管怎样,希望能有帮助!
mon flash write_bank <num> <file_name> <offset>