我正在尝试分析Linux内核崩溃转储。内核是由4.4.77树构建的,其中包含一些自定义包。构建内核的命令是make-kpkg kernel_image debug_image
,产生2个不同的debian包。我们的想法是第一个包在生产中运行,如果检测到问题,第二个包可用于调试。因此安装了“kernel_image”软件包,配置为每instructions收集崩溃,运行,崩溃并写入崩溃转储文件。
我正在使用crash
实用程序来分析转储。运行
crash vmlinux file.dump
对于每个instructions输出未压缩的vmlinux文件
crash: vmlinux: no .gnu_debuglink section
crash: vmlinux: no debugging data available
安装“debug_image”包不会改变它。
我注意到“debug-image”包中包含自己的vmlinux文件;它在安装时放在/usr/lib/debug/lib/modules/4.4.77+/中。运行
crash /usr/lib/debug/lib/modules/4.4.77+/vmlinux file.dump
输出
WARNING: kernels compiled by different gcc versions:
/usr/lib/debug/lib/modules/4.4.77+/vmlinux: (unknown)
dump.201802261029 kernel: 4.8.4
WARNING: kernel version inconsistency between vmlinux and dumpfile
crash: incompatible arguments:
/usr/lib/debug/lib/modules/4.4.77+/vmlinux is not SMP -- dump.201802261029 is SMP
我错过了什么?是否可以利用“debug_image”包中提供的信息从“kernel_image”分析转储?
更新:显然系统的makedumpfile
二进制文件对于4.4内核而言太旧了。在过去的某个时刻,系统的内核从3.something更新到4.4但所有用户模式的二进制文件都保持不变。这不知何故导致无效的崩溃转储。由于二进制不兼容,我不能apt-get install
更新makedumpfile
(kdump-tools
包的一部分)。在我用于为系统构建用户模式应用程序的相同开发环境中重新构建makedumpfile
二进制v 5.9之后,问题已得到解决。总结一下,将crash
指向vmlinux
来自" debug-image"包裹最后为我工作。