B站_Miachael_ee_通过GDB和OpenOCD对ESP32 进行JTAG Debug_笔记1

发布于:2025-06-10 ⋅ 阅读:(24) ⋅ 点赞:(0)

B 站Miachael_ee视频链接

一、JTAG接口介绍

1.简介

JTAG, Joint Test Action Group,联合测试行动组,以制定该标准的联合测试行动组命名,是用于验证印刷电路板设计和测试印刷电路板制造后的行业标准。

2.接口定义

在这里插入图片描述

3.调试接口功能框图

在这里插入图片描述

  • ESP32 C3已经集成了USB转换芯片
    在这里插入图片描述

4.ESP32 S3 JTAG相关简介

  • ESP32-S3规格书下载链接
    在这里插入图片描述

  • ESP32-S3中有标准的JTAG接口和一个USB串口/JTAG控制器(该控制器可用于烧录芯片的flash、读取程序输出的数据以及将调试器连
    接到正在运行的程序中)‘
    在这里插入图片描述

5.ESP32-S3 JTAG调试接口

  • (1)标准的JTAG调试接口(电脑需要通过USB转JTAG芯片连接ESP32-S3进行调试)
    在这里插入图片描述
    在这里插入图片描述

  • (2)USB转JTAG控制器接口(电脑可以直接连接ESP32-S3的USB进行JTAG调试)
    在这里插入图片描述
    在这里插入图片描述

二、OpenOCD

1.OpenOCD官网链接

在这里插入图片描述
在这里插入图片描述

2.OpenOCD的功能模块

在这里插入图片描述

  • Target(目标设备模块):
    • 功能:定义并管理与目标芯片(如ARM Cortex-M、STM32、ESP32)的通信协议和调试接口;
    • 作用:
      • 配置芯片的调试模式(如:JTAG、SWD、JTAG/SWD混合调试);
      • 控制芯片的运行状态(暂停、恢复、单步执行);
      • 管理寄存器读写、内存访问等底层操作;
  • Flash(闪存模块):
    • 功能:负责对目标设备的闪存(Flash Memory)进行读写操作、支持烧录固件、擦除和验证;
    • 作用:
      • 实现不同类型闪存的驱动;
      • 优化闪存操作(如分页读写、扇区擦除)以提高效率;
      • 支持固件校验(如CRC检查)确保烧录正确;
  • Daemon / ˈdiːmən / (守护进程模块):
    • 功能:OpenOCD的核心服务,负责管理与硬件的连接、处理命令请求并提供接口给其他工具(如GDB);
    • 作用:
      • 监听TCP端口(默认3333)接收GDB连接;
      • 监听Telnet端口i偶(默认4444)接收用户命令;
      • 维护与调试硬件(如J-Link、ST-Link)的通信会话;
  • GDB Server(GDB服务器模块)
    • 功能:作为GDB(GNU Debugger)与目标设备之间的桥梁,将GDB的调试命令(如断点、单步执行)转换为目标设备可理解的操作;;
    • 作用:
      • 支持GDB原生调试协议(RSP);
      • 处理断点、观察点和内存访问请求;
      • 同步GDB与目标设备的状态;
  • CLI(命令行界面模块)
    • 功能:提供交互命令行接口,允许用户直接发送命令控制调试流程;
    • 作用:
      • 执行低级调试操作(如寄存器读写、内存转储);
      • 配置OpenOCD参数(如时钟频率、接口速度);
      • 手动控制调试会话(如重置设备、加载固件);
  • 模块间的协作流程
    • 启动调试阶段:Daemon加载配置文件(如接口、目标设备)、初始化硬件连接;
    • 调试阶段:
      • GDB通过GDB Server发送调试命令;
      • Target模块将命令转换为硬件操作;
      • Flash模块负责固件烧录;
      • CLI提供手动控制;
    • 通信链路:
      目标设备 <—> 调试器硬件 <—> Target/Flash <—> Daemon <—> GDB Server <—> GDB

3.OpenOCD源码下载 在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、在ESP32中运行OpenOCD

1.ESP-IDF 离线安装

2.ESP-IDF中的OpenOCD

  • ESP-IDF中已经自带了OpenOCD,
    在这里插入图片描述
    • bin文件夹中主要是openocd执行文件,乐鑫官方把openocd编译成立一个可执行文件和库文件(.dll, Dynamic Link Library,动态链接库)
      在这里插入图片描述
    • share文件夹中最重要的是其openocd文件夹下的scripts文件夹(脚本文件夹)
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

3.启动OpenOCD

(1)查看OpenOCD版本

在这里插入图片描述

(2)下载程序到开发板内

在这里插入图片描述

  • 配置芯片型号
    在这里插入图片描述
  • 配置示例
    在这里插入图片描述
  • 编译程序
    在这里插入图片描述
  • 烧录程序到开发板中
    在这里插入图片描述
  • 运行OpenOCD,openocd -f board/esp32s3-builtin.cfg
    在这里插入图片描述
  • ctrl + C,退出OpenOCD;

四、GDB

1.GDB简介

  • GDB,GNU Debugger,GNU调试器;运行于类UNIX系统,支持C、C++等多种编程语言;
  • 于1986年首次发行;GDB是一款免费软件,支持GPL,GNU General Public License,现在由自由软件基金会所维护;
  • GDB的功能
    • 跟踪和改变计算机中执行的程序;
    • 检测和修改程序的内部变量,甚至能够单独调用函数;
  • GDB支持arm、AVR等多重处理器;
  • GDB支持Remote Debugging,远程调试;
  • 如果要使用GDB调试程序,则通过gcc编译c程序时需要加入“-g”参数;

2.运行GDB

(1)ESP-IDF中的GDB执行文件,复制该执行文件的名字:xtensa-esp32s3-elf-gdb

在这里插入图片描述

  • 注意:需要根据芯片的架构选择不同的gdb,例如:ESP32-C3是Risc-V,ESP32-S3是Xtensa
    乐鑫芯片概述网址
    在这里插入图片描述
    在这里插入图片描述

(2)elf文件与bin文件

  • elf文件中有.debug调试信息,使用GDB调试时需要加上.elf文件的路径
    在这里插入图片描述

(3)创建存放gdb启动参数的文件

在这里插入图片描述
在这里插入图片描述

set remotetimeout 100          
target extended-remote :3333   
set remote hardware-watchpoint-limit 2  
mon reset halt                
flushregs                     
thb app_main                  
c                             

(4)运行GDB

  • 打开一个终端,运行OpenOCD; openocd -f board/esp32s3-builtin.cfg
    在这里插入图片描述
  • 打开另一个终端,运行GDB,xtensa-esp32s3-elf-gdb build\blink.elf -x gdbinit
    在这里插入图片描述
  • 查看断点附近的代码
    在这里插入图片描述
  • 输入q+Enter,退出GDB调试;