kdump如何转储原理分析

2019-07-13 01:14发布

关于kdump如何设置,可以看其他的文章。 他的实现原理其实很简单,详细代码可以看linux-2.6.16/fs/proc/vmcore.c
通过kexec启动新的内核,因为在第一个内核(也就是crash掉的kernel)在设置kdump的时候, 通过配置文件,分了一部分内存给新的内核做启动用,这部分内存在crash的kernel是不会用到。 在重起的过程中,因为没有断电,所以在内存中保存了crash时候的数据信息,在新kernel启动的时候, 通过vmcore.c中: 通过上面的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文件是放在一个内存中的东西。