我知道.exit.text部分将由链接器填充,其函数使用__exit宏定义。我可以看到关于vmlinux文件的反汇编的部分。但是我不明白文件加载到内存后丢弃的内容到底是什么时候?它是否发生在内核代码中?任何人都可以解释这个吗? 提前致谢!
答案 0 :(得分:2)
文件vmlinux.lds.S和module.c处理此问题。处理取决于您的内核版本和配置;两者都没有给出。我的假设是指内核中的.exit.text
部分 ,而不是某些用户空间任务。通常,内核不会退出,因此除非您有一些调试配置,否则链接器脚本会丢弃它们。
编辑:android内核是使用.config
文件制作的,该文件在编译时启用Linux内核功能。 CONFIG_HOTPLUG_CPU 的.config
是CPU;即使交换CPU,一些大型服务器也可以继续运行。很难回答你的问题。我不知道你的Android内核源代码在哪里或者它构建的.config
选项。
这些部分与GENERIC_BUG
保持一致;所以你的内核可能是用这个构建的。在库存 vmlinux.lds.S 中,.exit.data
部分放在之前 __init_end
,因此它被释放并返回到{ {1}}部分运行。即,仅在启动期间出现。在这种情况下,您将在 vmlinux ELF中看到它,但不会在运行时 kcore 中看到它,或者您正在转储它。
具体而言,main.c's init
,start_kernel()
,rest_init()
和kernel_init()
是丢弃此内容的地方。