Open On-Chip Debugger 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
Open On-Chip Debugger 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
Open On-Chip Debugger 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 GPL
开发语言 C/C++ Perl
操作系统 Linux
软件类型 开源软件
开源组织
地区 不详
投 递 者 送南阳马生序
适用人群 未知
收录时间 2024-09-25

软件简介

OpenOCD(Open On-Chip Debugger)是一款开源片上调试器。

OpenOCD 提供片上编程和调试支持, JTAG接口和TAP支持的分层架构包括:

  • (X)SVF 回放以促进自动边界扫描和 FPGA/CPLD 编程;
  • 调试目标支持(例如 ARM、MIPS):单步执行, 断点/观察点、gprof 分析等;
  • 闪存芯片驱动程序(例如 CFI、NAND、内部闪存);
  • 嵌入式TCL解释器,方便编写脚本。

有多个网络接口可用于与 OpenOCD 交互: telnet、TCL 和 GDB。GDB 服务器使 OpenOCD 能够充当 使用“远程目标”对嵌入式系统进行源代码级调试 GNU GDB 程序(以及其他使用 GDB 协议的程序,例如 IDA 专业版)。

本自述文件包含以下主题的概述:

  • 快速入门说明,
  • 如何查找和构建更多 OpenOCD 文档,
  • 支持的硬件列表,
  • 安装和构建过程,
  • 包装技巧。

为没有耐心的人提供快速入门

如果你有一个流行的主板,那么只需启动 OpenOCD 并配置它即可, 例如:

openocd -f 板/stm32f4discovery.cfg

如果你将某个适配器与某个特定目标连接起来, 您需要获取 jtag 接口和目标配置的来源, 例如:

openocd -f 接口/ftdi/jtagkey2.cfg -c “传输选择 jtag” \
        -f 目标/ti_calypso.cfg
openocd -f 接口/stlink.cfg -c “传输选择 hla_swd” \
        -f 目标/stm32l0.cfg

OpenOCD 启动后,使用以下命令连接 GDB:

(gdb)目标扩展远程本地主机:3333

OpenOCD 文档

除了树内文档外,最新的手册可能 可在以下网址在线查看:

OpenOCD 用户指南: http://openocd.org/doc/html/index.html

OpenOCD 开发者手册: http://openocd.org/doc/doxygen/html/index.html

这些反映了最新的开发版本,因此以下部分 介绍如何从包构建完整的文档。

欲了解更多信息,请参阅这些文档或联系开发人员 通过订阅 OpenOCD 开发者邮件列表:

openocd-devel@lists.sourceforge.net

构建 OpenOCD 文档

默认情况下,OpenOCD 构建过程会在 “Info format”并以标准方式安装,因此“info openocd” 可以访问它。

此外,OpenOCD 用户指南可以在 遵循不同的格式:

如果设置了“PDFVIEWER”,则会创建并查看 PDF 用户指南。

制作 pdf && ${PDFVIEWER} doc/openocd.pdf

如果设置了“HTMLVIEWER”,则会创建并查看 HTML 用户指南。

制作 html && ${HTMLVIEWER} doc/openocd.html/index.html

OpenOCD 开发者手册包含有关内部 有关代码的架构和其他详细信息:

注意:确保已安装 doxygen,输入 doxygen --version

制作 doxygen && ${HTMLVIEWER} doxygen/index.html

支持的硬件

JTAG 适配器

AM335x、ARM-JTAG-EW、ARM-USB-OCD、ARM-USB-TINY、AT91RM9200、axm0432、BCM2835、 总线冲击器、Buspirate、Cadence DPI、Cadence vdebug、Chameleon、CMSIS-DAP、 Cortino、Cypress KitProg、DENX、Digilent JTAG-SMT2、DLC 5、DLP-USB1232H、 嵌入式项目,Espressif USB JTAG 编程器, eStick、FlashLINK、FlossJTAG、Flyswatter、Flyswatter2、 FTDI FT232R、Gateworks、Hoegl、ICDI、ICEBear、J-Link、JTAG VPI、JTAGkey、 JTAGkey2、JTAG-lock-pick、KT-Link、Linux GPIOD、Lisa/L、LPC1768-Stick、 Mellanox rshim、MiniModule、NGX、Nuvoton Nu-Link、Nu-Link2、NXHX、NXP IMX GPIO、 OOCDLink、Opendous、OpenJTAG、Openmoko、OpenRD、OSBDM、Presto、Redbee、 远程 Bitbang、RLink、SheevaPlug 开发套件、Stellaris 评估套件、 ST-LINK(支持 SWO 跟踪)、STM32-PerformanceStick、STR9-comStick、 sysfsgpio、Tigard、TI XDS110、TUMPA、Turtelizer、ULINK、USB-A9260、USB-Blaster、 USB-JTAG、USBprog、VPACLink、VSLLink、Wiggler、XDS100v2、Xilinx XVC/PCIe、 Xverve。

