カーネルとは何か、なぜカーネルを設定するのか?
Linux カーネルは、コンピュータのハードウェアと、あなたが毎日使っているソフトウェ アをつなぐ役割を果たすプログラムです。このカーネルがあるからこそ、日常的に使うプログラムに対して、様々なデバイスを使うことができるのです。
このハードウェアとソフトウェアのリンクの一例として、ALSA(Advanced Linux Sound Architecture)があります。ALSAは、Linuxカーネルに内蔵されているサウンドドライバのフレームワークです。ALSAを使うと、サウンドカードを簡単にインストールし、好きなプログラムですぐに動作するように設定することができます。 Linux カーネルは、一般ユーザにはほとんど知られていないプログラムです。ほとんどの場合、ディストリビューションをインストールすると、箱から出してすぐに動くようなカーネルが手に入ることがよくあります。これは、単にシステムを動作させるだけなら便利です。 しかし、Arch や Gentoo のようなディストリビューションを使っている場合、カーネルを設定できることは長い目で見ると有益です。例えば、必要な機能だけを有効にすることで、起動時間を短縮することができます。 この記事では、あなた自身の Linux カーネルをコンパイルするときに役立つ5つのヒントを提供することを目的としています。注: 自作カーネルのコンパイルを始めるには、この記事をチェックしてください。
1. ヘルプシステムを使う
Linux カーネルを設定する際に最も便利な機能のひとつが、ヘルプシステムです。これは、Kernel Configuration Menu の中にあるビルトイン機能で、アクセスすることができます。カーネルにインストールできるすべての機能とドライバの説明を見ることができます。
このシステムを使うために必要なことは、特定のカーネルオプションをハイライトしている間に Shift
+ /
を押すことです。そこから、設定メニューがその機能が何をするものなのか、簡単なスライドを表示します。例えば、Shift
+ /
を押して “PCI Support” オプションを選択すると、それを使用するために有効にする必要があるすべてのオプションが表示されます。
これを行うには、設定メニューの中で /
を押します。すると、小さなプロンプトが表示され、そこで特定のオプションの名前を入力することができます。例えば、/
を押してから “PCI “と入力すると、PCIフラグを使用するオプションが検索されます。
2. 不要な HID サポートを無効にする
Linux Kernel はしばしば、ほぼすべてのハードウェアをサポートするソフトウェアであると 自らを宣伝しています。Linux カーネルは、ほぼすべてのハードウェアをサポートしているソフトウェアであ ると自負していますが、接続したデバイスを駆動できることは間違いないでしょう。
しかし、この方法の1つの問題は、あらゆるサポートを含めると、カーネルの全体的なサイズとフットプリントが増大することです。このため、悪意のあるハッカーが簡単に悪用し、侵入できる遅いバイナリーになる可能性があります。 この問題に対処する1つの方法は、自分のマシンで使わないハードウェアサポートを削除することです。例えば、Linuxカーネルはデフォルトの設定でFirewireのサポートを含んでいます。にもかかわらず、現在ではほとんどのマシンがデフォルトでFirewireポートを搭載していません。 このことを知った上で、どのハードウェアデバイスを無効にできるかを調べるには、 「Special HID Drivers」セクションを見るのが手っ取り早い方法です。これは Configuration Menu の “Device Drivers” と “HID Support” でアクセスできるカテゴリです。この中で、カーネルはサポートできる珍しいデバイスをすべてリストアップします。
これを使って、Shift
+ /
と /
で、このセクションにリストアップされた各オプションを検索することもできます。例えば、「ELECOM devices」を選択して、Shift
+ /
を押すと、そのオプションが何をするものなのかを見ることができます。
次に、必要なデバイスを選択して N
を押すと、その機能を無効にすることができます。私の場合、これらのデバイスを使用しないので、すべてのSpecial HIDサポートを無効にすることにします。
3. 不要なファイルシステムのサポートを無効にする
カーネルのサイズを小さくするもう一つの手っ取り早い方法は、使わないファイルシステムのサ ポートを削除することです。デフォルトでは、Linux カーネルは、ほとんどの種類のファイルシステムをオプションで サポートしてビルドされています。これには、古い BSD FFS や、BTRFS のような高性能なシステムも含まれます。
ほとんどの場合、普通のユーザーは、日常的に使うファイルシステムのほんの一握りしか使いません。例えば、Linuxシステムでは、一般的にEXT2、EXT4、FAT32、NTFSをすべてのデータ保存に使用しています。そのため、他のファイルシステムのサポートを削除することで、カーネルから相応の追加性能を得ることができます。 カーネル内の不要なファイルシステムのサポートを削除するには、「ファイルシステム」カテゴリに移動するだけです。
そこから、システムから削除したいファイルシステムをハイライトして N
を押すことで、選択することができます。私の場合、EXT2、EXT3、EXT4、JFS のサポートだけを残しておきます。
4. 不要なグラフィックドライバを無効化する
Special HID と Filesystems のサポートの両方を無効にする以外に、Configuration Menu を使って、使用しないグラフィックドライバを削除することもできます。これは、Linux カーネルが、ほとんどの最新のグラフィックデバイスのサポートをバンドルしているためです。つまり、あなたのマシンがグラフィックカードを使用していなくても、カーネルはあたかもグラフィックカードがあるかのように動作するのです。
上記と同様に、この結果、必ずしも必要でない機能を実行するカーネルバイナリとなります。これは、古いハードウェアや脆弱なハードウェアで Linux を動作させている場合、問題となることがあります。 不要なグラフィックサポートを削除するには、まず設定メニューの「デバイスドライバ」セクションに移動する必要があります。そこで、スクロールダウンして、“Graphics support “を選択する必要があります。
一度選択すると、カーネルはドライバを提供するすべてのグラフィックスハードウェアのリストを表示します。ここから、あなたは Y
か N
を押して、特定のドライバを有効にしたり無効にしたりすることができます。
5. 5. ドライバをモジュールとしてインストールする
最後に、Linux カーネルの最も優れた特徴の一つは、それ自体の一部を削除し、モジュールと して再ロードすることができることです。この方法は、カーネルのサイズを小さくするだけでなく、カーネル の機能を柔軟に利用することができます。
例えば、ワイヤレスドライバをモジュール化することで、カーネルを再コンパイルすることなく更新することができます。このように、モジュールは、高速なカーネルを持ちながら、Linux の優れたハードウェア互換性を維持したいユーザにとって、特に有用なものです。 ビルトイン機能をモジュールに変換するには、モジュールに変換したいセクションとオプションに移動する必要があります。例えば、ワイヤレスドライバを変換するには、“Networking Support” セクションに行き、“Wireless” に行く必要があります。
そこから “cfg80211” ドライバで M
を押して、カーネルモジュールに変換します。
これができたら、Esc
を6回押して設定メニューを終了します。これで、あなたが行った変更を保存するかどうかを尋ねるプロンプトが表示されるようになります。私の場合は、“Yes “を選択します。
make && make modules_install
make install
Frequently Asked Questions (よくある質問)
私の Linux カーネルが必要とするデバイスドライバを知ることはできますか?
はい! 自分のカーネルをコンパイルし始めたばかりのユーザにとって、ハードルの一つ は、使っているハードウェアの種類を正確に把握することです。これは難しい作業のように思えるかもしれませんが、現在ではこの作業を容易にするために使えるプログラムがたくさんあります。
例えば、lspci
と lsusb
の両方を使えば、あなたのマシンに接続されているすべての ハードウェア周辺機器を調べることができます。さらに、sudo dmesg
コマンドを実行して、カーネルが正しくデバイスを読み込 んでいるかどうかをチェックすることもできます。
Linux カーネルから削除した機能を復活させることはできますか?
はい!一度 Linux カーネルから削除した機能を再インストールすることは可能です。これを行うには、設定メニューに戻って、再有効化したい機能の上で Y
か M
のどちらかを押す必要があります。こうすることで、カーネルにその機能をビルトインかモジュールとして組み込むように指示します。
これが終わったら、カーネルを再コンパイルして、すべての新機能を含むバイナリを作成する必要があります。これを行うには、Esc
を6回押して設定メニューを保存して終了する必要があります。そこから make
を実行することで、カーネルの再コンパイルを開始できま す。
Linux カーネルの機能はいつモジュールとしてインストールすべきですか?
モジュールとして機能をインストールするのは、あなたがカーネルから何を必要とし ているかに大きく依存します。それを知った上で、経験則として、ブートプロセスに重要でない機能についてのみモジュー ルを作成するのがよいでしょう。
なぜなら、Linux カーネルはその中核で、単一のイメージとしてブートできることに依存 しているからです。例えば、マルチプロセッサのサポートのような重要な部分を削除すると、カーネルがブートできなくなる事態を招きます。 そのため、一般的にモジュールとなるカーネルコンポーネントは、グラフィックスなどのハードウェアドライバか、ネットワークインターフェイスのどちらかです。 画像引用元:Unsplash