问题标签 [openocd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4618 浏览

eclipse - 使用 OpenOCD 的 ARM LPC1768 的 Eclipse GDB“初始化”和“运行”设置?

我终于想出了如何让代码在这个 LPC1768 迷你板上运行,但是现在我正试图让调试工作。

我使用的工具链是:Yagarto + Eclipse (Indigo) (w/ GDB Hardware Debugger) + OpenOCD。我的 JTAG 接口是:Bus Blaster V2板。

我找到了一个指南,其中介绍了类似的设置,但它针对的是不同的 JTAG 接口,所以不是很有用。还有这篇关于LPC1768 示例的帖子,但 gdb 命令不适用于 OpenOCD。

在这一点上,我确定的唯一命令(用于 init)是target remote localhost:3333(用于连接到 OpenOCD gdb 服务器)。

我应该在此对话框中使用哪些设置和 gdb 命令?

在此处输入图像描述

(忽略“SAM7X256”,只需重新使用上述链接之一的屏幕截图。我使用的是 ARM LPC1768)

此外,我的开发板使用辅助引导加载程序(用户代码从 0x2000 开始)这一事实是否会影响这些调试设置?

更新:根据 dwelch 的建议,我确实设法让一些基本的 OpenOCD 命令正常工作(reset init、、、、mdwmwwload_image。奇怪的“JTAG-DP STICKY”错误与我的 ram 链接器脚本有关,找到了带有RAM 链接器脚本的 LPC1758 项目模板,只需要修改 LPC1768 的内存大小并且 load_image 工作得很好。

不过,我仍然想知道如何正确配置 eclipse 以进行 GDB 调试。

0 投票
1 回答
616 浏览

gdb - lma 是什么意思?

使用 OpenOCD 和 GDB 将可执行文件加载到板上时,我得到类似于(摘自此处的片段):

lma在这种情况下是什么意思?

0 投票
1 回答
497 浏览

gcc - 通过 openocd 使用 gdb(目标 arm)调试多源(asm 和 c)程序

我想通过链接器从多个目标文件形成的程序源逐步调试。

为简单起见,我假设一个源是汇编文件,其中启动例程位于其中,另一个是 c 文件。该程序由以下makefile构建

尽管我认为我的问题与 openocd 无关,但为了完整起见,我声明了 openocd 的特定部分。在 openocd 守护进程启动后,我使用以下命令启动调试会话。

其中 $memory_location 是 .text 部分的第一个地址。打开后ddd,程序停在所需的地址,我可以像往常一样单步通过装配线。最后我到达了跳转指令,它跳转到位于 c 文件中的函数。再经过一步 gdb 在程序执行时不再响应。

也许你们中的一位专家可以给我一个提示,我必须改变什么,以便 gdb 在这一点上切换到 c 源,我可以继续逐步执行。

0 投票
3 回答
4327 浏览

eclipse - 如何配置 Eclipse、GCC 和 OpenOCD 以与 STM32F4Discovery 板一起使用?

我拥有一个 STM32F4Discovery 板,它包含一个 STM32F4 微控制器和一个 ST-LINKv2 调试器接口。我想在这个设置上做一些简单的 C 编程,并想使用免费提供的工具来做。

以下是我所知道的:

  • 可以将 Eclipse 配置为使用各种工具链(例如 YAGARTO 或其他工具链)为各种 ARM 目标进行交叉编译。
  • Eclipse 可以使用 GDB 进行远程调试。
  • OpenOCD 提供了一个 GDB 服务器。
  • OpenOCD(最新版本)同时支持 ST-LINKv2 和 STM32F4Discovery 板(包括该板的脚本)。

这是我不知道的:如何将这些部分组合成一个连贯的整体。我相信所有必要的活动部件都存在,但我不知道如何组装它们。我发现了一些零碎的东西,通常从“安装 Eclipse Indigo”之类的东西开始。是否有简单的教程、步骤列表或要检查的内容?

0 投票
1 回答
501 浏览

kernel - JTAG + openocd + 内核调试(vmlinux 中没有调试信息?)

当我从 Eclipse 连接到目标时,我收到以下消息:

但之后当我停止运行内核时:0xc06f2674
No source available for ""

此外,当我尝试步进时:目标请求失败:找不到当前函数的边界。

vmlinux中似乎没有符号。但是内核是在设置了 DEBUG_KERNEL 和 DEBUG_INFO 的情况下重建的。

内核 2.6.39 CPU AT91SAM9G25

0 投票
0 回答
2930 浏览

debugging - 使用 Jtag 进行 Linux 调试 - [ARM9][AT91SAM9G25] - Amontec、openocd、gdb、eclipse

我正在尝试使用此系统启动内核调试:Amontec JTAGkey2、openocd、gdb、eclipse。

最后,我想调试在其中运行的内核和应用程序。我的问题很少,看来我需要依次解决。现在我有 CPU 暂停/恢复、读/写 RAM 缺少什么:步入、步过、C/C++ 级调试。

我执行以下操作: - 连接 JTAG,启动板,通过 Uboot 使用调试消息启动 uImage - 启动 openocd:

输出:

问题从这里开始:

开放式:

蚀:

JTAG似乎也试图将代码加载到0x0中,我想这是不正确的:

在此处输入图像描述

更新 1

在分析了一些ARM的在线教程后:

Eclipse Reset 和 Halt 命令不能完美运行。最好取消选中它们并写入命令窗口。还可以添加加载地址:

我不使用

我让 Uboot 启动并初始化 RAM 和其他外围设备。然后我通过进入 shell 来停止 Uboot。然后我让eclipse将linux写入RAM,并启动它。这需要很长时间,但效果更好。内核在 RPC 初始化时启动和停止,而不返回控制台。

  • 是否可以在 Uboot 控制台中将内核加载到 RAM 中,然后启动 JTAG 会话?
  • [load ...] 和 [monitor load...] 命令有什么区别
  • 为什么我需要加载 /compressed/vmlinux 而不是 uImage ?
  • 在 Eclipse 窗口中,我有两个加载字段:加载图像我加载符号。我禁用了这两个选项,但只写了 load arch/arm/boot/compressed/vmlinux 0x22000000。这可能是下一个问题的原因吗?

更新 2:好的。谢谢你的提示。

我已经取得了一些进展。你能给我一些建议吗,也许我还是做错了什么。

现在我的内核在 JTAG 控制下运行,但我仍然无法在源代码级别进行调试。

我这样做:

  1. 给板子加电,进入uboot shell。
  2. 开始 openOCD 会话
  3. 在内核调用的 bootm.c 中设置 Uboot 断点:

    /li>
  4. 开始 Eclipse 调试会话:

    • 监控暂停
    • 加载没有偏移量的uboot-a

      /li>
    • 启动uboot并让它运行

    • uboot 停止“theKernel”调用

我知道内核位于地址 0x20008000。

  1. 重启 openOCD 会话
  2. 使用内核配置再次启动 ecipse 调试器:

    • 监控暂停
    • 在地址 0x20008000 上加载内核

      /li>
    • 启动调试会话

现在一切正常,内核启动,但我仍然无法在源代码级别进行调试。

“符号不可用” 在此处输入图像描述 DEBUG 和 DEBUG_INFO 为内核打开。

vmlinux 截图

在我看来,这个文件中有大约 50 个函数符号。

在此处输入图像描述

0 投票
1 回答
1416 浏览

gdb - 为什么在远程管道模式下使用 OpenOCD 时 GDB 会挂起?

我正在使用 GDB 和 OpenOCD 在 Windows 上的 STM32F4DISCOVERY 板上调试一个简单的程序。这在单独启动 OpenOCD 并使用 TCP/IP 连接到它时工作正常,如下所示:

完成后,我可以正常关闭 GDB quit。但是,我想在“远程管道”模式下使用 GDB,而不是需要手动启动和停止 OpenOCD。这对我来说似乎是一个有点理想的配置。但是,当我这样做时,我无法退出 GDB,因为当我尝试退出时它会挂起。

OpenOCD 日志文件显示 GDB 连接已断开:

但是 GDB 永远不会退出:

disconnect命令同样挂起,永远不会返回。甚至 Ctrl-C 也不会唤醒 GDB。

0 投票
1 回答
2786 浏览

arm - 在使用 OpenOCD 刷新我的 ARM 微控制器之前,我是否需要使用 objcopy?

ARM微控制器的“正常”ARM交叉编译通常包括三个或四个步骤:

  1. 使用汇编器将启动代码(如果是汇编)汇编到目标文件中
  2. 使用编译器将任何源代码编译成目标文件
  3. 使用链接器将目标文件链接到 .elf 文件中
  4. 使用 objcopy 将 .elf 文件转换为 .hex 文件
  5. 刷新 .hex 文件

这是我不确定的第 4 步。在 OpenOCDflash write_image命令的文档中,它指出:

文件 [type] 可以明确指定为 bin(二进制)、ihex(Intel hex)、elf(ELF 文件)、s19(摩托罗拉 s19)。内存或生成器。

很明显 OpenOCD 支持 elf 文件,但我不知道这究竟意味着什么。这仅在某些目标上支持吗?JTAG/SWD 适配器是否必须提供某种类似 objcopy 的功能才能正常工作?它只是从 OpenOCD 还不支持 elf 文件的时代开始的遗留物吗?

0 投票
1 回答
2705 浏览

eclipse - Eclipse GDB 与 OpenOCD 结合

我正在eclipse CDT制作软件,用于stm32f0-discovery使用ST-linkUSB 对该控制器进行编程。

几天前,OpenOCD6.0.1我按照本教程开始调试我的芯片:

调试器教程

几个小时后,我完成了这项工作,能够逐步实现我的程序设置断点和所有其他通常的调试内容。现在,奇怪的事情发生了。我开始将我的配置从 -> Monitor reset halt 更改为 -> monitor soft_reset_halt 。我这样做是因为我最终想开发一个带有 stm32f0 系列芯片的电路板,我只能使用三根线进行编程(SWD 编程)。因为我没有让它工作,所以我恢复了设置以监控重置暂停。

今天我想调试我的芯片,我遇到了以下问题,当我开始调试时,eclipse告诉我我的设备在它的重置处理程序中(这对我来说似乎是正确的,因为monitor reset halt命令)此时openocd输出是:

现在,我想跨过重置处理程序来启动我的程序,然后我收到这个警告:

警告:stepi 被忽略。GDB 现在将从目标中获取寄存器状态。

经过一番谷歌搜索后,我找不到任何导致此问题的原因。有没有人有解决这个问题的线索。

0 投票
1 回答
415 浏览

c - eclipse 调试 (CDT) 控制台写行

我正在尝试使用 eclipse(CDT)、gdb 和 openocd 调试我的 stm32f0。有什么方法(就像你在例如 Visual Studio 中所做的那样)有一个 var 打印到控制台。像 console.writeline 或 debug.writeline 这样的东西?

谢谢