カーネルイメージを圧縮する必要があるのはなぜですか?

カーネルイメージを圧縮する必要があるのはなぜですか?

カーネルイメージをvmlinuxではなくvmlinuzに圧縮する必要があるのはなぜですか?

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アーチにエラーがあります。そのアーチの現在の状態は不明ですが、実際にs390アーチでは作業中です(参照arch/s390/Kconfig)。

関連情報