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

2024-01-04

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

目前我可以像这样加载精灵:

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

# hexdump zero.bin
0000000 0000 0000 0000 0000 0000 0000 0000 0000
*
0020000


# arm-none-eabi-gdb
(gdb) target remote 127.0.0.1:7224
(gdb) mon reset halt
(gdb) mon reset init
(gdb) set arm fallback-mode auto
(gdb) set debug arm
(gdb) restore zero.bin binary 0x0
Restoring binary file zero.bin into memory (0x0 to 0x20000)
Writing to flash memory forbidden in this context
(gdb) info mem                                                                                                         
Using memory regions provided by the target.                                                              
Num Enb Low Addr   High Addr  Attrs                                                                      
0   y   0x00000000 0x00020000 flash blocksize 0x800 nocache                                              
1   y   0x00020000 0x100000000 rw nocache        
(gdb) delete mem 1
warning: Switching to manual control of memory regions; use "mem auto" to fetch regions from the target again.
(gdb) delete mem 0
(gdb) mem 0 0x100000000 rw nocache
(gdb) info mem
Using user-defined memory regions.
Num Enb Low Addr   High Addr  Attrs
1   y   0x00000000 0x100000000 rw nocache
(gdb) restore zero.bin binary 0x0
Restoring binary file zero.bin into memory (0x0 to 0x20000)
(gdb) x/10 0x0
0x0:    0x20003000      0x00003c5d      0x00003c7d      0x00003c7d
0x10:   0x00000000      0x00000000      0x00000000      0x00000000
0x20:   0x00000000      0x00000000

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

我想念什么?或者也许还有另一种使用 gdb 加载二进制文件的方法?


如果您正在使用OpenOCD,

mon flash write_bank <num> <file_name> <offset>

应该对你有帮助。

例如,如果您的闪光灯开始于0x400000,

mon flash write_bank 0 zero.bin 0x100000

