web-dev-qa-db-ja.com

どうすればLinuxカーネルをそれほど小さくできますか?

通常の安定した3 *カーネルは現在約70 MBです。しかし、30-10 mbのLinuxディストリビューションはほとんどなく、ソフトウェアやその他のものがそのまま実行されています。

これらのディストリビューションでLinuxカーネルを小さくするにはどうすればよいですか?不要なモジュールとドライバーのみを取り除くことでサイズを劇的に削減できますか?カーネルサイズを小さくするために他に何をしますか?

57
puzzled tux

はい。それらを取り除く(必要なものだけをコンパイル/作成する)場合は、カーネルを圧縮します(サイズを最適化します)...そのような小さなカーネルになります。ターゲットシステム用に、さらに小さいものを作成できます。私は自分のPCを知っているように、自分のものを知っています。したがって、必要なものだけをコンパイルします。私自身のSATAドライバー、USBドライバーなどのように。 Webカメラなし、古いIDEドライブ、なし。

また、遭遇するより大きなものはWHOLEカーネルです(これは決して使用する必要はありません)。デスクトップのものでも(ほとんどの場合、モジュールとして)不要なものがたくさん含まれています。しかし、初心者は、プラグインするあらゆる種類のハードウェアが機能することを期待しています。

(モジュールは必要になるまで読み込まれません。3つの状態があります:
[ ]-コンパイルされません。カーネルの一部にはなりません。
[M]-モジュールとしてコンパイルされます。
(あなたはそれをmodprobeすることができます、またはあなたのシステムはそれが必要なときにそれを自動ロードします。
システム、ユーザーランドによって異なります。)
[X]-カーネルにコンパイルされ、常に存在します。

小さなカーネルのディストリビューション:

37
Apache

Tom's Root-BootMuLinuxDiet-router 、(現在は機能しなくなった)などの初期のLinuxディストリビューション [〜#〜 ] loaf [〜#〜] と他の多くの人が現在出発しましたが、どれも1つまたは2つの1.44 MBフロッピーディスクで動作するLinuxシステムに適合します。

Linuxカーネルは成長していますが、モジュール式です。カーネルモジュールは必要に応じて読み込まれます。したがって、フットプリントが非常に小さいLinuxディストリビューションを作成することも可能です。

参照: カーネルサイズチューニングガイド-eLinux.org

Linux_tiny.pdf を読むと、これが表示されます

  • 歴史的な0.99pl15カーネル:Slackware 1.1.2、1994:301K
  • Fedora Core 2:1.2M
  • SuSE 9.1:1.5M
  • 2.6.5-tiny1テスト構成:IDE、ext2、TCP、NIC:363K
21
RedGrittyBrick

デフォルトのカーネル構成は、できるだけ多くのハードウェアをサポートするように構成されています。デフォルト構成のストリップされていないカーネルの結果、サイズは1897996 kB(カーネル+モジュールを含む)になりました。多くの不要なドライバーとオプション(Clevoノートブックを所有している場合にHPモジュールが必要な理由)を取り除くと、サイズが892892 kBになり、標準のカーネルと比較してサイズが53%削減されました。

カーネルモジュールをインストールするときに、INSTALL_MOD_STRIP=1オプション。これにより、すべてのデバッグシンボルが削除され、サイズが92%(892892 kBから69356 kBに)削減されます。これはインストールされるモジュールにのみ影響し、カーネル(vmlinuz)自体には影響しないことに注意してください。

make INSTALL_MOD_STRIP=1 modules_install

From Documentation/kbuild/kbuild.txt

INSTALL_MOD_STRIP
--------------------------------------------------
INSTALL_MOD_STRIP, if defined, will cause modules to be
stripped after they are installed.  If INSTALL_MOD_STRIP is '1', then
the default option --strip-debug will be used.  Otherwise,
INSTALL_MOD_STRIP value will be used as the options to the strip command.
11
Lekensteyn

ほとんどの主要なディストリビューションは、最大のハードウェアサポートを使用してカーネルを構成しているため、ほとんどのコンピューターや、後でプラグインするものはすべてそのまま使用できます。また、ほとんどの場合必要のないinitrdシステムを使用します。カーネル構成には、ビルドプロセスのサイズを最適化するオプションもあり、より良い(低速ですが)圧縮方法も選択できます。最後に、カーネルソースコードのサイズを確認する場合は、x86/AMD64以外のいくつかのアーキテクチャ、ネットワークプロトコル、ファイルシステム、およびおそらく使用しない可能性があり、それが可能なその他の機能のサポートも含まれていることに注意してください。無効にする。

3
Jonathan Amend

それは非常にシンプルです。最小限のシステムはブートローダー+カーネルが必要なだけですが、ほとんど役に立ちません。日常的に使用されるコマンドのほとんどは、sh、lsなど、システムのオプションのバイナリです。内部に興味がある場合は、 Linux From Scratch! が良い出発点です。

1
pinxue