玩转OurBMC第十二期:kdump原理分析(下)-脚本实现内核崩溃自动捕获
作者:互联网
2026-03-20
玩转OurBMC栏目聚焦BMC全栈技术知识分享,从理论到实践全方位解析BMC技术要点。本栏目致力于帮助开发者深入理解社区文化和技术特色,诚邀技术同仁踊跃投稿,共建知识共享平台。
在服务器管理过程中,BMC需要与其他工具协同工作以实现更高效的监控管理。本期将深入解析内核崩溃转储机制kdump,从kexec和内核代码层面剖析其工作流程。

内核通过grub配置参数crashkernel=X@Y预留内存空间用于放置捕获内核。系统启动后可通过dmesg查看相关日志,示例如下:

对应的内存预留功能由reserve_crashkernel函数实现,该函数位于arch/arm64/mm/init.c:

Kexec工具首先会解析/proc/iomem文件获取物理内存分配情况,寻找足够大的连续内存区域放置捕获内核和initrd。同时还会设置需要dump的内存内容:

get_memory_ranges函数获取所有System RAM区域,排除reserved部分后存入info->memory_range全局变量。crash_get_memory_ranges函数则进一步排除Crash kernel区域。
内核定义了两个kexec相关系统调用,在arm64平台调用号通常通用:

用户空间kexec通过kexec_load/kexec_file_load系统调用将数据传递到内核:

内核中通过SYSCALL_DEFINE4宏定义sys_kexec_load函数:

Kexec会将内核、initrd等信息存储在kexec_info的segment中:

my_load函数作为主要入口,首先解压crash kernel到kernel_buf:

arm64平台下image_arm64_load函数负责加载vmlinuz格式内核:

通过GDB调试可确认my_load中info包含5个segment:

内核通过/proc/vmcore文件提供数据读取接口:

内核崩溃时会保存各CPU寄存器信息到PT_NOTE指定内存:

欢迎持续关注OurBMC社区,获取更多BMC技术干货。
OurBMC社区官方网站:
https://www.ourbmc.cn/
相关标签:
相关推荐
专题
+ 收藏
+ 收藏
+ 收藏
+ 收藏
+ 收藏
最新数据
相关文章
海量小文件与多云协同下地瓜机器人JuiceFS存储优化实践
Portal架构下NJet仿真环境构建
营收增长25%利润为何转负人力成本正蚕食企业
Datalayers结合Grafana达成数据可视化
玩转OurBMC第二十九期之OpenOCD远程调试
玩转OurBMC第二十七期深入解读BMC-POST-CODE
BrightData的DNS代理
边缘智能碎片化长周期可靠性视域下操作系统基座的技术破局路径
DorisManager24.3版本全新上线集群巡检功能全面升级
Coolbpf最新特性深度解析eNetSTL网络加速库亮相龙蜥开源
AI精选
