vmlinuz 与 zImage 之间有什么区别?

Rah*_*der 5 linux-kernel

我所知道的(如有理解错误请指正):

\n\n

vmlinuz:是一个压缩的、自解压的、可启动的 Linux 映像。总是 ELF?\n如何生成?

\n\n

zImage(或 bzImage):是压缩的、自解压的、可启动的 Linux 映像。始终是二进制的。由 \xe2\x80\x9cmake zImage\xe2\x80\x9d 生成。

\n\n

一些消息来源称,这实际上是同一张图像,例如:此处此处

\n\n

但看起来并非如此。\n我已经构建了嵌入式 Openwrt 项目,并在执行“file vmlinuz”时获得了此信息:

\n\n
vmlinuz: ELF 32-bit MSB  executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, stripped\n
Run Code Online (Sandbox Code Playgroud)\n\n

可以看出,它是 ELF 格式,而不是像 zImage 那样的二进制文件。

\n\n

更令人困惑的是,当我在 ubuntu vmlinuz 上执行 readelf 时,我发现它不是 ELF 文件。

\n

sou*_*edi 2

vmlinuz 是一样的。

如果你跑步的话你会注意到这一点make install。zImage 或 bzImage 是安装到/boot/vmlinuz-$VERSION.

看起来有些架构将其包装为 ELF(有些则没有)。x86 上的 Linux 可能会因与引导加载程序(例如 LILO、syslinux 等)的兼容性而陷入没有 ELF 的困境。也许他们不喜欢 GRUB 加载 ELF 文件的方式,我不知道。在其他架构上,由于同样的原因,它可能会被 ELF 困住。请注意,解压缩的图像将始终是 ELF(参见示例)。