维基百科上的描述bzImage
真的让我很困惑。
上图来自维基百科,但旁边的一行是:
bzImage 文件采用特定格式:它包含串联的 bootsect.o + setup.o + Misc.o + Piggy.o。
我在图像中找不到其他人(misc.o
和)。 我还想更清楚地了解这些目标文件。 piggy.o
有关信息这个帖子关于我们为什么无法启动vmlinux
文件也确实让我很困惑。
另一个疑问是关于System.map
.它是如何链接到的bzImage
?我知道它包含vmlinux
before create的符号bzImage
。但是在启动时,如何bzImage
附加到System.map
?
答案1
直到 Linux 2.6.22,bzImage
包含:
- bbootsect(
bootsect.o
): - b设置(
setup.o
) - bvmlinux (
head.o
,misc.o
,piggy.o
)
Linux 2.6.23 将 bbootsect 和 bsetup 合二为一(header.o
)。
启动时,内核需要初始化一些序列(请参阅上面的头文件),这些序列只是使系统进入所需的可用状态所必需的。在运行时,这些序列不再重要(那么为什么将它们包含到正在运行的内核中?)。
System.map
与 相关vmlinux
,bzImage
只是压缩容器,在启动时从中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 系统上删除不会产生任何问题。