Linuxカーネルは、ソフトウェア工学の見事な作品です。100万行を超えるコードで、今日でも活発に開発が行われている最も複雑なプログラムの一つであることは間違いないでしょう。1990年代後半から、Linuxカーネルは、計算集約的なプロジェクトだけでなく、素っ気ない組み込みアプリケーションにも使用されています。

カーネルとは何か、なぜカーネルを設定するのか?

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 “を選択する必要があります。

一度選択すると、カーネルはドライバを提供するすべてのグラフィックスハードウェアのリストを表示します。ここから、あなたは YN を押して、特定のドライバを有効にしたり無効にしたりすることができます。

私の場合、“Intel 8XX Graphics” と “Intel GMA500 Framebuffer” の両方を有効にすることにします。

5. 5. ドライバをモジュールとしてインストールする

最後に、Linux カーネルの最も優れた特徴の一つは、それ自体の一部を削除し、モジュールと して再ロードすることができることです。この方法は、カーネルのサイズを小さくするだけでなく、カーネル の機能を柔軟に利用することができます。

例えば、ワイヤレスドライバをモジュール化することで、カーネルを再コンパイルすることなく更新することができます。このように、モジュールは、高速なカーネルを持ちながら、Linux の優れたハードウェア互換性を維持したいユーザにとって、特に有用なものです。

ビルトイン機能をモジュールに変換するには、モジュールに変換したいセクションとオプションに移動する必要があります。例えば、ワイヤレスドライバを変換するには、“Networking Support” セクションに行き、“Wireless” に行く必要があります。

そこから “cfg80211” ドライバで M を押して、カーネルモジュールに変換します。

これができたら、Escを6回押して設定メニューを終了します。これで、あなたが行った変更を保存するかどうかを尋ねるプロンプトが表示されるようになります。私の場合は、“Yes “を選択します。

これで、以下のコマンドを実行することで、欲しい機能を持ったバージョンのLinuxカーネルをコンパイルできるようになりました。

make && make modules_install
make install

Frequently Asked Questions (よくある質問)

私の Linux カーネルが必要とするデバイスドライバを知ることはできますか?

はい! 自分のカーネルをコンパイルし始めたばかりのユーザにとって、ハードルの一つ は、使っているハードウェアの種類を正確に把握することです。これは難しい作業のように思えるかもしれませんが、現在ではこの作業を容易にするために使えるプログラムがたくさんあります。

例えば、lspcilsusb の両方を使えば、あなたのマシンに接続されているすべての ハードウェア周辺機器を調べることができます。さらに、sudo dmesg コマンドを実行して、カーネルが正しくデバイスを読み込 んでいるかどうかをチェックすることもできます。

Linux カーネルから削除した機能を復活させることはできますか?

はい!一度 Linux カーネルから削除した機能を再インストールすることは可能です。これを行うには、設定メニューに戻って、再有効化したい機能の上で YM のどちらかを押す必要があります。こうすることで、カーネルにその機能をビルトインかモジュールとして組み込むように指示します。

これが終わったら、カーネルを再コンパイルして、すべての新機能を含むバイナリを作成する必要があります。これを行うには、Escを6回押して設定メニューを保存して終了する必要があります。そこから make を実行することで、カーネルの再コンパイルを開始できま す。

Linux カーネルの機能はいつモジュールとしてインストールすべきですか?

モジュールとして機能をインストールするのは、あなたがカーネルから何を必要とし ているかに大きく依存します。それを知った上で、経験則として、ブートプロセスに重要でない機能についてのみモジュー ルを作成するのがよいでしょう。

なぜなら、Linux カーネルはその中核で、単一のイメージとしてブートできることに依存 しているからです。例えば、マルチプロセッサのサポートのような重要な部分を削除すると、カーネルがブートできなくなる事態を招きます。

そのため、一般的にモジュールとなるカーネルコンポーネントは、グラフィックスなどのハードウェアドライバか、ネットワークインターフェイスのどちらかです。

画像引用元:Unsplash

Akira
Akiraは情熱的なゲーマーであり、製品レビュアーです。ゲームをしていないときは、最新のゲーミングアクセサリーを試したり、製品のレビューをしていることが多い。彼の分かりやすいスタイルは、ゲーマーが自分のニーズに最も適した製品を簡単に判断できるようにするものです。また、技術的な問題にも精通しており、その解決方法も知っている。