
vmlinuxは、Linux がサポートするオブジェクト ファイル形式 (ELF ( Executable and Linkable Format ) やCOFF ( Common Object File Format ) など)のいずれかでLinux カーネルを含む、静的にリンクされた 実行可能ファイルです。このファイルは、カーネルのデバッグ、シンボル テーブルの生成、その他の操作に必要な場合がありますが、オペレーティング システム カーネルとして使用する前に、マルチブートヘッダー、ブートセクタ、セットアップ ルーチンを追加してブート可能にする必要があります。
vmlinux
語源
伝統的に、UNIXプラットフォームはカーネルイメージと呼んでいました。仮想メモリ/unixの開発により、この機能をサポートするカーネルには区別するために - という接頭辞が付けられました。この名前はvmunixの変異であり、末尾の文字は圧縮されていることを示します(たとえばgzipped)。[1]vmvmlinuxvmlinuzz
位置
従来、カーネルはファイルシステム階層のルート ディレクトリに配置されていましたが、ブートローダはBIOSドライバを使用してハード ディスクにアクセスする必要があり、一部のi386システムでは制限により、ハード ディスクの最初の 1024 シリンダしかアドレス指定できませんでした。
この問題を克服するために、 Linux ディストリビューターは、ブートローダとカーネル関連のファイルを保存するためのパーティションをドライブの先頭に作成することをユーザーに推奨しています。 GRUB、LILO、およびSYSLINUX は一般的なブートローダです。
慣例により、このパーティションはファイルシステム階層に としてマウントされ/bootます。これは後にファイルシステム階層標準(FHS) によって標準化され、現在では Linux カーネルイメージを または に配置することが義務付けられています/が/boot、これを強制する技術的な制限はありません。[2]
圧縮
従来、ブート可能なカーネルイメージを作成する場合、カーネルもgzip を使用して圧縮されるか、Linux 2.6.30 以降では[3] LZMAまたはbzip2 を使用して圧縮されます。この場合、結果のイメージには非常に小さな解凍スタブを含める必要があります。スタブはカーネルコードを解凍し、一部のシステムでは進行状況を示すドットをコンソールに表示してから、ブートプロセスを続行します。LZO [4] 、 xz [ 5]、 LZ4 [ 6]、zstd [7]圧縮のサポートは後に追加されました。
解凍ルーチンは起動時間において無視できる要素であり、bzImageが開発される前は、一部のアーキテクチャ、特に i386 のサイズ制約が極めて厳しく、圧縮が必要でした。
SPARCアーキテクチャでは、 SILOブートローダーが gzip 圧縮されたイメージを透過的に解凍する ため、vmlinux ファイルは単純なgzipを使用して圧縮されます。
起動可能なイメージのファイル名は重要ではありませんが、多くの一般的なディストリビューションではvmlinuzが使用されます。
bzイメージ

Linux カーネルが成熟するにつれて、ユーザーが生成したカーネルのサイズは、圧縮されたカーネル コードを格納できるスペースが限られている一部のアーキテクチャによって課せられた制限を超えて大きくなりました。この制限を克服するために、カーネルを非連続のメモリ領域に分割する bzImage ( big zImage ) 形式が開発されました。[要出典]
bzImage はLinux 2.6.30 [3]まではgzip を使用して圧縮されていましたが、このバージョンではさらに多くのアルゴリズムが導入されました。接頭辞からbzip2圧縮が使用されていると思われるかもしれませんが、そうではありません。[1] (bzip2 パッケージは、、などの という接頭辞が付いたツールと一緒に配布されることが多いです。)
bz bzbzlessbzcat
bzImage ファイルは特定の形式です。連結されたbootsect.o+ setup.o+ misc.o+が含まれていますpiggy.o。[8] piggy.oには、データ セクションに gzip 圧縮された vmlinux ファイルが含まれています。カーネル ソースのextract-vmlinuxにあるスクリプトは、カーネル イメージを解凍します。一部のディストリビューション ( Red Hatやクローンなど) には、一致するカーネル RPM のファイルを含むRPMが付属している場合があり、通常はまたはにインストールされます。
scripts/kernel-debuginfo vmlinux/usr/lib/debug/lib/modules/`uname -r`/vmlinux/usr/lib/debug/lib64/modules/`uname -r`/vmlinux
参照
注釈と参考文献
- ^ ab "vmlinuz の定義" 。www.linfo.org。Bellevue Linux。2005 年 3 月 29 日。2015 年 6 月 21 日閲覧。
- ^ 「セクション 3.5.2 — /boot : ブートローダーの静的ファイル」。FHS 2.3。2004 年 1 月 29 日。2014 年 3 月 11 日に取得。オペレーティング
システム カーネルは、/ または /boot のいずれかに配置する必要があります。
- ^ ab Linux 2.6.30は2009年6月9日にリリースされ、LZMAおよびbzip2アルゴリズムによるカーネルイメージの圧縮のサポートを追加しました[1]
- ^ 2010年2月24日にリリースされたLinux 2.6.33では、カーネルイメージをLZOで圧縮するサポートが追加された[2]
- ^ 2011年3月14日にリリースされたLinux 2.6.38では、カーネルイメージをxzで圧縮するサポートが追加された[3]
- ^ 2013年9月2日にリリースされたLinux 3.11では、カーネルイメージをLZ4で圧縮するサポートが追加されました[4]
- ^ 2020年10月11日にリリースされたLinux 5.9では、カーネルイメージ、initrd、initramfsをzstdで圧縮するサポートが追加されました[5]
- ^ Yann Droneaud (1999-09-28). 「Re: bzImage の解凍」LKML (メーリング リスト).
zImage には bootsect.o + setup.o + misc.o + piggy.o が含まれています
さらに読む
- Alavoor Vasudevan (2003-08-15). 「10. カーネル ファイル情報」。Linux カーネル HOWTO。2017-10-10 にオリジナルからアーカイブ。2014-03-11に取得。
- Daniel Pierre Bovet (2013-01-03)。「Linux バイナリの特殊セクション」。LWN.net。Linuxカーネル
に現れるすべての特殊セクションは、vmlinux ELF ヘッダーで定義されたセグメントの 1 つにパックされます。各特殊セクションは特定の目的を果たします。
外部リンク
- ブートプロセス
