介绍
Trace32 是一款功能强大的调试工具,它可以用于分析嵌入式系统的运行状态。Trace32 支持多种处理器架构和操作系统,可以帮助开发人员在调试过程中快速定位问题并进行调试。
在死机 dump 问题上,常见的一种分析手段是离线 dump 解析。离线 dump 解析是指在系统死机后,将系统内存中的数据保存到文件中,然后使用调试工具对这些数据进行分析。Trace32 提供了 Simulators 软件,可以搭建离线 dump 分析环境,帮助开发人员快速解决问题。
安装
使用 Trace32 Simulators 搭建离线 dump 分析环境的步骤如下:
下载 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。
安装 Trace32 Simulators
解压 simarm.zip
解压 kernel-arm-freertos_20230309130728_all_files.zip 文件到 freertos目录
创建 8910dump 文件夹,将导出的 dump 文件和 elf 文件放到这个文件夹。
配置 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 分析环境的搭建方法步骤,目的是了解这个过程,后续也考虑如何将这种调试分析方法迁移到其他平台。如果还有其他问题,欢迎评论留言。