调试目标

ARM:AArch64、ARM11、ARM7、ARM9、Cortex-A/R(v7-A/R)、Cortex-M(ARMv{6/7/8}-M)、 FA526、Feroceon/Dragonite、XScale。 ARCv2、AVR32、DSP563xx、DSP5680xx、EnSilica eSi-RISC、EJTAG(MIPS32、MIPS64)、 ESP32、ESP32-S2、ESP32-S3、英特尔 Quark、LS102x-SAP、RISC-V、ST STM8、 Xtensa。

闪存驱动程序

ADUC702x、AT91SAM、AT91SAM9 (NAND)、ATH79、ATmega128RFA1、Atmel SAM、AVR、CFI、 DSP5680xx、EFM32、EM357、eSi-RISC、eSi-TSMC、EZR32HG、FM3、FM4、Freedom E SPI、 GD32、i.MX31、Kinetis、LPC8xx/LPC1xxx/LPC2xxx/LPC541xx、LPC2900、LPC3180、LPC32xx、 LPCSPIFI、Marvell QSPI、MAX32、Milandr、MXC、NIIET、nRF51、nRF52、NuMicro、 NUC910、Nuvoton NPCX、onsemi RSL10、Orion/Kirkwood、PIC32mx、PSoC4/5LP/6、 Raspberry RP2040、Renesas RPC HF 和 SH QSPI、 S3C24xx、S3C6400、SiM3x、SiFive Freedom E、Stellaris、ST BlueNRG、STM32、 STM32 QUAD/OCTO-SPI,适用于 Flash/FRAM/EEPROM、STMSMI、STR7x、STR9x、SWM050、 TI CC13xx、TI CC26xx、TI CC32xx、TI MSP432、Winner Micro w600、赛灵思 XCF、 XMC1xxx,XMC4xxx。

安装 OpenOCD

致 OpenOCD 用户

如果你更愿意“使用”OpenOCD 而不是“在”它上面工作,你的 操作系统或 JTAG 接口供应商可能会提供二进制文件 为您提供足够便捷的包裹。

此类软件包可能比 git mainline 更稳定, 前沿开发开始进行。这些“包装者”生产 开发人员发布新“版本”后的 OpenOCD 二进制版本 源代码的版本。以前的 OpenOCD 版本无法 用于诊断当前版本的问题,因此用户 鼓励与他们的分发包保持联系 维护人员或接口供应商确保出现合适的升级 经常。

OpenOCD 二进制版本的用户必须联系其打包商 请求支持或更新版本的二进制文件;OpenOCD 开发人员不直接支持软件包。

致 OpenOCD 打包者

如果您符合以下条件,则您是 OpenOCD 的打包者:

  • 销售加密狗并包含预先构建的二进制文件;
  • 提供工具或IDE(集成OpenOCD的开发解决方案);
  • 构建软件包(例如 GNU/Linux 发行版的 RPM 或 DEB 文件)。

作为包装者,您将会首先体验到大多数问题的报告。 当你为用户解决这些问题时,你的解决方案可能会有所帮助 防止其他用户提出数百(甚至数千)个其他问题。

如果某些功能对您不起作用,请通知 OpenOCD 开发人员知道如何改进系统或文档以避免 未来问题,并采取后续行动,以帮助我们确保问题得到充分解决 在我们未来的版本中解决。

话虽如此,OpenOCD 开发人员也希望您遵循一些 建议:

  • 发送补丁,包括配置文件、上游,参与 讨论;
  • 启用 OpenOCD 支持的所有选项,即使这些选项与您的 特定硬件;
  • 对基于 FTDI 的设备使用“ftdi”接口适配器驱动程序。

构建 OpenOCD

INSTALL 文件包含运行“configure”的通用指令 并编译 OpenOCD 源代码。该文件由 所有 GNU autotools 软件包的默认设置。如果您不熟悉 GNU autotools,那么您应该首先阅读这些说明。

本文档的其余部分尝试提供一些说明 那些寻求快速安装的人。

OpenOCD 依赖项

