关于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文件是放在一个内存中的东西。