/proc/kcore 提供了整个机器的内存镜像,这样可以通过gdb vmlinux /proc/kcore 来debug kernel.
kcore的实现在fs/proc/kcore.c中。
为什么说kcore代表整个机器的内存镜像呀,这点从kcore的初始化函数就可以看到
static int __init proc_kcore_init(void)
{
#在proc下创建kcore文件
proc_root_kcore = proc_create("kcore", S_IRUSR, NULL,
&proc_kcore_operations);
if (!proc_root_kcore) {
pr_err("couldn't create /proc/kcore\n");
return 0; /* Always returns 0. */
}
/* Store text area if it's special */
#在kcore中添加kernel的text端
proc_kcore_text_init();
/* Store vmalloc area */
#在kcore中添加vmalloc 端
kclist_add(&kcore_vmalloc, (void *)VMALLOC_START,
VMALLOC_END - VMALLOC_START, KCORE_VMALLOC);
#在kcore中添加module占用的空间
add_modules_range();
/* Store direct-map area from physical memory map */
#在kcore中添加低端内存
kcore_update_ram();
#注册通知连,以防内存热插拔
register_hotmemory_notifier(&kcore_callback_nb);
return 0;
}
fs_initcall(proc_kcore_init);
看过kcore的初始化函数就知道kcore代表的是一个运行时的内存镜像