kernel panic 时,sysdump 分析

今天客户遇到了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

kernel panic 时,sysdump 分析_第1张图片
执行完成之后,就可以看到如上图的提示,这个信息量比较大,包含panic的时间点和原因

4.使用命令分析

bt命令

kernel panic 时,sysdump 分析_第2张图片
数字”开头的行为调用堆栈,即系统崩溃前内核依次调用的一系列函数,通过这个可以迅速推断内核在何处崩溃。

dis -l m命令

可以通过dis –l 命令查询是在那个函数里面调用出错。如上图,发现是在kernel/fs/read_write.c 中出错。

log命令

kernel panic 时,sysdump 分析_第3张图片
log 命令可以打印系统消息缓冲区,从而可能找到系统崩溃的线索

struct 命令

kernel panic 时,sysdump 分析_第4张图片
 struct命令

用struct命令查看数据结构 可以查询page的数据结构

files命令


kernel panic 时,sysdump 分析_第5张图片
files命令


kernel panic 时,sysdump 分析_第6张图片
mount 命令

mount 不加参数,则显示所有已挂载的文件系统

mount -f 显示每个挂载文件系统中已经打开的文件

引用:https://www.ibm.com/developerworks/cn/linux/l-cn-kdump4/

你可能感兴趣的:(kernel panic 时,sysdump 分析)