IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Trace 32 离线 dump 分析环境搭建方法

    Hacper\'s Blog发表于 2023-04-01 20:41:32
    love 0

    介绍

    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 分析环境的搭建方法步骤,目的是了解这个过程,后续也考虑如何将这种调试分析方法迁移到其他平台。如果还有其他问题,欢迎评论留言。



沪ICP备19023445号-2号
友情链接