2. TRACE32 与目标板连接配置

TRACE32 能否稳定接管 Linux 启动链,第一步并不取决于脚本写得多好,而取决于调试器与目标板之间的物理链路和初始通信是否可靠。连接配置本质上是一条从主机到 CPU 调试逻辑的“信号链”:主机上的 TRACE32 软件通过 USB 或以太网连接调试器硬件,调试器再把 JTAG/SWD 时序驱动到目标 SoC 的调试端口,最终访问内核的调试寄存器。这条链上任何一环参数不匹配,都会表现为“连不上”“识别不到核”或“一连就复位”。

调试器硬件接口与主机侧连接

Lauterbach 常见调试器包括基础型 Debugger(如 LA-3505)、带跟踪的 PowerTrace 系列,以及面向多核的 CombiProbe。主机侧连接方式主要有两种:USB 和以太网。USB 适合单机桌面调试,即插即用;以太网适合远程实验室或需要长时间稳定运行的场景,通常给调试器配置固定 IP,例如 192.168.1.50,主机侧通过 SYStem.CONFIG 或 TRACE32 的 Config 菜单指定该地址。

主机与调试器之间是“命令/数据通道”,调试器与目标板之间才是真正的“调试信号通道”。因此主机侧连不上,问题通常在 USB 驱动、网络或防火墙;而主机能连上调试器却连不上目标核,问题就落在 JTAG/SWD 配置、目标芯片选择和复位方式上。区分这两层,是排障的第一原则。

JTAG/SWD 配置与目标芯片选择

JTAG 使用 TCK、TMS、TDI、TDO 四线(外加可选的 TRST),支持多器件菊花链;SWD 使用 SWCLK 和 SWDIO 两线,引脚更省、时序更简单,在 ARM Cortex 系列上非常常见。选择哪种接口,取决于目标 SoC 的调试端口设计。对于多数 ARM Linux 平台,SWD 已足够完成内核启动调试;若需要访问多个 TAP 或使用边界扫描,则用 JTAG。

在 TRACE32 中,接口配置通过 SYStem.CONFIG 命令族完成。一个典型的 SWD 配置片段如下:

SYStem.CONFIG DEBUGPORTTYPE SWD
SYStem.CONFIG SWDPIN 2.      ; 使用 2 线 SWD
SYStem.CONFIG TCKSPEED 5MHz  ; 初始时钟,稳定后可提高
SYStem.CPU CortexA53         ; 目标芯片/核选择
SYStem.CONFIG SLAVE 0        ; 多核时选择目标核
SYStem.Mode Attach           ; 附着,不复位目标

目标芯片选择(SYStem.CPU)决定了 TRACE32 加载哪套内核描述文件,包括调试寄存器布局、断点资源数量和内存映射。选错芯片最典型的症状是:能识别到 TAP,但读出的 CPU ID 与预期不符,或断点设置后无法命中。此时应先用 SYStem.CPU 列出候选,再对照 SoC 手册确认内核型号,例如 Cortex-A53 与 Cortex-A72 的调试寄存器并不完全通用。

TCK 速度是另一个关键参数。初始连接建议用较低速度(如 1~5 MHz),因为目标板走线、上拉电阻和电源状态都会影响信号完整性。连接稳定后再逐步提高到 10~25 MHz。若提高后出现“随机断连”或“读寄存器偶发错误”,说明信号裕量不足,应回退速度或检查 JTAG 排线长度与地线回路。

复位方式与初始通信建立

复位方式直接决定调试器“从哪个时刻开始观察”。常见模式有三种:

  • Attach(附着):不复位目标,直接连接正在运行的 CPU。适合调试已经启动的系统,但无法观察最早期的启动代码。
  • Reset(复位):调试器拉低目标复位引脚或通过调试逻辑触发内核复位,CPU 停在复位向量处。这是调试 BootROM、SPL、U-Boot 第一阶段的标准做法。
  • System.Up / Go:复位后让 CPU 运行,调试器保持连接,用于观察运行中的状态。

对于 Linux 启动链调试,推荐流程是:先 SYStem.Mode Attach 确认物理链路和芯片识别正常,再切换到 SYStem.Mode Reset 从复位向量开始。这样可以把“链路问题”和“启动问题”分开定位。

初始通信建立成功的判断依据很明确:执行 SYStem.Up 或 SYStem.Mode Reset 后,TRACE32 状态栏显示 running 或 stopped,且能读出 CPU ID、PC 值和内核寄存器。若报 debug port fail,优先检查 SWDIO/SWCLK 接线、目标是否供电、复位引脚是否被外部拉死;若报 CPU not found,则检查 SYStem.CPU 与 SLAVE 选择。

建议把连接配置固化为一个 .cmm 脚本,每次调试前先执行它完成接口、芯片、复位和时钟设置,避免手工输入遗漏参数。
TRACE32 与目标板连接信号链 主机 PC TRACE32 软件 USB / 以太网 调试器硬件 Debugger / PowerTrace JTAG / SWD 驱动 目标板 SoC Cortex-A53 / A72 调试端口 TAP / DAP → 内核调试寄存器 命令/数据 TCK/TMS/TDI/TDO 或 SWCLK/SWDIO 关键配置参数 接口类型 JTAG / SWD DEBUGPORTTYPE 目标芯片 SYStem.CPU SLAVE 核选择 时钟速度 TCKSPEED 初始 1~5 MHz 复位方式 Attach / Reset SYStem.Mode 初始通信结果判读 成功 状态 running/stopped 可读 CPU ID / PC debug port fail 查 SWDIO/SWCLK 接线 查供电与复位引脚 CPU not found 查 SYStem.CPU 查 SLAVE 核编号

连接配置检查清单

把上述要点整理成一份可执行的检查清单,每次连接新板子时按顺序核对,可以显著减少无效调试时间:

检查项命令/对象期望结果
主机到调试器USB 或 IP 配置TRACE32 能识别调试器型号
接口类型SYStem.CONFIG DEBUGPORTTYPE与目标调试端口一致
目标芯片SYStem.CPU读出的 CPU ID 与手册一致
多核选择SYStem.CONFIG SLAVE目标核可单独访问
时钟速度SYStem.CONFIG TCKSPEED低速连接稳定后再提高
复位方式SYStem.Mode Attach/Reset状态栏显示 stopped/running
寄存器访问Register.viewPC、SP 等值合理可读

完成以上配置后,调试器与目标板之间就建立了一条可观察、可控制的调试通道。后续无论是设置硬件断点观察 BootROM 的第一条指令,还是在 U-Boot 阶段暂停查看环境变量,都建立在这条通道稳定工作的基础之上。连接配置不是一次性的“开场动作”,而是整个 Linux 启动链调试过程中随时可能被复位、时钟切换或电源状态变化打断的持续前提,因此建议把配置脚本化并纳入版本管理。