第
1
章
DS-5 概述
DS5 是 ARM 官方推出的基于 Eclipse 的调试工具,可以用来调试所有 ARM 处理 器,包括 CortexA、CortexR 和 CortexM 系列,以及更早期的 ARM9 和 ARM11 等处 理器。它是和 ARM CPU 的专家们一起开发的,所以它比市场上其他的调试器能更早、 更好地支持 ARM 处理器。1.1 DS5 介绍
DS5 的功能非常强大,除了常见的最基本的 JTAG 调试功能外,如设置断点、控制 CPU 运行和停止、单步调试等,还含有很多特色功能,如可以无缝地运行 ARM 的 FastModel;在不打断 CPU 执行的条件下获取 CPU 执行的指令和数据信息;用来分析 系统软硬件性能的 Streamline;芯片的验证和启动等。下面是 DS5 的一些常见功能。 l 加载调试的代码镜像和符号表。 l 运行代码镜像。 l 设置断点和观察点。 l 代码和指令的单步调试。 l 变量、寄存器和内存的访问。 l 程序调用、运行的栈信息。 l 支持异常的处理和 Linux 系统的异常信号。 支持调试 Linux 的多线程应用。l 支持调试 Linux 内核和驱动模块,启动代码和内核的移植。 l 支持裸操作系统的对称多处理器的调试。 l 支持像 gdb 风格的命令行输入。
1.2 DS5 debugger 调试器
DS5 是一个基于 Eclipse 的图形化界面,如图 11 所示。DS5 调试器完全支持所有 的 ARM 处理器、ARM 开发板和 ARM 虚拟平台 FastModel 的连接和调试。全面的图形 化界面和直观的视图窗口可以方便地调试 Linux、Android 和裸机程序,包括单步调试和 软/硬件断点的设置,反汇编代码和源程序的同步,堆栈的调用管理,CPU 寄存器、内 存、变量和线程的显示和操作。 图 11 DS5 调试器视图 DS5 还可以实现项目的管理和调试, 在 DS5 的软件管理窗口中可以方便地进行代 码的查看、查找和编辑工作,在调试管理窗口中进行程序的单步调试或运行到断点,在 其他窗口中可以观察程序指令执行的最新信息。 除了视觉窗口外,DS5 还提供了一个 gdb 风格的命令行,可以在这个命令行中直 接输入命令来控制整个系统的运行。1.3 DS5 虚拟平台 FVP
FVP 是 ARM 开发的一种虚拟平台, 可以在没有实际硬件的情况下进行软件的开发、 验证和调试。这使得软件开发人员可以更早地介入到项目的开发中,加快整个项目的开 发速度,缩短产品的上市周期。比如 ARM 最近几年推出了 Aarch64 位架构,以前的软 件和应用程序都是 32 位的, 有可能市场上 64 位的 ARM CPU 或者基于 ARM 64 位 CPU 的开发板还没有出来, 这时软件开发人员可以使用 ARM 的 FVP 虚拟平台进行先期的软 件移植和验证工作,等有了实际硬件平台后,再在硬件平台上运行和进行性能调试,就 显得非常方便了。该模型与真实的硬件有一定的差别,比如不能提供精确时序的仿真、 底层硬件的交互和实际外设的访问或操作。 DS5 安装好后,在 DS5 安装路径的 example 目录下可以找到 ARM 提供的虚拟平 台应用实例,目前提供例子的有 ARMv8 架构(即 ARM 的 64 位架构)和 ARMv7 的 32 位架构虚拟平台,包括 CortexA9、CortexA7、CortexA15 等。1.4 DS5 的编译器
最新的 DS5 软件版本一旦安装好后就包含了 3 个编译器:ARM 编译器 5.0、ARM 编译器 6.0 和 GNU 的 gcc 编译器, 所有这些编译器都可以在安装目录的 DS5/sw 下找到。 1.4.1 ARM 编译器 5.0 ARM 编译器 5.0 也就是我们以前常说的 armcc,ARM 在这个编译器上的开发已经 有几十年的历史, 在市场上的应用非常广泛和稳定, 主要适用于 ARM 原来 32 位架构的 处理器,用来编译裸机嵌入式系统的程序、固件或库,包括的编译工具和功能如下: (1)armar:库管理工具,能将多个 ELF 格式的目标文件集中到一起,并存入归档 文件或库中维护。用这样的归档文件或库,可替代多个 ELF 文件传递给链接程序,还可 以提供给第三方开发应用程序。 (2)armasm:汇编工具,汇编 ARM 和 Thumb 汇编语言程序。 (3)armcc:编译工具,编译 C/C++代码,支持 inline 和嵌入汇编,还支持 NEON 向量编译程序。 (4)armlink:链接工具,将一个或多个目标文件合并成一个或多个目标,生成一 个可执行程序文件。 (5)fromelf:Image 镜像转换工具,也能对输入的镜像文件产生文本信息,如反汇 编、代码和数据区的大小。1.4.2 ARM 编译器 6.0 ARM 编译器 6.0 是基于现代开源编译器架构 LLVM/Clang 设计的, 它汲取了 LLVM 里面的精华部分,同时 ARM 加上了为之优化过的很多库,最终在代码密度和性能之间 取得了很好的平衡。它的语法格式跟之前的编译器 5.0 是不一样的,更符合 GNU 的语 法规范。 目前主要适用于 ARM 最新的 64 位架构的处理器也是用来编译裸机嵌入式系统 的程序、固件或库,它同样包含 armar、armlink、fromelf 等编译工具,和表 11 中介绍 的功能是一样的, 不同的是编译器 6.0 下的这些编译工具可同时支持 ARM 的 32 位和 64 位架构,但只能编译成 32 位的应用。 特别要指出 armasm 这个编译工具,它主要是用来支持原来编译器 5.0 中的汇编语 法格式,方便把之前 32 位 ARM 的汇编代码快速地在 64 位架构下编译运行。如果项目 需要重新写汇编程序,则建议直接按照编译器 6.0 的语法格式来写,然后用 armclang 进 行编译。 Armclang 可以用来编译 C/C++代码,同时因为它还内嵌了一个汇编器, 所以也可以 用来编译符合 GNU 语法的汇编程序。如果是之前的汇编程序,则要用 armasm。这里简 单的举个例子来说明下 armclang 的使用方法: 比如编译 C 代码:
armclang c O1 o hello_world.o xc std=c90 g hello_world.c 选项说明如下: c:告诉编译器只编译,不链接。 O1:告诉编译器使用的优化选项。 xc:告诉编译器编译的源代码是 C。 std=c90:告诉编译器 C 代码是符合 C90 规范的。 g:告诉编译器添加调试信息。 o:输出的目标文件名。 详细的使用方法请参照 ARM 的官方文档和 LLVM 官网http://www.llvm.org。 1.4.3 GNU 编译器 DS5 的发行版本中还包含了一个开源的 GNU GCC 编译工具,主要用来编译 Linux 内核、Linux 驱动程序、上层应用和 Android。 这些编译工具可以在安装目录的 DS5/sw/gcc/bin 下找到,也可以通过 Linaro 这个 网站直接免费下载。这些编译工具在 DS5 的发行版中有 Linux 版本,也有 Windows 版 本,具体由下载的 DS5 是 Windows 版本还是 Linux 版本决定,主要工具如表 11 所示, 可以在命令行或 DS5 Eclipse 下使用这些工具来编译程序。
表 11 GNU 编译工具 工具 描述 armlinuxgnueabihfar GNU 库管理工具 armlinuxgnueabihfas GNU 汇编器 armlinuxgnueabihfgcc GNU C 编译器 armlinuxgnueabihfg++ GNU C++编译器 armlinuxgnueabihfld GNU 链接器 详细使用文档可参照 DS5 安装路径下的 documents/gcc。
1.5 DS5 Streamline
Streamline 是 DS5 中的一个图形化性能分析工具。它集成内核驱动程序、目标守护 进程和一个基于 Eclipse 的界面,能将抽样采集到的数据转换成报告格式,以可视化和 统计表格的形式显示,方便用户发现系统的资源利用状况和系统的瓶颈,是一个很好的 性能分析和优化工具。Streamline 使用内核级的硬件性能计数器以提供系统资源的精确 表示,除了可以显示 CPU 和 Cache 命中率、分支跳转指令数等相关资源信息外,还可 以显示分析 Mali GPU 的信息,如图 12 所示。 图 12 DS5 的图形化性能分析工具1.6 DS5 硬件调试器 DSTREAM
DSTREAM 是 ARM 官方开发的一款硬件调试工具,可以在基于 ARM 设计的 CPU 上完成调试和跟踪任务,允许调试软件通过 JTAG 或串行调试 SWD 硬件接口接到基于 ARM CPU 设计的开发板上进行调试, 也可以在不打断 CPU 执行的情况下获取指令和数 据信息进行调试分析和代码优化。 DSTREAM(如图 13 所示)这个硬件调试器主要包含: l DSTREAM 硬件调试单元。 l DSTREAM 硬件调试分析接口。 l 电源、USB 和以太网接口。 图 13 硬件调试器 DSTREAM ARM 还为 DSTREAM 这个硬件调试器提供了一系列硬件配置工具,使用户可以配 置和升级 DSTREAM,包括: l Debug Hardware Config IP:用于配置 DSTREAM 的 IP 地址。 l Debug Hardware Update:用于更新 DSTREAM 的固件。的硬件配置信息并生成文件,以便导入 DS5 生成此设备的配置数据库。但这 个工具目前已被 DS5 中集成的平台配置编辑器 (Platform Configuration Editor, PCE)所取代,我们会在后续章节中详细介绍 PCE 的使用。
1.7 DS5 的版本管理
DS5 目前有 3 种版本:社区版、专业版和旗舰版,表 12 列出了这 3 个版本之间的 详细区别,可根据实际项目情况选择相应的版本。 表 12 DS5 的版本比较 社区版 专业版 旗舰版 编译器 ARM 编译器 5.0 Ö Ö ARM 编译器 6.0 支持 ARMv7A Ö 调试 最高支持 ARMv7 最高支持 ARMv8 裸板、RTOSaware 调试 Ö Ö ETM、PTM、ITM、STM 信息跟踪 Ö Ö Linux、Android 本地库和应用程序 Ö Ö ÖLinux 应用程序的 Rewind 调试 Ö 最高支持 ARMv7 系统系能分析 最高支持 ARMv7 最高支持 ARMv8 性能图表显示 受限 Ö Ö 函数剖析功能 Ö Ö Ö 剖析和多核视觉显示 Ö Ö 功耗数据 Ö Ö CortexM DWT/ITM 数据收集 Ö Ö 虚拟平台 CortexA9MP4 FVP Ö Ö AEM ARMv8A VE MP4 FVP Ö