介绍

Trace32 是一款功能强大的调试工具,它可以用于分析嵌入式系统的运行状态。Trace32 支持多种处理器架构和操作系统,可以帮助开发人员在调试过程中快速定位问题并进行调试。

在死机 dump 问题上,常见的一种分析手段是离线 dump 解析。离线 dump 解析是指在系统死机后,将系统内存中的数据保存到文件中,然后使用调试工具对这些数据进行分析。Trace32 提供了 Simulators 软件,可以搭建离线 dump 分析环境,帮助开发人员快速解决问题。

安装

使用 Trace32 Simulators 搭建离线 dump 分析环境的步骤如下:

  1. 下载 Trace32 Simulators 软件和内核解析脚本

    首先需要从官网下载 Trace32 Simulators 软件和内核解析脚本,访问 http://www.lauterbach.com/,选择Downloads->Evaluation Software->download

    下载 Simulator for ARM/CORTEX/XSCALE 压缩包。文件是 simarm.zip。

    访问 http://www.lauterbach.com/,选择Downloads->Start-Up and other Scripts

    在 ARM 标题下找到 freertos 并下载。文件是 kernel-arm-freertos_20230309130728_all_files.zip。

  2. 安装 Trace32 Simulators

    解压 simarm.zip

    解压 kernel-arm-freertos_20230309130728_all_files.zip 文件到 freertos目录

    创建 8910dump 文件夹,将导出的 dump 文件和 elf 文件放到这个文件夹。

  3. 配置 Trace32 Simulators

    将dump中的 ap.cmm 脚本文件重命名为 8910_ap.cmm,并修改里面 bin 和 elf 文件的加载路径,修改 kernel 解析脚本的路径,并配置启动自动打开某些窗口。具体修改可以参考下文中的脚本。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    
    ; ARM load script
    screen.on
    SYStem.RESet
    SYStem.CPU Cortexa5
    SYStem.Up
    
    &psd=os.psd()
    &dump_dir="8910dump"
    &ap_elf_file="app.elf"
    &cp_elf_file="8915DM_cat1_open.elf"
    
    DATA.LOAD.ELF &dump_dir\&ap_elf_file /NOCLEAR
    DATA.LOAD.ELF &dump_dir\&cp_elf_file /NOCLEAR
    
    DATA.LOAD.BINARY &dump_dir\80000000.bin 0x80000000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\00000000.bin 0x0 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\00800000.bin 0x800000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\40080000.bin 0x40080000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50000000.bin 0x50000000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50030000.bin 0x50030000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50080000.bin 0x50080000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50081000.bin 0x50081000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50083000.bin 0x50083000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50084000.bin 0x50084000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50090000.bin 0x50090000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50094000.bin 0x50094000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\500a0000.bin 0x500a0000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50100000.bin 0x50100000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50104000.bin 0x50104000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50105000.bin 0x50105000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50109000.bin 0x50109000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\5010a004.bin 0x5010a004 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\5010c000.bin 0x5010c000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\50308000.bin 0x50308000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\08800000.bin 0x8800000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\08800800.bin 0x8800800 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\08808000.bin 0x8808000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\08809000.bin 0x8809000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\0880e000.bin 0x880e000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\0880f004.bin 0x880f004 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\08814000.bin 0x8814000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\08815000.bin 0x8815000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\09000000.bin 0x9000000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\090c0000.bin 0x90c0000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25000000.bin 0x25000000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25100000.bin 0x25100000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25200000.bin 0x25200000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25300000.bin 0x25300000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25400000.bin 0x25400000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25500000.bin 0x25500000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25600000.bin 0x25600000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25700000.bin 0x25700000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25800000.bin 0x25800000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25900000.bin 0x25900000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25a00000.bin 0x25a00000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\25b00000.bin 0x25b00000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\26000000.bin 0x26000000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\26000800.bin 0x26000800 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\27000000.bin 0x27000000 /NOCLEAR
    DATA.LOAD.BINARY &dump_dir\400a0000.bin 0x400a0000 /NOCLEAR
    
    Register.Set cpsr Data.Long(D:0x8017c4)
    Register.Set r0 Data.Long(D:0x8017cc)
    Register.Set r1 Data.Long(D:0x8017d0)
    Register.Set r2 Data.Long(D:0x8017d4)
    Register.Set r3 Data.Long(D:0x8017d8)
    Register.Set r4 Data.Long(D:0x8017dc)
    Register.Set r5 Data.Long(D:0x8017e0)
    Register.Set r6 Data.Long(D:0x8017e4)
    Register.Set r7 Data.Long(D:0x8017e8)
    Register.Set r8 Data.Long(D:0x8017ec)
    Register.Set r9 Data.Long(D:0x8017f0)
    Register.Set r10 Data.Long(D:0x8017f4)
    Register.Set r11 Data.Long(D:0x8017f8)
    Register.Set r12 Data.Long(D:0x8017fc)
    Register.Set r13 Data.Long(D:0x8017b8)
    Register.Set r14 Data.Long(D:0x8017bc)
    Register.Set pc Data.Long(D:0x8017c8)
    Register.Set spsr 0x0
    
    MENU.REPROGRAM &psd\freertos\freertos.men
    TASK.CONFIG &psd\freertos\freertos.t32
    
    B::Var.Frame /Locals /Caller
    B::Register
    B::Data.List
    

    再编写启动脚本 T32_8910_ap.bat,工具配置就完成了。

    1
    2
    3
    4
    5
    
    @echo off
    
    echo Load Trace32
    
    start t32marm.exe -c config.t32, 8910_ap.cmm &
    

使用 Trace32 Simulators

将死机导出的 dump 、 elf 文件复制到 8910dump 目录,双击 T32_8910_ap.bat 脚本,启动 t32 和加载解析 dump。在 Trace32 界面的最终效果如下图:

总结

本文介绍了 Trace32 离线 dump 分析环境的搭建方法步骤,目的是了解这个过程,后续也考虑如何将这种调试分析方法迁移到其他平台。如果还有其他问题,欢迎评论留言。