问题标签 [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.
arm - 如何使用“openocd 和 JTAG 板”设置 LLDB
我正在尝试将 lldb 与 openocd/jtag 板一起使用,但我遇到了麻烦。我已经使用 openocd 和 gdb 在 L0 STMicroelectronics 板上进行开发,并且效果很好。现在我想和lldb一样。
我在 LLDB 主机端这样做
在 openocd/GDB 服务器端,我正确地看到“信息:在 tcp/5557 上接受 'gdb' 连接”
但现在我没有找到如何继续:
我也试过“进程继续”,但 lldb 抱怨没有进程
使用 gdb,该进程被认为已经在运行,我使用重置/继续命令,而不是“运行”命令。
有人知道如何将 lldb 与 openocd/jtag gdb-server 一起使用吗?
谢谢你的帮助
厘米。
eclipse - 使用 openOCD 进行 FreeRTOS 调试
我试图了解使用 openOCD 进行内核感知调试和调试 FreeRTOS 需要什么。我的设置如下:stm32f401c 发现板、eclipse、openOCD 0.10、gdb。基本上,SW4STM32 1.8.0 包。
我已经做了以下事情:
- 添加
$_TARGETNAME configure -rtos auto
到 openOCD 读取的 .cfg 文件中 - 将 FreeRTOS-openocd.c 文件添加到项目中
还有什么可做的吗?我目前从 gdb 收到以下错误:
谢谢。
--更新:
我发现了这个问题;在启动 RTOS 调度程序(即在主程序中)之前,设置的表现不佳。我已经修改 gdb 以在第一个任务处停止而不是在 main 处,现在它正在工作。openOCD 可以在调度器启动之前工作吗?
openocd - 使用 st link v2 mini 和 openocd 的程序 nrf51822
我正在尝试使用带有 openocd 的 st link v2 mini 对 nrf51822 分线板进行编程或上传代码。我一直在关注http://icarus-sensors.github.io/general/starting-with-nRF51822.html的博文教程。但是,我无法使用 openocd 连接到设备。错误消息附在下面。知道有什么问题吗?或者,我可以用其他简单的方法对 nrf51 进行编程吗?
GNU ARM Eclipse 64-bits Open On-Chip Debugger 0.9.0-00073-gdd34716-dirty (2015-05-19-09:55) 在 GNU GPL v2 下获得许可 对于错误报告,请阅读 http://openocd.org/doc /doxygen/bugs.html 信息:自动选择第一个可用的会话传输“hla_swd”。要覆盖使用“传输选择”。信息:选定的传输接管低级目标控制。结果可能与普通 JTAG/SWD 适配器速度不同:1000 kHz 信息:无法匹配请求的速度 1000 kHz,使用 950 kHz 信息:无法匹配请求的速度 1000 kHz,使用 950 kHz 信息:时钟速度 950 kHz 信息:STLINK v2 JTAG v25 API v2 SWIM v4 VID 0x0483 PID 0x3748 信息:使用 stlink api v2 信息:目标电压:3.268965 错误:在过程“init”中初始化模式失败(无法连接到目标)
st 链接 v2 迷你: http ://www.electrodragon.com/product/st-link-v2-programmer-for-stm8-stm32/
gdb - 如何使用 GDB(Gnu 调试器)和 OpenOCD 进行微控制器调试 - 从终端?
对 ARM 微控制器进行编程的标准(低成本)方法是使用 Eclipse,并在其中插入一个复杂的工具链。Eclipse 肯定有它的优点,但我想感觉独立于这个 IDE。我想了解当我构建(编译-链接-刷新)我的软件以及运行调试会话时幕后发生了什么。要获得如此深入的了解,最好从命令行运行整个过程。
注意:我使用的是 64 位 Windows 10。但这里解释的大多数内容也适用于 Linux 系统。请以管理员权限打开所有命令终端。这可以为您节省很多问题。
1. 构建软件
第一个“任务”完成了。我现在可以通过命令行将我的软件编译并链接成二进制文件.bin
和图像。.elf
成功的关键是找出 Eclipse 将其生成文件放在特定项目的位置。一旦你知道它们在哪里,你所要做的就是打开一个命令终端,然后输入GNU make
命令。
您不再需要 Eclipse!特别是如果您可以阅读(并理解)makefile 并在项目进展时根据您的需要对其进行调整。
请注意,在安装 SW4STM32(STM32 的系统工作台)后,我在以下文件夹中找到了 GNU 工具(编译器、链接器、make 实用程序、GDB...):
接下来,我在硬盘上创建了一个新文件夹,并将所有这些 GNU 工具复制到其中:
我将这些条目添加到“环境路径变量”中:
Huray,现在我已经在我的系统上启动并运行了所有 GNU 工具!我将以下build.bat
文件放在与以下文件相同的文件夹中makefile
:
运行这个 bat 文件应该可以完成这项工作!如果一切顺利,您将得到一个.bin
和一个.elf
二进制文件作为编译的结果。
2.刷机调试固件
接下来的自然步骤是将固件刷新到芯片并启动调试会话。在 Eclipse 中,它只是一个“单击按钮”——至少如果 Eclipse 为您的微控制器正确配置的话。但是幕后发生了什么?我已阅读(部分)来自 OpenOCD 开发人员 Dominic Rath 的硕士论文。你可以在这里找到它:http: //openocd.net/。这是我学到的:
当您单击“调试”图标时,Eclipse 会启动 OpenOCD 软件。Eclipse 还为 OpenOCD 提供了一些配置文件——这样 OpenOCD 就知道如何连接到您的微控制器。“如何连接”不是一件小事。OpenOCD 需要找到合适的 USB 驱动程序来连接到 JTAG 适配器(例如 STLink)。JTAG 适配器及其 USB 驱动程序通常由您的芯片制造商(例如 STMicroelectronics)提供。Eclipse 还将描述微控制器规格的配置文件交给 OpenOCD。一旦 OpenOCD 知道所有这些事情,它就可以与目标设备建立可靠的 JTAG 连接。
OpenOCD 启动两个服务器。第一个是 TCP 端口 4444 上的 Telnet 服务器。它可以访问 OpenOCD CLI(命令行界面)。Telnet 客户端可以连接并向 OpenOCD 发送命令。这些命令可以是简单的“停止”、“运行”、“设置断点”……
这样的命令可能足以调试您的微控制器,但许多人已经熟悉 Gnu 调试器 (GDB)。这就是为什么 OpenOCD 还在 TCP 端口 3333 上启动 GDB 服务器的原因。GDB 客户端可以连接到该端口,并开始调试微控制器!
Gnu Debugger 是一个命令行软件。许多人更喜欢可视化界面。这正是 Eclipse 所做的。Eclipse 启动了一个连接到 OpenOCD 的 GDB 客户端——但这对用户来说都是隐藏的。Eclipse 提供了一个图形界面,可以在后台与 GDB 客户端进行交互。
我做了一个图来解释所有这些事情:
>> 启动 OpenOCD
我设法从命令行启动了 OpenOCD。我会解释如何。
- 首先确保您的 STLink-V2 JTAG 编程器已正确安装。您可以使用 STMicroelectronics 的“STLink Utility 工具”测试安装。它有一个不错的 GUI,您只需单击连接按钮。
- 接下来从该网站下载 OpenOCD 软件可执行文件:http: //gnutoolchains.com/arm-eabi/openocd/。安装它,并将其放在硬盘上的文件夹中,例如“C:\Apps\”。
打开命令终端,然后启动 OpenOCD。您需要为 OpenOCD 提供一些配置文件,以便它知道在哪里寻找您的微控制器。通常您需要提供一个描述 JTAG 编程器的配置文件和一个定义您的微控制器的配置文件。
/li>-f
使用命令行中的参数将这些文件传递给 OpenOCD 。您还需要scripts
通过传递参数来授予 OpenOCD 对文件夹的访问权限-s
。这就是我使用命令行在我的计算机上启动 OpenOCD 的方式:如果您正确启动了 OpenOCD(使用正确的参数),它将启动并显示以下消息:
/li>请注意,您的终端窗口现在已被阻止。您不能再键入命令。但这是正常的。OpenOCD 在后台运行,它会阻塞终端。现在您有两个与 OpenOCD 交互的选项:您在另一个终端中启动 Telnet 会话,然后登录到 TCP 端口
localhost:4444
,这样您就可以向 OpenOCD 发出命令并接收反馈。或者您启动一个 GDB 客户端会话,并将其连接到 TCP 端口localhost:3333
。
>> 启动 Telnet 会话以与 OpenOCD 交互
这是您启动 Telnet 会话以与正在运行的 OpenOCD 程序交互的方式:
如果运行良好,您将在终端上收到以下消息:
你已经准备好向 OpenOCD 发送命令了!但我现在将切换到 GDB 会话,因为这是与 OpenOCD 交互的最方便的方式。
>> 启动 GDB 客户端会话以与 OpenOCD 交互
打开另一个终端窗口,然后键入以下命令:
该命令只是启动arm-none-eabi-gdb.exe
GDB 客户端。如果一切顺利,GDB 会启动并显示以下消息:
现在将此 GDB 客户端连接到 OpenOCD 中的 GDB 服务器:
现在您已连接到 OpenOCD!很高兴知道:如果您想使用本机 OpenOCD 命令(就像您在 Telnet 会话中所做的那样),只需在命令前加上关键字monitor
. 这样,OpenOCD 内部的 GDB 服务器将不会自己处理命令,而是将其传递给本地 OpenOCD 守护进程。
所以,现在是时候重置芯片、擦除它并停止它了:
芯片现在已经准备好从我们那里得到一些指令了。首先,我们将告诉芯片它的闪存部分 0 到 7(这是我的 1Mb 芯片中的所有闪存部分)不应受到保护:
接下来我再次停止芯片。只是要确定..
最后我将二进制.elf
文件交给 GDB:
现在是关键时刻。我要求 GDB 将这个二进制文件加载到芯片中。手指交叉:
可惜没有成功。我在 OpenOCD 中收到以下消息:
编辑:硬件问题已修复。
显然这是一个硬件问题。我从没想过我的芯片会有缺陷,因为使用 STLink Utility 工具将二进制文件加载到芯片上没有问题。只有 OpenOCD 抱怨并给出错误。所以我很自然地责怪 OpenOCD——而不是芯片本身。有关更多详细信息,请参阅下面的答案。
编辑:另一种优雅的闪存芯片方式 - 使用makefile!
随着问题得到解决,我现在将重点介绍另一种方法来执行芯片的闪存和调试。我相信这对社区来说真的很有趣!
您可能已经注意到我使用 Windows cmd 命令来执行所有必要的步骤。这可以在批处理文件中自动执行。但是还有一种更优雅的方法:在 makefile 中自动执行所有操作!先生/女士 Othane 为他/她的 Cortex-M 建议了以下 makefile?芯片。我想 Cortex-M7 芯片的过程非常相似:
亲爱的先生/女士。Othane,您能否解释一下如何在以下步骤中使用此生成文件:
- 从源代码构建二进制文件
- 闪存芯片
我知道一些关于makefile 的基础知识,但是你的makefile 真的很深入。您似乎使用了 GNU make 实用程序的一些功能。请给我们更多的解释,我会给你奖金;-)
------------------------------
stm32 - STM32F3Discovery 用 openocd 编程
首先,我很抱歉我的英语很差。
我正在学习如何使用 STM32F3Discovery 板。我编写了一个简单的程序来打开所有板载 LED,使用 STMCubeMX 生成配置代码。
我写的代码就是下面的八行。
这里有一个 Eclipse 项目的副本。
我正在尝试使用 openocd 对板进行编程,所以我运行
然后
openocd 的输出是
但是没有一个led是打开的!
我应该怎么办?
python - Python套接字不发送多条消息
我正在尝试使用 openocd 向设备发送多个命令。问题是它收到我的第一个命令然后停止。它永远不会收到下一个。
gdb - 原因 7 - 目标需要重置 - 不可靠的调试设置
我无法获得可靠的调试设置。我在网上的一些论坛上看到过其他类似标题的帖子,但情况似乎不同。
设置:
- Linux (Xubuntu) 64 位
- Eclipse CDT,霓虹灯 4.6.0
- eclipse“安装新软件”中的“GDB Hardware Debugging”插件,配置为reset & delay 3sec,halt;加载符号(所有复选框,没有自定义命令)
- arm-none-eabi-gcc 4.8.3 工具链
- OpenOCD,最近下载,在自己的控制台中运行,为我的确切 MCU 配置了他们提供的脚本和 st-link
- STM32L476RG MCU 带硬浮点,使用。
- ST-Link V2 调试器(独立)
现在,有一个序列,在每次经过一番挣扎之后,我都能够与调试器连接,但是步进和读取变量的工作并不那么可靠,以至于我会相信我所看到的一秒钟。但是,即使达到调用堆栈不会充满明显的废话条目并且只有极少数条目的地步,也是很累人的。
例子:
- 使用固件刷新设备。这通常没有问题。
- 启动openocd。
- 在 Eclipse 中开始调试。
- OpenOcd 显示连接,然后说:“未定义的调试原因 7 - 目标需要重置”
- 我不管在 Eclipse 中按下“恢复”按钮,以使程序运行超过它显示的虚假顶部堆栈帧。
- 按“暂停”(在调用堆栈中仍然是假的),然后“终止”。
- Ctrl+C 退出 OpenOcd。
- 手动(硬件)重置 stm32 MCU。
- 重新启动 OpenOcd。
- 再次在 Eclipse 中开始调试。
OpenOCD 输出:
现在幸运的是,我终于有了一个有点工作的调试器连接,一段时间。但这也可能需要一些重复。为什么在很明显连接不好时之间的“新闻恢复”?不确定,这似乎增加了在下一次迭代中我将建立连接的可能性,很多。
一个可能相关的说明:MCU 有一个 LCD 连接到它,我可以从中看到它何时重置。出于某种原因,在 Eclipse 中开始调试显然不会重置设备,尽管在调试配置中选中了重置复选框。如果我在终端中打开到 OpenOCD 的 telnet 连接,并在那里“重置”,则设备会重置。
我的设置出现奇怪行为的原因可能是什么?
debugging - OpenOCD - 找不到目标/swj-dp.tcl
我在使用 OpenOCD 时遇到了麻烦。由于某些原因,OpenOCD找不到 swj-dp.tcl,但该文件存在于 C:\OpenOCD\share\openocd\scripts\target 中。
你对我有什么想法或建议吗?谢谢
arduino - Arduino OpenOCD 命令在 IDE 中有效,但在 CMD 提示符下无效。我错过了什么?(NRF)
Arduino 成功完成了以下操作。但是当我从命令行尝试它时它失败了。这是为什么?
结果:
当我从命令行尝试上述操作时,我得到以下信息:
我已经替换了十六进制文件的完整路径,以使其更易于阅读。
我正在尝试使用 Arduino 作为我的工具链来上传预先构建的二进制文件。从 IDE 我可以做到,但只能使用 Arduino Built 代码。
我错过了什么?