GDB串行协议概述

GDB串行协议概述

  • 1.概述

  • 2.GDB Server的作用

  • 3.一个标准的gdb的调试过程

  • 4.GDB 远程串行协议解析

  • 5.小结

1.概述

做嵌入式开发时,很多时候都会使用到GDB,从底层去理解GDB的调试过程,将更加容易的理解调试的过程。

在做嵌入式开发调试时,可理解为两个部分

  • 嵌入式系统平台,启动一个debug stub
  • 宿主机,启动gdb

两个平台之间通过串行数据总线连接起来。

GDB整体调试的模型如下图所示:

2.GDB Server的作用

当PC机启动GDB时,需要和GDB Server建立一定的通信连接,由GDB Server解析具体的逻辑并执行。

所以GDB Server可以是一个openocd,或者JTAG等等实际的外设模块,和目标板子进行连接后,可以调试芯片。它本质上是一个解析GDB协议的模块,或者是一段后台的程序。

相应GDB的请求

当gdb和嵌入式平台进行通信的时候,会发一系列的请求,例如:

  • 读写内存
  • 读写寄存器
  • 设置或者清除断点

提供调试Trap

  • GDB断点的Trap
  • 无效指令的Trap
  • 系统错误的Trap

同步传输CPU的状态和到远程的GDB中。

3.一个标准的gdb的调试过程

一般的正常使用编译工具链中都会有gdb的工具,就拿riscv的来说,用riscv-nuclei-elf-gdb.exe去连接qemu上的gdb stub时,采用的是tcp协议。

当qemu去启动gdb server的时候。

qemu-system-riscv32.exe -M gd32vf103v_rvstar -cpu -nographic -s -S

后面的-s表示启动gdb server。而-S则表示绑定在TCP端口的1234端口号上。

从操作上是这个流程,那么底层的数据传送又是怎样的流程呢?

4.GDB 远程串行协议解析

一个标准的GDB串行协议的格式如下

$packet-data#checksum

其中的消息是通过ASCII码进行传输,以$开始,以#结束。最后的checksum是命令的校验和。

上面就是通过Wireshark监听到的协议数据。

GDBGDB server进行通信的时候,采用收发形式进行,必然会有下面的通信过程

发送:

$packet-data#checksum

回复

 

每次都需要回复一个 ,表示收到数据。

当没有接受到数据,或者超时时,需要进行重传操作。

下面就是一个实际的通信过程。

gdb 和 target之间的通信一直会采用收发对称的数据格式

比如写内存

gdb会调用set 0x4015cc = 0xc320

那么gdb底层的通信是

$M4015CC,2:C320#6d

目标机收到数据后,会首先返回

 

接着返回状态

$OK#9a

这样,一个通过gdb操作内存的中的数据的通信协议就完成了。

由于GDB的指令非常多,这里就不列举了,但是基本的原理和格式都差别不大。

比如单步调试的指令

step:[gdb] $s#73

向下执行的指令

Continue
[gdb] $c#63

控制台输出

Console Output[target] $o48656c6c6f2c20776f726c64210a#55

这样可以在gdb控制台上输出hello,world!的命令。

关于命令的格式可以查看官方文档

https://sourceware.org/gdb/onlinedocs/gdb/Stop-Reply-Packets.html

但是举出一些基本的规律

5.小结

用采用GDB进行调试的过程,底层的传输原理,采用的是非常简单的字符串的格式,这GDB将这些命令发给硬件调试器或者板子,通过将这些命令解析后,执行具体的逻辑,就可以正常的控制芯片中程序的行为了。这就是GDB的串行协议原理。

(0)

相关推荐

  • 【博文精选】riscv linux在qemu上仿真

    经过几天的斗争,终于在qemu上,成功跑通了linux.下面将整个流程,记录下. 大致分为如下几步: 编译工具链 编译linux kernel 编译bootloader 编译跟文件系统 编译qemu ...

  • 【博文精选】eclipse联和DGB在qemu平台调试riscv linux

    之前说到了,如何在qemu上,运行riscv kernel.下面说一下,如何使用eclipse+GDB,在qemu平台上调试kernel. ${SIFIVE_DIR}是freedom-u-sdk开源项 ...

  • 从DVRF靶机学习固件安全

    DVRF 项目介绍 该项目目标是模拟一个真实的环境,帮助人们了解 x86_64 之外的其他 CPU 架构.此固件是针对 Linksys E1550 设备量身定制的.如果您没有,请不要担心!可以用 qe ...

  • 记一次ARM架构的ROP利用

    先说一下需要搭建的环境: 1.安装qemu:sudo apt-get install qemu-user 2.安装gdb-multiarch:sudo apt-get install gdb-mult ...

  • 表驱动法在串行通讯协议解析中的应用

      在<单片机高级裸编程思想>和<代码大全2>中,均提到了数据驱动程序的编程思想,认为数据是宇宙的语言.虽然我们可以通过代码逻辑实现任务需求,但容易出现代码分支众多,程序难以理 ...

  • 分享一款具有扩展温度的2Mbit串行FRAM存储器FM25V20A-DGQTR

    CYPRESS在包括汽车.工业.家庭自动化和家电.医疗产品和消费电子业务领域.主要向客户提供市场领先的MCU.无线 SoC.存储器.模拟IC和USB控制器的解决方案.在快速发展的物联网领域获得了优势和 ...

  • 赛普拉斯代理4Mbit串行SPI铁电存储器CY15B104Q-LHXI

    赛普拉斯型号CY15B104Q-LHXI主要采用先进铁电工艺的4Mbit非易失性存储器.铁电随机存取存储器或FRAM是非易失性的,并且执行类似于RAM的读取和写入操作.它提供了151年的可靠数据保留, ...

  • 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介

    https://www.cnblogs.com/henjay724/p/14438002.html 今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的 ...

  • 多速率串行数字接口(SDI) PHY层

    由于HDTV,IPTV和视频点播(VoD)不断普及,加上更多功能和更低成本的FPGA,这两种技术相结合,产生了一种新的解决方案.该解决方案的一个关键的需求是发送.接收.编辑和处理未压缩视频的能力.这一 ...

  • 64Mbit SOIC8封装SPI接口的国产串行SRAM EMI7064

    现在的电子系统应用,对SRAM要求越来越高,单片机或ARM内部的RAM越来越不够用.国产EMI公司的64Mbit SPI接口的SRAM芯片EMI7064.这样的IC用途一般是:数据采集或信号处理过程的 ...

  • Everspin代理非易失性1Mb串行SPI MRAM--MR25H10MDFR

    MRAM(磁性只读存储器)和FRAM(铁电RAM)都声称具有相似的性能优势:低电压操作.长寿命和非常高的速度.他们以不同的方式实现这些目标,尽管在每种情况下,性能突破背后都有创新的材料技术.   MR ...

  • 拿来即用的流程优化方法,串行改并行,不仅为效率 || 流程管理实践046

    有些企业内部流程串行设计很多,这不仅会影响运营效率,更要命的是这些企业往往有一些共性的特点:人治.部门墙很厚.领导文化浓厚.思维僵化.我们应关注串行背后的东西,流程需要更多的并行设计,效率提升是必须的 ...

  • Cypress代理128Kbit串行FRAM存储芯片FM25V01A-G

    Cypress凭借在分立存储器半导体领域近40年的经验,以同类最佳的存储器产品.解决方案和技术引领行业.于1982年推出第一款随机存取存储器,并从这个吉祥的开端发展为涵盖NOR闪存.pSRAM.SRA ...