- 背景
笔者计算机使用Ubuntu 20.04操作系统和Intel 11400 CPU。本文主要记录如何在Ubuntu操作系统上使用自编内核并使用kdump转存系统信息并使用crash工具进行分析。自编内核版本为5.15.133。
我们知道crash工具需要dump文件和vmlinux文件作为分析的依据,所以本文主要围绕这两个文件的获取展开。
2.准备vmlinux
要使用kdump机制,内核编译的时候必须选中CONFIG_DEBUG_INFO选项。对应的,在menuconfig的时候要选中对应的条目:
Kernel hacking ---> Compile-time checks and compiler options ---> Compile the kernel with debug info
这样在编译后不但会有内核镜像的deb包,还会诞生包含debug信息的deb包。
在笔者的计算机上,生成产物包括:
第一个和第四个deb包根据需求安装,第二个和第三个需要安装。
安装后进入系统,首先用uname产看内核信息是否匹配,然后到/usr/lib/debug目录下看看是否有对应的信息产生:
可以看到产生了vmlinux的文件连接。使用crash分析的第一个要素准备完毕。
3.准备dump信息
关于这部分内容,Canonical官方有个网页作为指导:
https://ubuntu.com/server/docs/kernel-crash-dump
主要需要做两件事。第一件事安装,第二件是配置。
首先安装工具包:
其次进行配置:
重新启动后可以看到cmdline参数有了明显的变化:
可以看到多处用于转储的配置条目crashkernel=512M-:192M。
下面触发kdump机制获取dump文件。笔者这里只做简单的手动触发。执行下面的命令:
执行后系统重新启动,在/var/crash下面会生成一个以时间戳命名的文件夹,文件夹中包含dump文件。dump文件命名为dump.timestamp。
4.用crash分析
使用下面命令即可即可使用crash命令进行分析:
crash /path/to/dumpfile /path/to/vmlinux
但是可能遇到gdb版本不匹配的问题。在笔者的计算机上,通过apt命令安装的gdb版本比较旧,无法正确匹配crash的使用。这种情况可以从github上重新下载自己编译最新版本的crash工具。地址为:GitHub - crash-utility/crash: Linux kernel crash utility
最终,输入正确的crash命令,进入调试界面:
执行个bt命令: