Arch LinuxシステムのLinuxカーネルの圧縮の種類を確認する必要がありますが、理論以上の方法を見つける方法が見つかりません。今はbzip2(bz)、以前はgzipです。 (z)。
私のコンピューターでは、次のコマンドを実行します。
_$ file /boot/vmlinuz-linux
/boot/vmlinuz-linux: Linux kernel x86 boot executable bzImage, version 5.3.11-Arch1-1 (linux@archlinux) #1 SMP PREEMPT Tue, 12 Nov 2019 22:19:48 +0000, RO-rootFS, swap_dev 0x5, Normal VGA
_
理論を見ると、bzImage
はgzip (z)
で圧縮する必要があることがわかりますが、それを証明することはできません。
BzImageは、より多くのアルゴリズムを導入したLinux 2.6.30まで、gzipを使用して圧縮されていました。 bzプレフィックスはbzip2圧縮が使用されることを意味するという一般的な誤解があります(bzip2パッケージは、bzless、bzcatなどのように、bzがプレフィックスされたツールとともに配布されることがよくあります)。
私のマシンでそれを証明する方法はありますか?それとも理論自体、この場合は「経験的」ですか?
あなたの ウィキペディアの引用 、
bz
プレフィックスはbzip2圧縮が使用されることを意味するという一般的な誤解がありますが[...]、これはそうではありません。
はあなたの理論の反対です:bz
のbzImage
はbzip2
とは関係がなく、bzImage
はbzip2
で圧縮する必要はありません。実際、 カーネルのデフォルトの圧縮モード はgzip
であり、bzip2
を使用する理由はほとんどありません。LZMAやxz
よりも低速ですが、同様に圧縮します。
特定のカーネルイメージに使用された圧縮を、それを実行したり、その構成を見つけたりすることなく決定的に決定するには、カーネル独自の extract-vmlinux
スクリプトで使用されているアプローチに従います。
画像でコンプレッサーの署名を探します。
gunzip
:\037\213\010
xz
:\3757zXZ\000
bzip2
:BZh
lzma
:\135\0\0\0
lzo
:\211\114\132
lz4
:\002!L\030
zstd
:(\265/\375
見つけた署名のオフセットから始めて、画像からデータを抽出します。
スクリプト here を変更して、圧縮タイプのみを報告するようにしました。 GPL 2でのみライセンスされているため、ここには含めません。
カーネルがサポートする圧縮方法を確認できます。選択できるのは1つだけなので、どちらであるかを証明します。
ここでは、gzipを使用しています。
$ zgrep CONFIG_KERNEL_ /proc/config.gz
CONFIG_KERNEL_GZIP=y
# CONFIG_KERNEL_BZIP2 is not set
# CONFIG_KERNEL_LZMA is not set
# CONFIG_KERNEL_XZ is not set
# CONFIG_KERNEL_LZO is not set
# CONFIG_KERNEL_LZ4 is not set
VMlinuzは、次のリンクからわかるように、gzipで圧縮されています。
http://www.linfo.org/vmlinuz.html
https://en.wikipedia.org/wiki/Vmlinux
皮肉なことに、このウェブページでは、以下のように、多くの人が拡張機能をbzip2と混同していると述べています。
ZImageファイルという名前のコンパイルされたカーネルは、一部の古いシステムで作成され、下位互換性のために新しいシステムで保持されます。 zImageとbzImageはどちらもgzipで圧縮されています。違いは、zImageが低メモリ(つまり、最初の640kB)に解凍され、bzImageが高メモリ(1MB以上)に解凍されることです。 bzImageがbzip2ユーティリティで圧縮されているという一般的な誤解があります。実際には、bは単に大きいという意味です。
この情報がお役に立てば幸いです。