更多疑惑见bzImage

更多疑惑见bzImage

维基百科上的描述bzImage真的让我很困惑。 替代文本

上图来自维基百科,但旁边的一行是:

bzImage 文件采用特定格式:它包含串联的 bootsect.o + setup.o + Misc.o + Piggy.o。

我在图像中找不到其他人(misc.o和)。 我还想更清楚地了解这些目标文件。 piggy.o

有关信息这个帖子关于我们为什么无法启动vmlinux文件也确实让我很困惑。

另一个疑问是关于System.map.它是如何链接到的bzImage?我知道它包含vmlinuxbefore create的符号bzImage。但是在启动时,如何bzImage附加到System.map

答案1

直到 Linux 2.6.22,bzImage包含:

Linux 2.6.23 将 bbootsect 和 bsetup 合二为一(header.o)。

启动时,内核需要初始化一些序列(请参阅上面的头文件),这些序列只是使系统进入所需的可用状态所必需的。在运行时,这些序列不再重要(那么为什么将它们包含到正在运行的内核中?)。

System.map与 相关vmlinuxbzImage只是压缩容器,在启动时从中vmlinux提取(=>bzImage并不真正关心System.map)。

Linux 2.5.39 推出CONFIG_KALLSYMS。如果启用,内核将保留它自己的符号映射 ( /proc/kallsyms)。

System.map主要用于用户空间程序,例如klogd用于ksymoops调试目的。

放置在哪里System.map取决于参考它的用户空间程序。尝试从或
ksymoops获取符号映射。在、和中搜索。/proc/ksyms/usr/src/linux/System.map
klogd/boot/System.map/System.map/usr/src/linux/System.map

/boot/System.map在内核为 2.6.27.19 的 Linux 系统上删除不会产生任何问题。

相关内容