当前位置: 首页 > news >正文

实用指南:在Linux中安装Kdump调试环境

实用指南:在Linux中安装Kdump调试环境

参考书:《Linux内核模块开发技术指南》
调试应用程序时,允许通过配置,以便在程序崩溃时产生coredump文件。coredump文件保存了程序崩溃前的内存状态、寄存器、栈等信息。使用gdb设备允许方便地查看这些信息,以帮助定位脚本崩溃原因。同样,内核也有类似的机制,这种机制被称为kdump。
Linux内核在打开kdump功能时,如果内核发生崩溃,kdump会通过kexec工具启动到第二个内核,第二个内核通常叫做捕获内核(capture kernel)。该内核会生成一个内存映像(或被称为vmcore),这个内存映像类似于应用程序的coredump文件,但保存的是内核崩溃时的内存、寄存器、栈信息。行对其进行分析,以用于确定崩溃原因。内核崩溃时生成的内存映像也被称为vmcore文档。
本文将介绍如何在CentOS 7.9安装Kdump调试环境。

1.确认编译内核选项已启动kdump功能

由于kdump功能要求Linux内核的支撑,故而在编译内核时需要打开kdump相关的内核选项,这些选项包括:CONFIG_KEXEC、CONFIG_DEBUG_INFO、CONFIG_SYSFS、CONFIG_CRASH_DUMP、CONFIG_PROC_VMCORE。
通过查看内核源码根目录下的.config文件来确认这些选项是否已经打开。如下图所示:
在这里插入图片描述

图中的CONFIG_DEBUG_INFO=y表示CONFIG_DEBUG_INFO已打开,读者允许在该材料中搜索选项CONFIG_KEXEC、CONFIG_SYSFS等其他选项是否已打开,默认情况下,kdump的相关选项是打开的。若是存在kdump的相关选项没有打开的情况,要求运用make menuconfig命令选择对应选项然后重新编译、安装内核。使用make menuconfig命令打开选项的步骤是:
• 译内核前,在Linux内核源码根目录下执行make menuconfig命令进入选项菜单。
• 以CONFIG_DEBUG_INFO为例,在选项菜单中搜索“CONFIG_DEBUG_INFO”,搜索方式是:在选项菜单输入‘/’,进入搜索框,如下图所示:
在这里插入图片描述

在搜索框中输入“CONFIG_DEBUG_INFO”然后回车,行看到CONFIG_DEBUG_INFO选项在选项菜单中的路径以及依赖选项,如下图所示:
在这里插入图片描述

图中的“Depends on”这一行是CONFIG_DEBUG_INFO的依赖选项,该选项依赖于DEBUG_KERNEL选项的打开以及COMPILE_TEST选项的关闭。“DEBUG_KERNEL”后的[=y]表示得打开这个选项,“COMPILE_TEST”后的[=n]表示需要关闭这个选项。读者可以自行查看这两个选项是否正确。图中的“Location”及之后是CONFIG_DEBUG_INFO选项的路径信息,可能在选项菜单中通过路径找到CONFIG_DEBUG_INFO。回到选项菜单首页后,根据上图的路径信息,选择“Kernel hacking”,然后敲击回车,如下图所示:
在这里插入图片描述

在子菜单下再选择“Compile-time checks and compiler options”,进入下一级菜单后,可以看到选项“Compile the kernel with debug info”,该选项正是CONFIG_DEBUG_INFO选项,如下图所示:
在这里插入图片描述

图中选项前有‘’号,表示该选项已打开,如果选项前没有‘’号,需要选中该选项,然后敲击字母‘y’,就可以打开这个选项。选项打开后,需要重新编译、安装内核。
关于kdump环境安装的详细介绍,也行参考内核源码目录下的文件Documentation/admin-guide/kdump/kdump.rst。

2.配置捕获内核的内存空间大小

内核发生崩溃时,kdump会利用kexec工具启动到第二个内核,该内核就是捕获内核。该内核也需要应用内存空间,所以需要设置其可使用的内存空间大小。
crashkernel=auto,本节将其配置为768M内存大小,如下图:就是对于CentOS7.9系统,配置方法是:在/boot/grub2/grub.cfg文件中,修改内核启动参数的crashkernel,该变量保存的就是捕获内核的内存空间大小。默认
在这里插入图片描述

缘于使用的内核版本是5.10.179,所以图中是在“CentOS Linux (5.10.179)”启动菜单下配备的crashkernel参数。这个内存如果设置得太小,捕获内核可能无法成功启动。

3.安装依赖包

如果在CentOS7.9环境下安装,还需要安装依赖包,可以从https://pan.baidu.com/s/1vJKpAgV0l6UYCTjbHapAzg?pwd=29il下载依赖包kdump_rpm.tgz。这个压缩文件里保存了kdump环境的依赖软件。将该记录放入CentOS 7.9操作系统后,执行tar zxvf kdump_rpm.tgz进行解压缩,如下图:
在这里插入图片描述