目前需要 GCC 或 Clang 来构建 OpenOCD。开发人员 已经开始执行严格的代码警告(-Wall、-Werror、-Wextra、 等等)并使用 C99 特有的功能:内联函数、命名函数 初始化器、将声明与代码混合,以及其他技巧。虽然 也许可以使用其他编译器,它们必须有点 现代,可能需要延长支持以有条件地删除 GCC 特定的扩展。

您还需要:

  • 制作
  • 库工具
  • pkg-config >= 0.23 或 pkgconf

OpenOCD 使用 jimtcl 库;从 git 构建可以将 jimtcl 检索为 git 子模块。

此外,对于从 git 构建:

-autoconf >= 2.69 -automake >= 1.14 -texinfo >= 5.0

可选的基于 USB 的适配器驱动程序需要 libusb-1.0。

可选的 USB-Blaster、ASIX Presto 和 OpenJTAG 接口适配器 驾驶员需要:

可选的 CMSIS-DAP 适配器驱动程序需要 HIDAPI 库。

可选的 linuxgpiod 适配器驱动程序需要 libgpiod 库。

可选的 J-Link 适配器驱动程序需要 libjaylink 库。

可选的 ARM 反汇编需要 capstone 库。

checkpatch 需要的可选开发脚本:

  • perl
  • Python -python-ply

权限委托

以 root/管理权限运行 OpenOCD 是 由于安全原因,不鼓励这么做。

对于 GNU/Linux 上的 USB 设备,您应该使用 contrib/60-openocd.rules 文件。它可能属于 /etc/udev/rules.d 中的某个位置,但是 请参阅操作系统文档以确保无误。不要忘记 将您自己添加到“plugdev”组。

对于 GNU/Linux 和 FreeBSD 上的并行端口适配器,请更改您的 相应的“ppdev”(parport* 或 ppi*)设备节点权限。

对于 Windows 上的 parport 适配器,您需要运行 install_giveio.bat (也可以使用 Cygwin 中的“ioperm”)给出 普通用户直接访问“LPT”寄存器的权限。

编译 OpenOCD

要构建 OpenOCD,请使用以下命令序列:

./引导程序
./configure [选项]
制作
安装

仅当从 Git 存储库构建时才需要使用“bootstrap”命令。“configure”步骤会生成构建所需的 Makefile OpenOCD,通常会提供一个或多个选项。第一个 'make' 步骤将构建 OpenOCD 并将最终的可执行文件放在 './src/'。最后一步(可选)“make install”将所有 所需位置的文件。

要查看所有受支持选项的列表,请运行“./configure --help”

交叉编译选项

交叉编译支持标准的 autotools 方式,你只需要 在 --host 选项中指定交叉编译目标三元组, 例如,在 Debian 上使用 MinGW 进行 Windows 32 位交叉构建:

./configure --host=i686-w64-mingw32 [选项]

为了使 pkg-config 能够很好地进行交叉编译,你可能需要一个 附加包装脚本如下所述

https://autotools.io/pkgconfig/cross-compiling.html

这是为了告诉 pkg-config 在哪里寻找目标 OpenOCD 所依赖的库。或者,你可以指定 直接使用 *_CFLAGS*_LIBS 环境变量,参见 ./configure --help 了解详情。

有关为您完成所有这些操作的或多或少完整的脚本,请参阅

contrib/cross-build.sh

并行端口适配器

如果你想使用 PPDEV 接口访问并行端口,你 必须同时指定 --enable-parport--enable-parport-ppdev,因为 后一个选项是 parport 驱动程序的一个选项。

对于 --enable-parport-giveio 选项也是如此,你必须 同时使用 --enable-parport--enable-parport-giveio 选项 如果你想使用 giveio 而不是 ioperm 并行端口访问 方法。

从 GIT 获取 OpenOCD

您可以使用您的 GIT 客户端下载当前的 GIT 版本 从主存储库中选择:

git://git.code.sf.net/p/openocd/code

您可能更喜欢使用镜子:

http://repo.or.cz/r/openocd.git
git://repo.or.cz/openocd.git

使用 GIT 命令行客户端,您可以使用以下命令 设置当前存储库的本地副本(确保没有 当前目录中名为“openocd”的目录):

git 克隆 git://git.code.sf.net/p/openocd/code openocd

然后您可以使用“git pull”随意更新。

还有一个 gitweb 界面,你可以使用它来浏览 存储库或使用 HTTP 下载任意快照:

http://repo.or.cz/w/openocd.git

快照是源代码树的压缩包,大约 1.3 MB 在撰写本文时。

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论

点击加入讨论🔥(3) 发布并加入讨论🔥
暂无内容
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
3 评论
1 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部