为什么内核镜像需要压缩?

为什么内核镜像需要压缩?

为什么内核映像必须压缩为 vmlinuz,而不是 vmlinux?

vmlinuz是一个压缩的Linux内核,并且它是可启动的。可启动意味着它能够将操作系统加载到内存中,从而使计算机变得可用并运行应用程序。

vmlinuz 不应与 vmlinux 混淆,后者是非压缩且不可引导形式的内核。 vmlinux 通常只是生成 vmlinuz 的中间步骤。”
来源:http://www.linfo.org/vmlinuz.html

我了解压缩的好处,但是压缩的图像最终必须解压缩(即使不需要,我认为它不会影响这一点),那么未压缩的图像怎么可能不可执行/可启动呢?

答案1

Linux内核根本不需要压缩。

然而……对于我们大多数人来说……

它必然是:


让我们调查一下内核压缩模式作为内核 makefile 的一部分提供的子菜单make menuconfig

( ) Gzip
( ) Bzip2
( ) LZMA
( ) XZ
( ) LZO
(X) LZ4

您只需在压缩算法之间进行选择。只是没有办法逃避压缩。

等待!现在让我们研究一下内核的帮助:

Depends on: HAVE_KERNEL_GZIP [=y] || HAVE_KERNEL_BZIP2 [=y] || HAVE_KERNEL_LZMA [=y] || HAVE_KERNEL_XZ [=y] || HAVE_KERNEL_LZO [=y] || HAVE_KERNEL_LZ4 [=y] || HAVE_KERNEL_UNCOMPRESSED [=n]

好吧,这一切都取决于压缩算法的可用性,也取决于HAVE_KERNEL_UNCOMPRESSED配置选项。

不幸的是,这个选项不作为菜单的一部分提供修改。它被硬编码在init/Kconfig

config KERNEL_UNCOMPRESSED
    bool "None"
    depends on HAVE_KERNEL_UNCOMPRESSED
    help
      Produce uncompressed kernel image. This option is usually not what
      you want. It is useful for debugging the kernel in slow simulation
      environments, where decompressing and moving the kernel is awfully
      slow. This option allows early boot code to skip the decompressor
      and jump right at uncompressed kernel image.

然后您就会得到问题的答案:不,内核映像不需要压缩,并且内核配置提供了某种隐藏的不压缩它的可能性。然而,对于任何标准用户来说,内核映像都必须被压缩,因为……因为……未压缩的映像是“通常不是你想要的”…;-)

而且 :该补丁允许构建未压缩的图像(通过 make menuconfig 直接提供的选项)在 x86_64 arches 上出现错误。我无法判断其在该拱门上的当前状态,但确实正在 s390 拱门上工作(请参阅arch/s390/Kconfig

相关内容