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 接口适配器 驾驶员需要:
- libftdi: http: //www.intra2net.com/en/developer/libftdi/index.php
可选的 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 在撰写本文时。
评论