平头哥玄铁 CPU 调试系统介绍
关键词:RISC-V,编译,软件模拟,调试系统,平头哥玄铁 CPU、调试工具,集成开发环境、GDB,剑池 CDK,IDE,
引言
对于开发人员来说,顺畅的调试系统和高效的调试方法将有效降低开发过程中的信息误差,提升开发效率。本文将介绍玄铁 CPU 的调试系统组成,分为如下两大部分:
调试系统的基本介绍
玄铁 CPU 调试系统简介
希望通过本文的介绍,能使用户对玄铁 CPU 的调试系统有一定的理解、了解玄铁 CPU 配套的调试工具的使用。同时方便大家更容易理解后续介绍的调试方法。
一 调试系统的基本介绍
图 1 典型的 MCU 调试系统中
调试系统是一套为基于硬件调试模块,结合软件调试工具,为开发者提供解决软硬件 bug 的技术系统。软件调试部分包括调试工具、link 及其固件。硬件调试部分包括调试模块(Debug Module)。
例如图 1 所示,在典型的 MCU 调试系统中:
调试工具(Debug Tools)是面向开发者调试的软件工具,一般运行在开发人员的主机、服务器等场景下。常见的有调试工具有 GDB、IDE 等,如 T-HEAD 的 riscv 工具链中的 gdb,CDK,DebugServer 等工具。开发者使用这类工具进行软件程序的调试、分析工作;
由于调试主机无法直接与 CPU 上的调试单元连接,因此需要 link 作为中间转换工具,使得调试工具的操作能够真实地作用在 CPU 上,比如平头哥的 CkLink,Segger 的 JLink 等等;
CPU 上的调试模块(Debug Module)是支持大部分调试手段的基础,实现对 CPU 的控制和读写寄存器、读写内存等功能。
二 玄铁 CPU 调试系统总览
图 2.1 玄铁调试系统概览
如图 2.1 所示,玄铁 CPU 调试系统主要由以下几部分组成:
软件运行环境,指软件运行的实际环境,包括模拟器、普通硬件环境(Bare Metal)、基于 Linux 内核的环境;
Debug Monitor,主要指配合调试工具,对被调试程序进行调试控制的工具,包括 DebugServer/OpenOCD/GDBServer 等。对于实际开发板来说,往往还需要在线仿真调试工具(cable/link),如 CkLink, JLink 等;
调试/Profiling 工具,是开发者经常使用的用于调试程序的工具,主要包括 GDB、perf、CPF、Trace、Flash Programmer 等;
用户接口,是用户直接接触到的操作界面,主要是命令行工具(CMD Line)、剑池 CDK、剑池 CDS 等。其中大部分调试/profiling 工具大部分都支持命令行方式呈现。剑池 CDK、剑池 CDS 相比命令行工具,有友好的界面,具有更好开发体验。
本章节主要介绍玄铁 CPU 的硬件调试框架,以及部分软件调试工具、Profiling 工具的简介。
2.1 玄铁 CPU 的硬件调试框架
在玄铁 CPU 的硬件设计上,调试功能集中在调试模块(Debug Module)中基本结构如图 2.2 所示。基于该架构,调试模块的各个功能可以覆盖各种 IOT 设备领域的 CPU,包括低功耗、音频处理、视频处理、计算型等领域的 CPU。
图 2.2 RISC-V 调试框架总览
玄铁 CPU 中的调试模块,是基于《RISC-V Debug Spec v0.13.2》实现的,实现的功能包括:复位及调试控制、寄存器访问、内存访问、断点等功能。
关于调试模块中具体的功能及其操作接口,请查阅《RISC-V Debug Spec v0.13.2》,附链接:https://github.com/riscv/riscv-debug-spec
基本的调试功能介绍:
Break-Point 功能:Break-Point 功能俗称断点功能,即插入断点,使 CPU 运行到断点位置后停住。开发人员可在断点位置继续进行其他调试手段操作,如读写内存、读写寄存器等。
Watch-Point 功能:Watch-Point 功能是一种对数据访问的调试手段。可以观测某个内存地址是否发生了数据读写行为。
寄存器访问:访问 CPU 的寄存器能力,包括通用寄存器,控制寄存器等。
内存访问:访问总线上内存以及外设区的能力,可以读写内存上的数据,外设的控制/数据寄存器。
调试控制:指的是单步执行指令、使 CPU 进入调试模式、全速运行等功能。
2.2 玄铁 CPU 的软件调试工具
如图 2.1 所示,玄铁 CPU 配套有诸多调试工具,本章节将分别介绍几个典型调试工具,如表 2.1 所示:
表 2.1 玄铁调试工具
2.2.1 DebugServer
DebugServer 是平头哥自行设计实现的调试工具。其目的是为了配合 GDB 完成对 CPU 的软件调试,其中包含一套 GDB Remote Serial Protocol 的实现,并解析该协议,通过 USB 操作 link 完成协议的执行。同时 DebugServer 也实现了一套 CLI,完成一些简单的调试功能,如复位、指令单步,读写寄存器、读写内存等。
图 2.3 DebugServer Console 版本界面
2.2.2 GDB
GDB 是一个软件调试工具,是 GNU 组织维护的开源软件:https://www.gnu.org/software/gdb/。GDB 支持不同的后端体系架构,目前 GDB 的发布的源码版本中已经支持玄铁 8 系列、9 系列 CPU。能够满足玄铁 CPU 的日常开发需求。
通过一段简单示例看一下 GDB 使用。
图 2.4 RISC-V GDB 使用示例
GDB 详细手册参考:https://www.gnu.org/software/gdb/documentation/
2.2.3 剑池 CDK
剑池 CDK 是玄铁 CPU 的开发环境,集成了编辑、编译、调试等功能,便于开发者使用。本章节简要介绍以下 CDK 的调试功能,如下图所示:
图 2.5 剑池 CDK 调试界面
截图中基本上涵盖了日常使用到的调试功能:
寄存器读写
反汇编查看
源码对应
断点管理
变量查看
调试控制等
详细调试手册请查看剑池 CDK 帮助文档
2.2.4 CPF
CPF(C-SKY Profiling analysis utils)是一套针对玄铁 CPU 应用程序的性能分析工具,包含了一系列记录和分析的工具。CPF 基于 T-Head trace(目前仅 T-Head qemu 支持 T-Head trace 功能)进行分析,通过 T-Headtrace 硬件能够非侵入式的获取 CPU 运行时的信息,真实反映 CPU 的运行轨迹。借助于 CPF,开发者可以提高开发效率,优化系统设计。
图 2.6 CPF report 结果
如图 2.6 所示,这是一个 helloworld 的打印输出示例程序,通过 CPF 工具,可以直观的看出该程序各函数在执行工程中的耗时占比,除此之外,还能看到程序执行的 cycle 数、指令数,被调用的次数等。
2.2.5 PERF
Perf 是一系列强大的性能分析工具集合。在 Linux 2.6.31 版本引入,至今 tool/perf 目录拥有 1 万多个提交,是内核开发中最活跃的几个领域之一,通过 perf 可以使用一到两行命令就完成像程序热点采样,接口调用分析,阻塞分析。
玄铁 CPU 的 PMU 单元支持了大量硬件事件计数器,包含了指令数,周期数,cache 访问,分支预测等等,图 2.7 以 memcpy 为例演示 perf 通过 PMU 或者程序执行的指令数、周期数。
tst-mem2 比 tst-mem 具有更大的循环拷贝次数。
图 2.7 perf stat –e instructions, cycles tst-mem
关于平头哥玄铁 CPU 的调试系统介绍就到这里。其他关于玄铁 CPU 调试系统的文档请参考:
RISC-V Debug Sepc: https://github.com/riscv/riscv-debug-spec
玄铁 CPU 调试技巧:https://occ.t-head.cn/community/download?id=3854517824420909056
后续我们还将为大家介绍基于玄铁 CPU 的生态芯片,如何对 RISC-V 开发板进行调试。
本文转自平头哥芯片开放社区(occ),更多详情请点击https://occ.t-head.cn/development/activities/cdk?channelName=1 。
评论