执行命令rpm -Uvh --force --nodeps kdump_rpm/*。该命令用于安装解压后的软件,如下图所示:
在这里插入图片描述

4.安装kexec-tools工具

从https://pan.baidu.com/s/1vJKpAgV0l6UYCTjbHapAzg?pwd=29il下载kexec-tools-2.0.22.tar.gz文件,这是kexec-tools的源码包。将该材料放入CentOS 7.9操作系统后,执行命令tar zxf kexec-tools-2.0.22.tar.gz,进行解压缩。解压缩完成后,会生成目录kexec-tools-2.0.22,通过cd命令进入该目录,执行过程如下图所示:
在这里插入图片描述

进入kexec-tools-2.0.22目录后,执行命令:./configure,调整编译参数,如下图:
在这里插入图片描述

执行命令make;make install进行源码的编译、安装,如下图所示:
在这里插入图片描述

完成安装后,执行命令:kexec -v。如果安装成功,将打印出kexec-tools的版本号。如下图:
在这里插入图片描述

5.安装makedumpfile工具

从https://pan.baidu.com/s/1vJKpAgV0l6UYCTjbHapAzg?pwd=29il下载makedumpfile-1.6.7.tar.gz记录,这是makedumpfile的源码包。将该文件放入CentOS 7.9操作系统后,执行命令tar zxf makedumpfile-1.6.7.tar.gz,进行解压缩。解压缩完成后,会生成目录makedumpfile-1.6.7,通过cd命令进入该目录。
修改makedumpfile-1.6.7目录下的Makefile文件,删除“-static”语句,如下图所示:
在这里插入图片描述

删除上图的“-static”后保存Makefile文件,然后执行:make;make install。该命令用于编译、安装makedumpfile工具。安装完成后,可以凭借命令makedumpfile -v查看makedumpfile的版本号,如下图所示:
在这里插入图片描述

6.使能kdump服务

将kdump服务设置为开机自启动,命令为:systemctl enable kdump。

7.生成crash工具

从https://pan.baidu.com/s/1vJKpAgV0l6UYCTjbHapAzg?pwd=29il下载crash-master.zip文件,这是crash工具的源码包。将该文件放入CentOS 7.9操作系统后,执行命令unzip crash-master.zip,进行解压缩。解压缩完成后,会生成目录crash-master,通过cd命令进入该目录。
在crash-master目录下执行命令:make target=X86_64。命令中的X86_64指定编译后的crash将在X86的64位环境下应用。由于编译过程中会连接互联网下载依赖文档,故而需要保证编译环境能够连上互联网。编译完成后,在crash-master目录下会生成文件crash,该资料可用于查看vmcore文件。
重启操作系统,重启过程中需要选择之前新编译的内核启动。启动完成后,执行systemctl status kdump查看kdump服务的启动状态。如果刚安装完kdump环境,状态可能是activating,如下图所示:
在这里插入图片描述

若是状态是activating,表明kdump还在进行初始化,即使内核崩溃也无法产生vmcore档案。需要等待一会,直到kdump服务的状态是active,内核崩溃后就能够产生vmcore文件,正确的状态如下图:
在这里插入图片描述

http://www.jsqmd.com/news/353705/

相关文章:

  • PostgreSQL 核心原理:系统内部的对象寻址机制(OID 对象标识符)
  • 2026年分离机厂家推荐TOP排名榜:权威联系指南!净乳/脱脂/大肠杆菌/生物合成/高速/碟式/阿法拉伐/碟片/GEA分离机哪家好一眼品鉴! - 品牌推荐用户报道者
  • 超详细版ESP32 Arduino开发环境串口驱动调试日志
  • PostgreSQL 核心原理:减少索引更新的黑科技(堆内元组更新 HOT)
  • ChatTTS本地部署CentOS实战:从环境配置到性能调优
  • FreeRTOS任务优先级配置实战:STM32F103实时调度设计
  • PostgreSQL核心原理:防止数据丢失的关键操作(真空冻结)
  • 智能客服系统历史记录压缩实战:从存储优化到性能提升
  • FreeRTOS任务栈与系统堆内存监控实战
  • 通信专业毕设题目技术选型指南:从协议栈到系统架构的实战解析
  • FreeRTOS中断优先级配置原理与STM32工程实践
  • Python堆算法实战:从亿级数据中秒杀Top100的高效解法
  • AI 辅助开发实战:用大模型高效构建「毕业设计美食探店」应用
  • 基于dify构建多轮对话智能客服chatflow:技术选型与实战避坑指南
  • 2005-2024年各省总抚养比、儿童抚养比、老年人抚养比数据
  • 电子通信类专业毕设选题指南:从通信协议到嵌入式实现的深度解析
  • AP3216C假读机制与I²C驱动调试实战
  • ChatGPT AI绘画软件效率优化实战:从模型调用到批量生成
  • AI客服新纪元:基于Qwen2-7B-Instruct的快速微调与部署实战
  • 客悦智能客服系统AI辅助开发实战:从架构设计到性能优化
  • 从零到一:DIY锂电池健康监测仪的硬件选型与实战避坑指南
  • FreeRTOS工程化实战:从STM32裸机到实时系统架构跃迁
  • OpenHands:15个AI智能体协同编程,重构软件开发工作流
  • 树莓派摄像头小白指南:硬件连接与软件验证
  • USB vs MIPI:一场关于摄像头接口的终极对决
  • FreeRTOS事件标志组:嵌入式多事件同步的原子机制
  • 人脸识别毕设从零到一:新手入门技术选型与避坑指南
  • CentOS7 环境下 CosyVoice 的部署与优化实战指南
  • Multisim 波形发生器系统设计:从仿真到优化的全流程解析
  • 小白必看:Qwen3-ForcedAligner离线版快速部署与使用指南