logo资料库

GDB通过JTAG接口连接调试目标平台.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
DESIGN STRATEGIES AND METHODOLOGIES GDB通过JTAG接口连接 调试目标平台 作 者: Steven Horne RealView调试工具 产品经理 ARM 公司 概述 现 在 越 来 越 多 的 O E M 厂 商 使 用 GNU的工具链来开发基于嵌入式Linux系 统的应用程序。传统的设计流程是用 GDB的调试器通过专门的通信端口,比 如串口或者以太网口,连接驻留在目标 平台上的GDB stub/server程序。但是现 在的大多数产品追求低成本,所以用一 个ICE通过JTAG口来连接GDB调试器可 以省去专门的通信调试端口,以达到节 省系统开发成本的目的。 步执行,设置断点,检查内存,或者其 他的一些调试操作。 G D B 通 常 需 要 一 些 特 定 的 程 序 (GDB stub)驻留在目标平台上,使得 主机能够通过一定的通信协议对目标平台 进行调试操作,比如访问目标平台的寄存 器或者内存。像Linux这样的操作系统, 支持通过运行一个单独的gdbserver进 程,来完成和运行着GDB的主机的通信 连接,比如TCP/IP协议。 本文总结了一些GDB/JTAG-ICE的 配置连接方式,和这些连接方式组合带 来的好处,比如支持非侵入性的(non- intrusive)Linux内核引导,甚至Linux应用 程序和设备驱动的同时开发调试等其他各 种调试需求。 介绍 L i n u x 操 作 系 统 环 境 通 常 都 是 和 Unix的桌面应用程序开发联系起来的, 但是随着嵌入式Linux内核的日益普及, 嵌入式开发者们越来越多的也开始使用 GNU的免费开发工具链,包括GCC- GNU的编译器,和GDB-源代码级的调 试工具。 GDB可以远程调试程序,在主机上运 行GDB客户端通过串口、以太网口或者 其他的一些通信端口,和需要调试的目 要得到运行在目标平台上的GDB stub或者gdbserver这些程序,首先要把 这些代码移植到目标平台上,这是一个 必须在移植嵌入式Linux内核前做的一个 额外的工作。而且怎么样把这些代码烧录 到目标平台也是一个需要考虑的问题,因 为这时我们不能像通常那样通过GDB客 户端来烧写到目标平台。 现 在 有 了 一 种 替 代 传 统 的 使 用 串 口(缓慢)或者以太网口(昂贵)的方 法。本文将描述怎样使GDB连接ICE通过 JTAG来控制调试目标平台的。 使用JTAG运行控制单元的几种方式 下图列举了使用主机运行GDB, JTAG运行控制单元,连接目标平台的几 种方式。(为了更好的理解JTAG运行控 制单元,本文在图中用了RealView ICE来 标平台相连接,使得开发者能够完成单 代替) Information Quarterly [43] Number 4, Spring 2006
DESIGN STRATEGIES AND METHODOLOGIES 调试操作,而不会互相影响。 RVI还可以同时连接和调试有多个 CPU内核的目标平台,但是如果这个目 标平台上有非ARM的CPU内核的话, JTAG的扫描时可能会遇到问题。所以, 在使用GDB连接RVI时,告诉RVI哪个设 备是需要调试的,还有JTAG的时钟频率 之类必要的信息是非常重要的。 目前为止,用于GDB的JTAG连接只 能调试单一的CPU,并且这个连接是不能 像通常那样共用的,比如RVD可以调试另 一个DSP,但不能在GDB调试CPU的时候 去连接这个CPU内核。 第一种的Run/Stop Debug方式和传 高性能。 统的嵌入式软件调试很类似,都是非侵 上图的前三个例子都是直接地实现。 入性的。JTAG运行控制单元(RVI)提 第四个例子实际上就是把JTAG控制单元 供了GDB一组协议能够控制目标平台的 变成以太网桥接。作为连接目标平台的 一个关于RVI配置过程的例子: 1. 设置JTAG扫描链的时钟频率(包括 CPU,使得CPU在调试分析它的内部状 stub程序的功能的扩展,DCC还可以在普 固定频率和自适应时钟) 态时是停止运行的。 通的GDB协议上负载IP包。当然,这时候 目标平台上必须要运行一个IP协议栈,比 2. 配置JTAG扫描链(指出哪里是什么) 3. 选择JTAG扫描链上的设备(哪一个 注意:在这种方式里,当CPU停止 如Linux这样的操作系统。 ARM CPU) 运行时,中断处理程序也同时停止运行, 这在某些实时系统调试中并不是总能带来 当然如果要达到高性能,还有一些技 方便。 术难题需要SoC和工具开发厂商克服。 (比如JTAG的时钟频率问题) 在第二种Non-stop Debug中,开 源代码GDB stub可以自行修改以便于 连接和配置GDB和JTAG: 4. 注意:因为GDB需要处理器在一个 已知的状态下连接,所以我们要先 reset处理器,然后把寄存器归零。 5. 取消选定的设备(因为在第四步已 经配置好了处理器的状态),比 如,取消RVD的连接。 使用ARM CPU提供的调试通讯信道( DCC),这样免去了使用一个专门的串 口或者以太网口的开销。调试主机上的 GDB通过驻留在RealView ICE上的TCP/ IP协议和目标平台上的GDB stub通信, 由DCC专门负载GDB协议包的传送。 这样的一个stub程序可以是一个为 目标平台专门链接的单独的GDB stub代 码段,也可以是OS的一个工具程序,比 如Linux的内核调试器:KGDB,就像上 图第三例所描述的那样。 注意:在用SoC Designer这个工具 时,请记得连接DCC的中断信号以保证 当GDB连接远程调试目标平台时, 以上步骤可以由自动脚本来完成。 它假定认为目标平台的CPU已经配置好 可供使用了,然后它会立即询问目标平 GDB通过RVI来连接目标平台的步骤 台(类似关于寄存器的值之类的信息), 也是和通过串口或者以太网口来连接时类 这时用户才可以输入调试命令。因此, 似的。 JTAG控制单元必须先被配置好后GDB才 1. 连接目标平台 能连接目标平台,一般这样的配置可以 2. 装载需要调试的程序 通过一系列的初始化流程来完成,比如 3. 运行程序 RealView ICE(RVI)就可以通过telnet输入 4. 开始调试程序 指令来完成配置。当然,用户也可以使用 这些步骤也可以通过设置脚本来自动 一些已有的脚本来完成这些操作。 完成。 RVI还支持多个调试终端连接,比如 对于多内核调试,可以用多个终端 可以由GDB和RVD(RealView Debuger)同 窗口对应于每一个CPU核,分别连接, 时连接,他们在各自的环境里完成自己的 并且在各自的GDB调试终端窗口分别调 Information Quarterly [44] Number 4, Spring 2006
DESIGN STRATEGIES AND METHODOLOGIES 试。RVI本身是可以同步开始或者停止各 少了对目标平台内存的需求量,这同样 发变得容易而且有效,比如: 个CPU的运行的。但是对于用GDB终端 也减少了目标平台的开发开销。而且这 的调试方式来说,这么做是不可能的,我 种模式不需要像以往的GDB stub方案那 们还是必须在每个终端串口分别进行。 样占用目标平台的CPU的运行时间,这 对于一些非常重要的,需要运行时有高 性能要求的程序代码来说,调试起来是 非常有利的。 用RealView ICE来实现上面所说的 几种方式,对于开发者来说是非常简单 而且有效的。对于同时要进行Linux内核 级调试和应用程序调试的开发来说,用 用GDB客户端连接ARM1136用于应 用程序的调试 RVD和RVT(RealView Trace)对一个 ARM966的内核做实时的跟踪调试 专门的DSP调试工具对另一块DSP同 时做信号处理方面的调试 这对于多内核的开发解决方案来说, 提供了分析核与核之间内部通信,负载均 衡方面的调试分析。 总结:优势和配置 以上讨论了如何用一个JTAG控制单元 成功的实现和目标平台以及GDB的连接。 从 硬 件 的 角 度 来 看 , 这 种 方 式 在 未来可以使得目标平台省去串口和以太 网口,转而使用已经得到广泛应用的 JTAG接口,降低系统成本,节省板上空 间。开发的开销也随着对GDB针对性配 置要求级别的降低而减少,比如现在就 不需要目标平台上专门的调试串口了。 一个RealView Debugger和一个GDB同 在 一 个 有 着 多 内 核 的 高 度 整 合 的 时在主机段运行调试的方式是非常有效 ASIC中,不同的开发小组可能只专注于 的,这也是RVI带来的另一个好处。 特定的内核进行开发,上述的这种方案 RVI同时也支持多内核级别的调试, 新他们各自针对于特定核的内码并 使得每个开发小组都可以简单的更 非侵入性的Run/Stop调试模式还减 这使得开发者感兴趣的一些内核组合的开 进行调试。 Information Quarterly [45] Number 4, Spring 2006
分享到:
收藏