gpt4 book ai didi

linux-kernel - vmlinux 和 vmlinux.o 的区别

转载 作者:行者123 更新时间:2023-12-04 05:09:56 24 4
gpt4 key购买 nike

当我构建Linux内核时,生成了两个镜像vmlinux和vmlinux.o。它们的大小似乎也不同(分别为 113KB 和 198KB...)。有人可以提供有关差异的见解吗?

谢谢,

Vj

最佳答案

Linux 构建期间生成的镜像因架构和目标而异。除了问题中提到的那两个之外,还有许多中间构建目标。除了可能出于学术目的之外,大多数都是无趣的。不幸的是,有不止一个名为 vmlinux 的目标。 vmlinux.o 不是很有趣。在顶级 Linux 树中,您会找到一个名为 vmlinux 的 ELF 文件。执行

$ file vmlinux

应该确认这是ELF文件。我不知道有任何系统可以直接启动这个文件。这个文件唯一有趣的地方是用于调试,因为它包含调试器可以读取的调试符号。实际的引导目标将在取决于体系结构的子目录中找到。对于 x86,(我认为这不是我的专长)我认为您会找到一个名为 bzImage 的目标。对于ARM架构,有的系统引导zImage,有的引导uImage(这是一个Linux内核镜像,打包在U-Boot引导加载程序识别的头文件中。即使去掉U-Boot头文件,该镜像也是一个合成镜像。也就是说, 它不是一个 ELF 文件,也不是一个纯 .o 等。它是几个二进制 blob 的串联,其中可以包含内核配置信息、内核本身,几乎总是被压缩的,并且通常是一段可运行的代码(即. 未压缩),我称之为“ bootstrap ”加载程序,它通常包含特定于机器和板的初始化例程。我对 x86 不太熟悉,但即使在该架构上,内核启动镜像(您启动的那个)是包含多个组件的合成图像,即不是纯 .o 或 ELF 文件。

查看正在发生的事情的一种好方法是使用详细模式编译内核,然后观看最后的步骤以了解图像是如何处理的。将 V=1 添加到“make”命令行以打开详细模式。

快乐黑客!

关于linux-kernel - vmlinux 和 vmlinux.o 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17621252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com