预计会有几篇较大篇幅的文章大体描述下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界面的截图。
DS-5 profiling工具的效果图示