2. TRACE32工具链与目标板连接

在嵌入式Linux内核调试中,TRACE32并不是一个单一软件,而是由PC端软件、调试探针、目标接口与初始化脚本共同构成的调试链路。任何一环配置不当,都会表现为“连不上”“连上但跑飞”“多核只停一个核”等现象。本节围绕这条链路的搭建展开:先完成TRACE32安装与授权配置,再根据目标SoC选择调试探针,随后完成JTAG/SWD物理连接,最后用初始化脚本把多核与AMP/SMP目标带入可控状态。

一、TRACE32安装与基础配置

TRACE32的PC端安装通常包含两部分:安装包(如t32_2024.09)与授权文件。安装完成后,目录结构大致为:bin/存放可执行程序,config/存放配置文件,demo/存放示例脚本。以Linux主机为例,安装后需确认可执行文件权限,并设置环境变量:

export T32SYS=/opt/t32
export PATH=$T32SYS/bin:$PATH
export T32CONFIG=$T32SYS/config

授权方面,TRACE32支持USB加密狗与软授权两种方式。软授权需将.lic文件放入config/目录,并在启动时通过-lic参数指定。启动命令示例:

t32marm -c config.t32 -lic /opt/t32/config/trace32.lic

其中t32marm表示ARM架构调试程序,若目标为ARM64则使用t32marm64。启动后应能在TRACE32主界面看到探针识别状态,若显示“No debugger found”,说明PC与探针通信未建立,需检查USB驱动或网络配置。

二、调试探针选型

TRACE32探针按接口与性能分为多个系列,选型时主要看三点:目标接口类型、调试通道带宽、是否支持多核同步。常见型号对比如下:

型号接口典型场景多核支持
LA-3505JTAG/SWD单核MCU、低带宽调试有限
LA-4505JTAG/SWD/ETM中端SoC、指令跟踪支持
LA-7705JTAG/SWD/ETM/ETB多核AMP/SMP、Linux内核完整支持

对于嵌入式Linux内核调试,推荐至少选择支持ETM指令跟踪与多核同步的型号。若目标板仅引出SWD两线接口,则需确认探针是否支持SWD模式,并注意SWD在高速下对布线更敏感。

三、JTAG/SWD物理连接

JTAG标准为20针或14针接口,SWD通常为10针或4针。连接前必须确认目标板JTAG/SWD接口的引脚定义,尤其是VTref参考电压与nTRST复位信号。典型20针JTAG引脚中,关键信号包括:

  • TCK:时钟,由探针驱动;
  • TMS:模式选择;
  • TDI:数据输入;
  • TDO:数据输出;
  • VTref:目标板参考电压,用于电平匹配;
  • nSRST:系统复位,可选但建议连接。

连接时需注意:探针地线与目标板地线必须共地;VTref必须接到目标板I/O电压,否则探针无法识别目标电平。若目标板JTAG接口被复用为GPIO,需在目标板启动阶段通过引脚复用寄存器将其切回JTAG功能,否则探针无法建立连接。

SWD模式下只需SWCLK、SWDIO、GND、VTref四根线,但SWDIO需上拉,SWCLK需下拉,否则空闲电平不确定会导致连接失败。

四、多核与AMP/SMP目标初始化脚本

多核目标上电后,各核可能处于不同状态:有的核在ROM中等待,有的核已被BootROM释放,有的核处于WFE/WFI低功耗状态。TRACE32需要通过初始化脚本依次完成:复位控制、核间同步、内存映射配置、符号加载。以下是一个面向四核ARM64 SMP目标的初始化脚本示例:

; 1. 系统复位与探针同步
SYStem.RESet
SYStem.CPU Cortex-A55
SYStem.JtagClock 10MHz
SYStem.Mode Attach

; 2. 多核配置:四核SMP
SYStem.CONFIG.CORE 0 0 0
SYStem.CONFIG.CORE 1 0 1
SYStem.CONFIG.CORE 2 0 2
SYStem.CONFIG.CORE 3 0 3
SYStem.CONFIG.SMP ON

; 3. 内存映射:DDR与设备区
MMU.ON
MMU.MAP 0x00000000--0x3FFFFFFF 0x00000000
MMU.MAP 0x40000000--0x7FFFFFFF 0x40000000

; 4. 加载内核符号
Data.LOAD.Elf vmlinux /NoCode

; 5. 停止所有核并同步
SYStem.Mode Go
WAIT 200ms
SYStem.Mode Attach
Break

对于AMP架构,各核运行独立操作系统或裸机程序,初始化脚本需分别指定每个核的入口地址与符号文件:

; AMP:核0运行Linux,核1运行RTOS
SYStem.CONFIG.CORE 0 0 0
SYStem.CONFIG.CORE 1 0 1
SYStem.CONFIG.AMP ON
SYStem.CONFIG.CORE 0 /Symbols linux.elf
SYStem.CONFIG.CORE 1 /Symbols rtos.elf

脚本执行后,应通过SYStem.Mode与SYStem.CONFIG命令确认各核状态。若某核显示“Running”而无法停止,通常是该核未进入调试模式,需检查目标板是否将调试使能引脚拉高,或该核是否被安全启动流程锁定。

TRACE32 调试链路与多核初始化 PC端 TRACE32 t32marm64 可执行程序 config.t32 配置文件 .lic 授权文件 初始化脚本 .cmm 调试探针 LA-7705 / LA-4505 JTAG / SWD / ETM 多核同步通道 VTref 电平匹配 目标板 SoC Cortex-A55 ×4 SMP JTAG/SWD 引脚复用 DDR / 设备内存映射 vmlinux 符号加载 USB/以太网 JTAG/SWD 多核初始化脚本执行顺序 ① 系统复位 SYStem.RESet SYStem.CPU ② 多核配置 CORE 0~3 SMP/AMP ON ③ 内存映射 MMU.ON MMU.MAP ④ 符号加载 Data.LOAD.Elf vmlinux ⑤ 运行与停止同步 SYStem.Mode Go → WAIT → Attach → Break 确认各核状态:Running / Stopped 结果判断 全部核可停 → 链路正常;某核 Running 无法停 → 检查调试使能引脚 / 安全启动锁定 / 核间同步配置 注:脚本参数为教学示例,实际值需根据目标SoC手册与板级设计调整

完成上述配置后,可通过SYStem.CONFIG查看各核状态,通过Data.LOAD.Elf确认符号是否加载成功。若内核已启动,可在Break后使用Frame或List查看当前执行位置,验证调试链路是否真正可用。多核场景下,建议先用SYStem.Mode Attach附着而不复位,避免破坏已运行的系统状态;只有在需要从复位开始调试时才使用SYStem.RESet。

若目标板使用安全启动,JTAG/SWD可能被熔丝或安全策略关闭,此时探针无法建立连接。需先确认芯片安全状态,必要时通过量产工具或安全调试授权解锁。