今天客户遇到了kernel panic,产生了sysdump,就研究了一下如何分析system dump文件。
Android 系统内核发生崩溃的时候,可以通过kdump 等方式收集内核崩溃之前的内存,生成一个转储文件 vmcore。内核开发者通过分析该 vmcore 文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。crash 就是一个被广泛使用的内核崩溃转储文件分析工具,掌握 crash 的使用技巧,对于定位问题有着十分重要的作用。
对于Android 手机而言,如果打开了dump 功能,在插入sd卡的情况下,默认会将dump 写入到sd卡中。
如图所示,kernel 发生了panic,产生了sysdump文件
sysdump.core.00
sysdump.core.02_0x88000000-0x895fffff_dump.lst
sysdump.core.03_0x89600000-0x8e07ffff_dump.lst
sysdump.core.03_0x89600000-0x8e07ffff_dump.lst
sysdump.core.04_0x8e080000-0xbfffffff_dump.lst 等几个dump文件,写入到sd卡中。
这些dump文件是当时系统崩溃时的快照,对于系统分析而言,非常有用。
如果要分析这些dump文件,需要几步:
1.安装crash 软件。
一般Design House,在发布软件的时候,都会发布这个crash软件(vendor/sprd/open-source/tools/crash),当然也可以网上下载(有需要的可以留言)。
2.将dump文件合并
cat sysdump.core*>> sysdump.core 可以将这些dump文件合并成一个dump文件。
3.解析dump文件
crash -m phys_base=0x80000000 --cpus number=4 {path}/vmlinux {path}/system.core
4.使用命令分析
bt命令
dis -l m命令
log命令
struct 命令
用struct命令查看数据结构 可以查询page的数据结构
files命令
mount 不加参数,则显示所有已挂载的文件系统
mount -f 显示每个挂载文件系统中已经打开的文件
引用:https://www.ibm.com/developerworks/cn/linux/l-cn-kdump4/