我所知道的(如有理解错误请指正):
虚拟机:是一个压缩的、自解压的、可启动的 Linux 映像。总是ELF?怎么生成的?
zImage(或bzImage):是压缩的、自解压的、可启动的 Linux 映像。始终是二进制的。由“make zImage”生成。
但看起来并非如此。我已经构建了嵌入式 Openwrt 项目,并在执行“file vmlinuz”时获得了此信息:
vmlinuz: ELF 32-bit MSB executable, MIPS, MIPS32 rel2 version 1 (SYSV), statically linked, stripped
可以看出,它是 ELF 格式,而不是像 zImage 那样的二进制文件。
更令人困惑的是,当我在 ubuntu vmlinuz 上执行 readelf 时,我发现它不是 ELF 文件。
答案1
vmlinuz 是一样的。
如果你跑步的话你会注意到这一点make install
。 zImage 或 bzImage 是安装到/boot/vmlinuz-$VERSION
.
看起来有些架构将其包装为 ELF(有些则没有)。 x86 上的 Linux 可能会因与引导加载程序(例如 LILO、syslinux 等)的兼容性而陷入没有 ELF 的困境。也许他们不喜欢 GRUB 加载 ELF 文件的方式,我不知道。在其他架构上,由于同样的原因,它可能会被 ELF 困住。请注意,解压缩的图像将始终是 ELF(请参阅例如)。