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

完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤

完整解析 Linux Kdump Crash Kernel 工作原理和实操步骤

一、前言

在使用 Linux 操作系统进行内核开发或者系统维护时,内核 panic 是最常见的系统崩溃环节。如果想要在内核崩溃后立即分析环境和输出内核内存 dump,Kdump + crashkernel 是最接近完美的解决方案。
在这里插入图片描述

二、基础概念

2.1 Kdump 是什么?

Kdump 是 Linux 封装的一套 Kernel crash dump 处理方案,它基于 kexec 技术,将一个备用内核 (crash kernel)
载入到内存中,当主内核发生 panic 时自动启动该内核,然后从原先内核剩余内存中抽取重要信息,保存为 vmcore dump 文件。

2.2 crashkernel 参数是什么?

crashkernel 是在内核启动参数中指定的内存块,用于载入备用内核,避免被主内核占用。如:

crashkernel=512M

表示为备用内核预留 512MB 内存地址空间。

三、工作原理

3.1 总体流程图

  1. 主内核启动
  2. 根据 crashkernel=512M 在 bootloader (u-boot/grub) 时期预留内存
  3. 主内核运行 kexec -p 载入备用内核
  4. 主内核发生 panic,启动 kdump kernel
  5. kdump kernel 通过 /proc/vmcore 读取主内核内存 dump
  6. 存储成 /var/crash/日期/vmcore

3.2 kexec 的角色

kexec 是 Linux 内核中的系统转换进程接口,用于在环境不重启情况下加载新内核,它支持两种模式:

  • 正常模式: kexec -l 加载新内核、kexec -e 执行
  • panic 模式: kexec -p 加载 crash kernel

四、实操步骤

4.1 启用 crashkernel 参数

  1. 修改 bootargs,添加
crashkernel=512M
  1. 重启系统,确认:
cat /proc/iomem | grep -i crash

应有类似输出:

88000000-8fffffff : Crash kernel

4.2 配置 kdump kernel

4.2.1 构建 initramfs 版本

Yocto/切换 initramfs 完全自启动的 kernel:

bitbake -c populate_initramfs kernel

会生成

/tmp/deploy/images/<machine>/Image-initramfs-<machine>.bin
4.2.2 载入 crash kernel
kexec -p /boot/Image-initramfs --append="root=/dev/mmcblk2p2 maxcpus=1 irqpoll nousb console=ttymxc1,115200"
4.2.3 检查是否载入
cat /sys/kernel/kexec_crash_loaded

输出 1 表示成功

4.3 启动 crash kernel 测试

4.3.1 切换到 crash kernel
echo c > /proc/sysrq-trigger
4.3.2 重点:设置内核自动 panic 后重启
echo 10 > /proc/sys/kernel/panic
4.3.3 输出观察
Starting crashdump kernel...
Bye!

4.4 删除后旧 dump

mkdir -p /var/crash
makedumpfile /proc/vmcore /var/crash/vmcore --dump-dmesg

五、常见问题

5.1 kexec: Can’t open (/proc/kcore)

  • 这是 Warning,如果 kexec -p 成功,不影响使用

5.2 crash kernel 启动后卡死

  • initramfs 未启动或 init 文件不存在
  • 确保 /init 可执行,且 busybox 包含基本命令

5.3 没有 /proc/vmcore

  • 不是用 initramfs 启动,或内核未启动 /proc/vmcore 配置

六、经典配置示例

Yocto kernel 展示

KERNEL_FEATURES:append = " features/kdump/kdump.scc"

initramfs kernel 本身启动

IMAGE_FSTYPES = "cpio.gz"
INITRAMFS_IMAGE = "kdump-initramfs"

七、结论

Kdump 是 Linux 内核系统常见敏感地段的重要分析工具,选择适合的 initramfs 和 crash kernel 就能在系统崩溃时提供重要和时效的调试信息,展示了 Linux 内核功能与系统办法的实力。

http://www.xdnf.cn/news/10244.html

相关文章:

  • embbeding 视频截图
  • AI Agent在测试设计中的应用
  • 数据治理系统是什么?数据治理工具有什么用?
  • 复刻真实世界的虚拟系统Goal
  • C语言面试题【01】
  • RSTP技术解密:高效组网与实战指南
  • JVM内存模型(运行时数据区)
  • 2025年素养大赛编程赛项练习题
  • python进程hung住如何找到问题所在
  • 下载和安装whl文件
  • 解密震颤背后的神经隐情
  • 基于NXP例程学习CAN UDS刷写流程
  • 基于频分复用导频的MMSE信道估计方法设计与仿真
  • 虚拟应用(vapp)、NICE DCV传输协议、云桌面(VDI)的区别
  • 深度学习实战110-基于深度学习的工业系统故障诊断技术研究(卷积网络+注意力机制模型)
  • 将ipynb文件转换为markdown格式文件
  • 前端实现大文件分片上传:原理、实现与优化
  • 借助DS用python帮你编写脚本(辅助开发测试)
  • ToolsSet之:十六进制及二进制编辑运算工具
  • 小工具合集
  • 【交通 Traffic Transformer】同一篇文章,内容排版稍有不同 | 交通预测模型中,Transformer相比传统GCN模型有何优势?
  • (七)Python中的静态方法
  • 集中式存储和分布式存储技术的区别
  • 第Y5周:yolo.py文件解读
  • (笔记+作业)第五期书生大模型实战营---L1G2000 OpenCompass 评测书生大模型实践
  • Day 34 训练
  • jetson nano PWM风扇使用方法
  • 使用 SpyGlass Power Verify 解决方案中的规则
  • 氮气吹扫电磁阀
  • PSpice软件快速入门系列--07.如何进行Worst Case最坏情况分析