私は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/kernel
initrd.img-3.16.0-rc6
160 658 665
initrd.img-3.16.0-031600rc6-generic
16 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 -h
185 MBから13 MBに増えました。
ディスク容量を使用する以外に見えるほど重要ではないことに注意してください。通常の動作中はデバッグシンボルがロードされないため、メモリ内の各モジュールの実際のサイズはファイルサイズに関係なく同じになる可能性があります.ko
。唯一の重要な違いはサイズだと思いますinitramfs
。唯一の違いは、ファイルシステムを解凍するのにかかる時間です。つまり、圧縮されていないinitramfsは重要ではありません。
strip --strip-all
また動作し、file
どちらも正しく報告しますstripped
。ディストリビューションに当てはまると言う理由はnot stripped
依然として謎です。
答え2
make oldconfig
これを行うと、プリmake vmlinuz
コンパイルされたカーネルが「実行可能なbzImage」であることがわかります。これはディスクに圧縮されていることを意味します。ブートメッセージを詳しく見てみると、プロセスの最初にカーネルが解凍されることがわかります。