kdump如何转储原理分析

时间:2021-12-15 07:43:43

关于kdump如何设置,可以看其他的文章。

他的实现原理其实很简单,详细代码可以看linux-2.6.16/fs/proc/vmcore.c

通过kexec启动新的内核,因为在第一个内核(也就是crash掉的kernel)在设置kdump的时候,

通过配置文件,分了一部分内存给新的内核做启动用,这部分内存在crash的kernel是不会用到。

在重起的过程中,因为没有断电,所以在内存中保存了crash时候的数据信息,在新kernel启动的时候,

通过vmcore.c中:

kdump如何转储原理分析

通过上面的parse-crash-elf-headers函数把数据读到下面的结构链表中:

struct vmcore {

struct list_head list; //链表组织

unsigned long long paddr; //物理地址

unsigned long long size; //本内存片断的大小

loff_t offset;

};

 

我们在代码的注释里面:/* Initialize /proc/vmcore size if proc is already up. */

在proc系统初始化的时候,会创建一个/proc/vmcore的文件,通过读这个文件,就可以知道crash的kernel的信息。

proc/vmcore文件是放在一个内存中的东西。