问题标签 [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.
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
、、、、mdw
等mww
)load_image
。奇怪的“JTAG-DP STICKY”错误与我的 ram 链接器脚本有关,找到了带有RAM 链接器脚本的 LPC1758 项目模板,只需要修改 LPC1768 的内存大小并且 load_image 工作得很好。
不过,我仍然想知道如何正确配置 eclipse 以进行 GDB 调试。
gdb - lma 是什么意思?
使用 OpenOCD 和 GDB 将可执行文件加载到板上时,我得到类似于(摘自此处的片段):
lma
在这种情况下是什么意思?
gcc - 通过 openocd 使用 gdb(目标 arm)调试多源(asm 和 c)程序
我想通过链接器从多个目标文件形成的程序源逐步调试。
为简单起见,我假设一个源是汇编文件,其中启动例程位于其中,另一个是 c 文件。该程序由以下makefile构建
尽管我认为我的问题与 openocd 无关,但为了完整起见,我声明了 openocd 的特定部分。在 openocd 守护进程启动后,我使用以下命令启动调试会话。
其中 $memory_location 是 .text 部分的第一个地址。打开后ddd
,程序停在所需的地址,我可以像往常一样单步通过装配线。最后我到达了跳转指令,它跳转到位于 c 文件中的函数。再经过一步 gdb 在程序执行时不再响应。
也许你们中的一位专家可以给我一个提示,我必须改变什么,以便 gdb 在这一点上切换到 c 源,我可以继续逐步执行。
eclipse - 如何配置 Eclipse、GCC 和 OpenOCD 以与 STM32F4Discovery 板一起使用?
我拥有一个 STM32F4Discovery 板,它包含一个 STM32F4 微控制器和一个 ST-LINKv2 调试器接口。我想在这个设置上做一些简单的 C 编程,并想使用免费提供的工具来做。
以下是我所知道的:
- 可以将 Eclipse 配置为使用各种工具链(例如 YAGARTO 或其他工具链)为各种 ARM 目标进行交叉编译。
- Eclipse 可以使用 GDB 进行远程调试。
- OpenOCD 提供了一个 GDB 服务器。
- OpenOCD(最新版本)同时支持 ST-LINKv2 和 STM32F4Discovery 板(包括该板的脚本)。
这是我不知道的:如何将这些部分组合成一个连贯的整体。我相信所有必要的活动部件都存在,但我不知道如何组装它们。我发现了一些零碎的东西,通常从“安装 Eclipse Indigo”之类的东西开始。是否有简单的教程、步骤列表或要检查的内容?
kernel - JTAG + openocd + 内核调试(vmlinux 中没有调试信息?)
当我从 Eclipse 连接到目标时,我收到以下消息:
但之后当我停止运行内核时:0xc06f2674
No source available for ""
此外,当我尝试步进时:目标请求失败:找不到当前函数的边界。
vmlinux中似乎没有符号。但是内核是在设置了 DEBUG_KERNEL 和 DEBUG_INFO 的情况下重建的。
内核 2.6.39 CPU AT91SAM9G25
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 控制下运行,但我仍然无法在源代码级别进行调试。
我这样做:
- 给板子加电,进入uboot shell。
- 开始 openOCD 会话
在内核调用的 bootm.c 中设置 Uboot 断点:
/li>开始 Eclipse 调试会话:
- 监控暂停
加载没有偏移量的uboot-a
/li>启动uboot并让它运行
- uboot 停止“theKernel”调用
我知道内核位于地址 0x20008000。
- 重启 openOCD 会话
使用内核配置再次启动 ecipse 调试器:
- 监控暂停
在地址 0x20008000 上加载内核
/li>- 启动调试会话
现在一切正常,内核启动,但我仍然无法在源代码级别进行调试。
“符号不可用”
DEBUG 和 DEBUG_INFO 为内核打开。
vmlinux 截图
在我看来,这个文件中有大约 50 个函数符号。
gdb - 为什么在远程管道模式下使用 OpenOCD 时 GDB 会挂起?
我正在使用 GDB 和 OpenOCD 在 Windows 上的 STM32F4DISCOVERY 板上调试一个简单的程序。这在单独启动 OpenOCD 并使用 TCP/IP 连接到它时工作正常,如下所示:
完成后,我可以正常关闭 GDB quit
。但是,我想在“远程管道”模式下使用 GDB,而不是需要手动启动和停止 OpenOCD。这对我来说似乎是一个有点理想的配置。但是,当我这样做时,我无法退出 GDB,因为当我尝试退出时它会挂起。
OpenOCD 日志文件显示 GDB 连接已断开:
但是 GDB 永远不会退出:
该disconnect
命令同样挂起,永远不会返回。甚至 Ctrl-C 也不会唤醒 GDB。
arm - 在使用 OpenOCD 刷新我的 ARM 微控制器之前,我是否需要使用 objcopy?
ARM微控制器的“正常”ARM交叉编译通常包括三个或四个步骤:
- 使用汇编器将启动代码(如果是汇编)汇编到目标文件中
- 使用编译器将任何源代码编译成目标文件
- 使用链接器将目标文件链接到 .elf 文件中
- 使用 objcopy 将 .elf 文件转换为 .hex 文件
- 刷新 .hex 文件
这是我不确定的第 4 步。在 OpenOCDflash write_image
命令的文档中,它指出:
文件 [type] 可以明确指定为 bin(二进制)、ihex(Intel hex)、elf(ELF 文件)、s19(摩托罗拉 s19)。内存或生成器。
很明显 OpenOCD 支持 elf 文件,但我不知道这究竟意味着什么。这仅在某些目标上支持吗?JTAG/SWD 适配器是否必须提供某种类似 objcopy 的功能才能正常工作?它只是从 OpenOCD 还不支持 elf 文件的时代开始的遗留物吗?
eclipse - Eclipse GDB 与 OpenOCD 结合
我正在eclipse CDT
制作软件,用于stm32f0-discovery
使用ST-link
USB 对该控制器进行编程。
几天前,OpenOCD6.0.1
我按照本教程开始调试我的芯片:
几个小时后,我完成了这项工作,能够逐步实现我的程序设置断点和所有其他通常的调试内容。现在,奇怪的事情发生了。我开始将我的配置从 -> Monitor reset halt 更改为 -> monitor soft_reset_halt 。我这样做是因为我最终想开发一个带有 stm32f0 系列芯片的电路板,我只能使用三根线进行编程(SWD 编程)。因为我没有让它工作,所以我恢复了设置以监控重置暂停。
今天我想调试我的芯片,我遇到了以下问题,当我开始调试时,eclipse告诉我我的设备在它的重置处理程序中(这对我来说似乎是正确的,因为monitor reset halt命令)此时openocd输出是:
现在,我想跨过重置处理程序来启动我的程序,然后我收到这个警告:
警告:stepi 被忽略。GDB 现在将从目标中获取寄存器状态。
经过一番谷歌搜索后,我找不到任何导致此问题的原因。有没有人有解决这个问题的线索。
c - eclipse 调试 (CDT) 控制台写行
我正在尝试使用 eclipse(CDT)、gdb 和 openocd 调试我的 stm32f0。有什么方法(就像你在例如 Visual Studio 中所做的那样)有一个 var 打印到控制台。像 console.writeline 或 debug.writeline 这样的东西?
谢谢