高通平台Modemcrash分析技巧

需积分: 0 7 下载量 109 浏览量 更新于2024-06-30 收藏 81KB DOCX 举报
"本文主要介绍了高通平台下针对Modem crash的分析方法,包括在线分析和静态分析。在分析过程中,使用了jtag工具、QXDM log工具、trace32以及内存dump来获取和解析关键信息。" 在高通平台的Modem crash分析中,有两种主要的分析方式: 1. **在线分析**: - **使用JTAG工具**:通过JTAG(Joint Test Action Group)接口连接设备,可以实时监控和控制处理器,进行调试。trace32是一款常用的调试工具,它允许开发者查看CPU寄存器状态,跟踪程序执行,以及进行内存读写等操作。 - **QXDM log工具**:QXDM(Qualcomm eXtreme Debug Monitor)用于收集和分析系统日志,帮助识别问题所在。 2. **静态分析**: - **DSP Core Register检查**:在Hexagon DSP核心崩溃时,需要关注特定的寄存器如Loop registers (LC0, SA0, LC1, SA1),Program counter (PC),User status register (USR),Modifier registers (M0, M1),Predicateregisters (P3:0),UserGeneralPointer (UGP) 和 GlobalPointer (GP)等,以及返回地址寄存器LR。 - **调用堆栈分析**:调用堆栈的分析对于理解函数调用顺序至关重要。`allocframe`和`deallocframe`操作管理栈帧,帮助跟踪函数的入栈和出栈。 - **内存Dump分析**:当Modem进入异常状态时,内存中的状态会被打印出来。通过QPST工具可以dump EBI1.BIN文件,这是内存的内容。使用十六进制编辑器查找崩溃相关的数据,如Modem crash的具体信息。 在分析过程中,通常需要结合以下步骤: - **确定错误位置**:从内存dump中找到的崩溃信息,可以定位到源代码的具体行数,例如fws_task.c:246行。 - **确定返回指令**:LR寄存器的值(如0x42275b5c)指示了异常发生前的返回地址,通过addr2line工具和ELF映像文件,可以找到对应于该地址的源代码行,例如err.c:2611。 - **确定PC指针位置**:PC寄存器的值(如0x4198235c)指明了异常发生时正在执行的指令地址,同样通过addr2line或objdump反汇编,可以找到该地址在dsm.c:594行的源代码位置。 - **分析调用栈**:根据LR和PC的值,可以重建调用栈,从而理解导致崩溃的函数调用序列。 通过对以上信息的综合分析,可以定位到导致崩溃的代码段,进一步排查问题原因,如可能的内存溢出、未初始化的变量、无效的指针引用等。在修复问题后,应重新运行测试以验证解决方案的有效性。同时,为了预防类似问题的发生,良好的编程实践,如充分的边界检查、适当的异常处理和详尽的单元测试都是必要的。