LinkScope 使用笔记:基于 OpenOCD 的通用硬件芯片调试助手

目录

前言

日常嵌入式开发中,我们常有实时观测单片机变量、在线修改参数而无需重新编译烧录的需求。最近在 GitHub 上发现一款名叫 LinkScope 的基于 OpenOCD 的非侵入式硬件调试开源项目。

此版本是基于原版LinkScope的一个fork项目,主要在两方面做了改进:优化了使用界面与操作逻辑,并重写了波形绘制界面,使其更贴合日常使用习惯。

项目地址:

https://github.com/OpenChipLab/LinkScope

LinkScope 是什么

LinkScope 是一款非侵入式硬件芯片调试软件。它直接驱动硬件调试器与单片机连接,解析编译器生成的符号文件(AXF / ELF)得到变量表,从而在不修改芯片固件的前提下,实现对目标芯片变量的实时查看、在线修改与波形绘制。

软件采用 Qt 开发,调试器后端基于 OpenOCD,因此天然继承了 OpenOCD 广泛的调试器与芯片支持能力;同时它也支持通过串口连接任意带 UART 的芯片(需移植一小段下位机程序)。

支持的调试器(Probe)

LinkScope 在理论上支持所有 OpenOCD 兼容的调试适配器,已确认明确支持的 probe 如下:

调试器(Probe) 说明
STLink STLINK-V2
JLink Segger J-Link 系列
CMSIS-DAP 已实测 CMSIS-DAP
CH347(WCH 沁恒) 通过 OpenOCD ch347 驱动接入,详见下文
ESP32C3 内置 JTAG 使用专用 OpenOCD,手动开启外部进程后连接
任意 OpenOCD 兼容适配器 勾选「外部进程」连接到正在运行的 OpenOCD 即可

关于 CH347 的支持说明

CH347 是 WCH(沁恒微电子)推出的高速 USB 转接芯片,原生同时提供 UART、I2C、SPI 以及 JTAG / SWD 接口。OpenOCD 主线已合入 CH347 驱动(代码位于 src/jtag/drivers/ch347.c,默认 VID 0x1a86、PID 0x55dd)。因此,只要使用带 CH347 驱动的 OpenOCD 版本,LinkScope 即可通过其后端直接驱动 CH347 调试器。

CH347分为两个型号,差异如下:

  • CH347T:需将芯片切换至 mode3使用JTAG或SWD;
  • CH347F:无需切换模式,直接使用JTAG或SWD;

相关参考资料:

OpenOCD 官方调试适配器配置文档:https://openocd.org/doc/html/Debug-Adapter-Configuration.html

CH347 系列专栏:https://blog.csdn.net/qq_43010294/category_12775144.html

核心功能

功能 说明
实时查看 / 修改变量值 采样过程中直接在线改值,立即生效
变量波形绘制 实时将变量值绘制成曲线(变量示波)
采样数据导出 全部采样数据导出为 CSV 表格,便于离线分析
格式化日志输出 支持下位机日志(信息 / 调试 / 警告 / 错误 四级)
任意 C 表达式变量名 变量名支持 GDB 能解析的任意合法 C 表达式
配置保存 / 导入 连接模式、调试器、芯片、符号文件、变量表可存为配置文件

变量名不仅限于单个变量,还可以是 g_pack.var1 + g_pack.var2g_arr[2]@3*(int*)0x20005c5c 这类表达式(结构体等复合类型仅支持查看,不支持改值与绘图)。

两种连接模式

LinkScope 提供调试器模式与串口模式两种方式连接目标芯片:

模式 侵入性 最高采样率 适用对象
调试器模式 非侵入(不改固件) 约 100 Hz OpenOCD 兼容的调试器与目标芯片
串口模式 侵入(需修改下位机源码) 约 80 Hz 任意带 UART 的芯片

调试器模式下,软件后台启动 GDB 与 OpenOCD 进程,通过 GDB 的 RSP 协议读取 / 修改变量;串口模式则把下位机程序移植到目标芯片,由上位机通过 TCP 服务解析串口数据。

支持的目标芯片(Target)

  • 理论上:OpenOCD 支持的全部 MCU(如 STM32 全系列);
  • 已实测设备:STM32F103RCT6、STM32F103C8T6、STM32F407ZGT6、STM32F407IGH6、ESP32C3;
  • 串口模式:任意带 UART 的芯片(需移植下位机程序,可用于 Arduino 等无调试器接口的芯片,也可配合透传模块实现无线连接)。

快速上手

  1. 下载最新发行版,解压后双击 LinkScope.exe 运行(Windows 预编译包);
  2. 设置编译好的符号文件(AXF / ELF);
  3. 选择连接模式并连接:
    • 调试器模式:下拉框选调试器与芯片型号,点击「连接」;或勾选「外部进程」连已有 OpenOCD;
    • 串口模式:点击「刷新串口」选择端口后连接;
  4. 通过变量选择窗口或主表末行手动添加要查看的变量(支持 C 表达式);
  5. 连接成功后自动采样,可在线改值、选绘图颜色、在绘图窗口用滚轮控制缩放,鼠标控制平移,并通过「导出数据」保存 CSV。

已知限制与注意事项

  • 采样率约为 100 Hz(调试器)/ 80 Hz(串口),属于「变量示波」而非高速示波器,适合观察慢变信号与控制逻辑;
  • 调试器模式异常退出后可能残留 openocd.exe 进程,需手动结束;
  • 串口模式下地址 0 读取单字节恒为 0
  • 使用 CH347T 时需确认工作于 mode3,且仅支持 JTAG;需要 SWD 建议选用 CH347F;
  • 软件不含下载 / 烧录功能,连接前请先为目标芯片烧录好程序;
  • OpenOCD 的 CH347 驱动为较新特性,建议使用较新版本的 OpenOCD 以获得完整支持。

总结与资源

LinkScope 用「Qt + OpenOCD + GDB」的组合,把原本分散在各家工具里的变量观测、在线改值、波形绘制、数据导出能力整合成了一个通用、开源、非侵入的调试入口。对于手头有多种调试器、尤其是想用 CH347 这类高性价比硬件做日常调试的嵌入式开发者,它值得一试。

相关资源:

项目仓库:https://github.com/OpenChipLab/LinkScope

OpenOCD 支持的调试适配器列表:https://openocd.org/doc/html/Debug-Adapter-Configuration.html

如果本文对你有帮助,欢迎去仓库点个 Star。

相关推荐
不会代码的小猴2 小时前
标准模板库(STL)
开发语言·c++·笔记·算法
爱莉希雅&&&2 小时前
K8s NFS+StorageClass+PV/PVC+Deployment 实战笔记
笔记·容器·kubernetes
影寂ldy2 小时前
SQL 索引(Index)完整笔记
数据库·笔记·sql
GlueNa2SiO33 小时前
06-Docker存储与数据持久化
笔记·学习·docker
星空真迷人4 小时前
嵌入式鸿蒙并非精简版,核心究竟是什么?
stm32·单片机·嵌入式硬件·物联网·华为·harmonyos·iot
hongmai6668884 小时前
GK7205V300芯片深度解析:H.265低功耗视觉主控,助力安防监控高效选型
arm开发·嵌入式硬件·物联网·智能家居·h.265·risc-v
上下求索,莫负韶华4 小时前
切面学习笔记
笔记·python·学习
测试运维日常笔记4 小时前
Unix/Linux 系统软件包管理笔记
linux·笔记·unix
2301_801434985 小时前
STM32F407移植TinyUSB
stm32·单片机·嵌入式硬件