Linuxカーネルの手動ビルド:生成されたバイナリは、プリコンパイルされたバイナリよりも10倍大きいです。

Linuxカーネルの手動ビルド:生成されたバイナリは、プリコンパイルされたバイナリよりも10倍大きいです。

私はLinux Mint 13 MATE 32ビットを使用しており、カーネルを構築しようとしています(主に経験と楽しみのため)。

現時点では、プリコンパイルされたカーネルと同じ構成を使用してビルドするのが好きなので、最初にプリコンパイルされたカーネル3.16.0-031600rc6をインストールしました。kernel.ubuntu.com、正常に開始されました。

その後、3.16.rc6カーネルを以下からダウンロードしました。kernel.org、解凍し、既存のプリコンパイルされたカーネルの構成を使用するように構成します。

$ make oldconfig

私には何も尋ねなかったので、プリコンパイルされたカーネルには必要なすべての情報が含まれています。それからビルドしました(約6時間かかります)。

$ make

次に、以下をインストールします。

$ sudo make modules_install install

その後、手動でコンパイルされたカーネルを起動しましたが、うまくいきましたが、起動プロセスが少し遅かったです。しかし、私はすべてのバイナリ(およびその中に含まれるすべてのモジュール/boot/initrd.img-3.16.0-rc6)がプリコンパイルされたバージョンより約10倍大きいことを発見しました。 bytesに似ていますが、プリコンパイルされたバイナリはすべてのモジュールが同様に大きかったです。*.ko/lib/modules/3.16.0-rc6/kernelinitrd.img-3.16.0-rc6160 658 665initrd.img-3.16.0-031600rc6-generic16 819 611*.ko

なぜこれですか?ビルドに特別なオプションを指定していません(上記と同じコマンドを入力しました)。 「正しく」構築する方法は?

答え1

結局のところ、fileそれはデバッグシンボルです。 LKMLにはこの問題のスレッドがあります。試みるように誘導:

make INSTALL_MOD_STRIP=1 modules_install

チャジャン、/lib/modules/x.x.x以前のディレクトリ内での比較:

> ls -hs kernel/crypto/anubis.ko 
112K kernel/crypto/anubis.ko

後:

> ls -hs kernel/crypto/anubis.ko 
16K kernel/crypto/anubis.ko

.configまた、報告された合計ディレクトリサイズ(同じディレクトリを使用)がdu -h185 MBから13 MBに増えました。

ディスク容量を使用する以外に見えるほど重要ではないことに注意してください。通常の動作中はデバッグシンボルがロードされないため、メモリ内の各モジュールの実際のサイズはファイルサイズに関係なく同じになる可能性があります.ko。唯一の重要な違いはサイズだと思いますinitramfs。唯一の違いは、ファイルシステムを解凍するのにかかる時間です。つまり、圧縮されていないinitramfsは重要ではありません。

strip --strip-allまた動作し、fileどちらも正しく報告しますstripped。ディストリビューションに当てはまると言う理由はnot stripped依然として謎です。

答え2

make oldconfigこれを行うと、プリmake vmlinuzコンパイルされたカーネルが「実行可能なbzImage」であることがわかります。これはディスクに圧縮されていることを意味します。ブートメッセージを詳しく見てみると、プロセスの最初にカーネルが解凍されることがわかります。

関連情報