预计会有几篇较大篇幅的文章大体描述下ARM体系结构调试系统方面的软硬件接口设计。

简述

经历过软件开发基本上都知道调试的重要性,能一次写好,并且没有BUG的软件毕竟少之又少。

 

ARM体系结构从ARMv4开始硬件支持各种调试特性,随着系统的复杂度提升,到现今的ARMv7,甚至ARMv8,ARM从硬件层面也提供了更多的调试方式。

 

本文从大方向上概述ARM调试系统的组成,包括其中的debug,trace,profiling等方面 ,又着重在调试系统的软硬件接口配合。

 

调试分类

 

从大方向上看,我们基本可以将调试总结为:

  • SD:self-hosted debug。自调试,比如直接在树莓派上,运行gdb调试应用程序。
  • ST:self-hosted trace。这个比较少见。
  • SP:self-hosted profiling。这个也比较少见,但是相对self-hosted trace 使用好用,调试上也更方便使用。
  • ED:external debug。 外部调试,SOC设计初期会更常用到,比如通过JTAG连接SOC,控制CPU调试。
  • ET:externl trace。一般由CoreSight支持,并与profiling配合使用。
  • EP:external profiling。比较常见的就是DS-5配套的profiling工具。

Self-hosted debug

自调试(self-hosted debug)在X86平台上很常见,比如大家用gdb调个PC程序,就是自调试。

ARMv8针对这块专门相对比较重视。

 

external debug

ARM毕竟以嵌入式平台为主,因此在芯片设计之初,或者firmware以及驱动开发等过程中,难免会接触到外部调试(external debug)。毕竟这时候,很可能基本的系统都还未稳定,更不可能做系统的自调试了。

常见的外部调试当然就是JTAG了,一般正版的JTAG调试器都价格不菲,当然淘宝上也有盗版的几十块钱的JLINK可以买来练练手。

如果是学习ARM 的Cortex-M系列,则可以买STM之类的开发板,板子默认集成调试模块,连上一根USB线就可以用了。

profiling

profiling估计大多数人都接触的比较少,主要是性能调优阶段会有类似的需求。关心这阶段的,大多是开发应用或者平台中间件的居多。

对Cortex-A系列的CPU,有会有高性能和低消耗,以及可靠性的需求。

最常见的ARM的profiling工具大概就是DS-5中的工具吧,下图是profiling界面的截图。

rancher arm架构镜像 arm inspector_性能调优

DS-5 profiling工具的效果图示