嵌入式系统调试全攻略:硬件辅助与启动问题排查
1. 硬件辅助调试概述
在嵌入式系统开发中,调试是一个至关重要的环节。尤其是对于早期内核启动代码的调试,KGDB 往往无法胜任,因为它要在大部分底层硬件初始化代码执行后才会被初始化。而当你面临全新电路板设计、移植引导加载程序和 Linux 内核的任务时,硬件调试探针无疑是早期调试的最有效手段。
市面上有各种各样的硬件调试探针可供选择,这里以 Abatron 生产的 BDI - 2000 为例(详情可参考 www.abatron.ch)。这类设备通常被称为 JTAG 探针,因为它们采用了由联合测试行动小组(JTAG)定义的、最初用于集成电路边界扫描测试的底层通信方法。
JTAG 探针有一个小连接器,用于连接目标板,常见的是简单的方形针脚插头和带状电缆组合。大多数现代高性能 CPU 都有 JTAG 接口,用于实现软件调试功能,JTAG 探针连接到这个 CPU 的 JTAG 接口,另一端则通常通过以太网、USB 或并行端口连接到主机开发系统。
2. JTAG 探针的设置与初始化
JTAG 探针的设置可能比较复杂,这主要是由于与之相连的 CPU 的复杂性所致。当目标板通电,CPU 从复位状态恢复时,几乎所有东西都未初始化。实际上,许多处理器在开始工作前至少需要进行少量初始化。
获取初始配置到 CPU 的方法有很多。有些 CPU 通过读取硬件配置字或特定引脚的初始值来确定上电配置;另一些则依赖于从简单的非易失性存储设备(如 Flash)中的默认位置读取配置。使用 JTAG 探针时,特别是在进行新电路板设计时,必须先对 CPU 和电路板进行最低限度的初始化。很多 JTAG 探针依靠配置文件来完成