将在以下位置写入 Zero.bin 文件0x500000,假设该地址可写。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 gdb 将二进制文件加载到闪存中 的相关文章

  • 没有可用的符号表信息

    我正在测试第三方的库 它崩溃了 当我想查看崩溃的原因时 我的 gdb 告诉我没有可用的调试符号 Program received signal SIGSEGV Segmentation fault Switching to Thread 0
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 如何获取结构体中任意成员的位位置

    如何获取结构体中任意成员的位位置 在示例中 gt typedef struct BitExamStruct unsigned int v1 3 unsigned int v2 4 unsigned int v3 5 unsigned int
  • 交叉编译armv5,但它创建v7二进制文件

    我设法为arm926ej s创建了一个目标文件我在 qemu 上使用 Debian Arm arm linux gnueabi gcc 4 4 static O c mcpu arm926ej s hello c o hello root
  • 如何使 gdb 在反汇编模型上显示原始的非修改函数名称?

    void outputString const char str cout lt lt outputString const char str lt lt str lt lt endl 原来是 Dump of assembler code
  • “gdb”调试器奇怪地跳过断点

    这是我的代码的一小段 l2tp inspector cc 14 else if f info gt key proto UDP PROTO 15 if size gt 4 16 uint32 t l2tp part 17 l2tp part
  • 让 TensorFlow 在 ARM Mac 上使用 GPU

    我已经安装了TensorFlow在 M1 上 ARM Mac 根据这些说明 https github com apple tensorflow macos issues 153 一切正常 然而 模型训练正在进行CPU 如何将培训切换到GPU
  • 上下文切换到安全模式(arm trustzone)的成本是多少

    我试图了解在arm中可信 安全 和非安全模式之间来回切换的成本 从非安全世界转移到安全世界时到底需要发生什么 我知道需要设置 ns 位 基于某些特殊指令 需要刷新和更新页表 刷新和更新处理器缓存 还有什么需要发生的吗 处理器缓存 它们是分段
  • 在 QtCreator 中调试时如何查看 qDebug 消息

    我正在从 Eclipse CDT 带有 Qt 集成插件 过渡到 QtCreator 2 0 但仍有一件事困扰着我 QtCreator 当我在 QtCreator 中调试时 我在Application output tab直到我停止正在调试的
  • 使用 gdb 调试 qemu

    如何使用 gdb 调试 qemu 我一直在谷歌搜索但找不到任何具体的东西 我在 GDB 7 5 中遇到错误 gt 访问内存地址时出错 似乎 位置独立可执行文件 有问题 所以使用 configure enable debug disable
  • GDB命令了解程序是否正在运行或停止

    我正在尝试自动化 GDB 调试会话 我想知道 GDB 中是否有任何命令或任何其他方式可以帮助我知道程序是否正在运行或停止 Use gdb selected inferior threads 0 is running 来自 GDB Pytho
  • 为什么 GDB 调试器不断冻结 Xcode 4?

    这真是一个奇怪的错误 我正在开发一个使用相机源的 iPhone 项目 并通过 OpenGL 着色器运行它以对其应用效果 然而 每次我在代码中简单地创建一个新的 GLfloat 时 调试器都会在启动时冻结 我无法复制和粘贴文本 因为整个 XC
  • 使用 GDB 远程调试 MPI

    我正在尝试从 pi 的远程访问组中调试我使用 MPI 编写的代码 我无法直接访问 Pi 以便能够使用 GUI 来调试代码 我已经尝试过使用屏幕显示的内容question https stackoverflow com questions 3
  • GDB 脚本编写为 MOCK

    我正在尝试使用 GDB 模拟一个函数 用于单元测试父函数 一种方法是在您想要模拟和使用 GDB 的函数中设置一个断点return命令 但是当 GDB 时我无法做同样的事情call使用命令 gdb b secret check Breakpo
  • 将 C 函数与 ARM 汇编结合使用

    我见过人们在代码中使用 C 库中的 printf 的示例 如下所示 data balign 4 hello asciz Hello n text global main func main main ldr r0 hello msg bl
  • 使用 -ffile-prefix-map 会中断调试

    在 DAYJOB 我正在尝试实现可重复的构建 以使调试已发布的软件变得更容易 我们的构建服务器上不再有完整的调试版本 使用来自可重现的构建 org https reproducible builds org 使用 ffile prefix
  • 在 GDB 中,是否可以给出一个相对于函数开头的地址(以行为单位)?

    主题行基本上说明了一切 如果我根据文件和行号给出位置 则在编辑文件时该值可能会更改 事实上 如果我在重构过程中编辑多个函数 它往往会经常发生变化 而且会带来不便 但是 如果它相对于函数的开头 行 则更改的可能性较小 如果无法给出距函数开头的
  • 如何在Linux中诊断Python进程占用CPU

    我的 python 进程在自动化脚本中的某个时刻开始在基于 Linux 的系统 Ubuntu 上占用 CPU 我正在尝试在 GDB 中调试这个问题 我对 GDB 还很陌生 是否有任何 GDB 命令可以提供有关哪个线程正在使用大部分 cpu
  • 什么是 .axf 文件?

    我是arm架构的新手 我从事嵌入式软件工作 并试图了解我的项目二进制文件的调试文件夹中存在的 axf文件 发现它是链接器在构建过程中生成的arm可执行格式文件 用于调试崩溃 所以很明显它包含了一些调试信息 但不清楚具体是什么信息 而且deb
  • 如何在数据部分(RAM)中保留一定范围的内存并防止同一应用程序使用该内存的堆/堆栈?

    我想在 RAM 中保留 分配一定范围的内存 并且同一应用程序不应覆盖或使用该范围的内存进行堆 堆栈存储 如何在内存中分配一定范围的内存以防止堆栈 堆覆盖 我考虑过向应用程序本身添加 或分配 一个数组并保留内存 但它被编译器优化了 因为它在应

随机推荐