Linuxカーネルはどのように小さくできますか?


56

通常の安定した3 *カーネルは現在約70 mbです。しかし、ソフトウェアやその他のものがすぐに使える30〜10 mbのLinuxディストリビューションはほとんどありません。

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


3
別のオプションは、コンパイル時にサイズの最適化を使用することですが、それがどれほど大きな影響を与えるかはわかりません。
AndrejaKo

5
「LinusはLinuxを「肥大化した巨大な」と呼ぶ」theregister.co.uk/2009/09/22/linus_torvalds_linux_bloated_huge
Aki

1
@AndrejaKo-たくさん。(あなたは小さなサイズのために行く場合。)
Apacheの

19
70 MBはソースのサイズです。標準のコンパイルおよび圧縮カーネルは、約2 MB、10 MBなどのモジュールです。
ott--

1
はい、確かに、私のディストリビューションではinitramfsが21MBであるのに対して、3.6MBです。
困惑したタキシード

回答:


37

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

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

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

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


ちょっとした追加-[X]は、カーネルにコンパイルれることを意味します。したがって、常にロードされる理由です。
ローレンス14年

「初心者が期待する」とは、プロのコンピューター技術者であり、20年のLinuxベテランです。
クリフアームストロング

20

Tom's Root-BootMuLinuxDiet-router、(現在は廃止されている)LOAFなどの初期のLinuxディストリビューションは現在出発しており、すべて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

11

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

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

make INSTALL_MOD_STRIP=1 modules_install

以下からのドキュメント/ 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.

3
わあ、1897996 kBはほぼ2GBです!
netvope

3

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


1

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


Busyboxが「毎日」のほとんどのことを処理することに注意してください。
new123456

いいえ、busyboxはそれらを組み合わせただけです。小型の組み込みシステムで人気がありますが、デスクトップシステムではそうではありません。
pinxue
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.