自分自身の好みに合うLinuxを作ることは,決して難しくない。フリーソフトを手順よく組み合わせていくことで,ごく普通のユーザーであっても自分だけのLinuxを作成できる。本講座を読みながら,Linuxの仕組みを理解して『自分Linux』を完成させよう。

 いよいよ自分Linuxの頭脳となるカーネルを作成する(図1)。カーネルには数多くのパラメータが存在する。それらの中から自分Linuxを起動・実行するために必要なパラメータだけを組み込み,自分Linux仕様のカーネルに仕立てていこう。一からカーネルを構築する作業を通じて,カーネルの機能や作成方法を学んでいただきたい。

図1 自分Linux作成作業の流れ
今回は,カーネルのコンパイルである。

カーネルとは何か

 カーネルは,LinuxをはじめとするさまざまなOSの中核を担う重要なプログラムである。カーネルの主な役割はメモリー管理やディスク管理,割り込み管理,プロセス間通信などであり,OSが動作するための基本的な機能を提供する。ここで,カーネルには「モノリシック・カーネル」と「マイクロ・カーネル」の2種類があることを覚えておいていただきたい。違いは,別掲記事(本ページ下に掲載)「モノリシック・カーネルとマイクロ・カーネル」にまとめた。

 ちなみにLinuxのカーネルはモノリシック・カーネルであり,Windows XP/2000などのカーネルはマイクロ・カーネルである。

Linuxカーネルの歴史

 Linuxは,読者の皆さんもご存知であろうLinus Torvalds氏が,1991年ころの大学生時代(21歳当時)に開発したカーネル部分を指す。Linux(カーネル)の歴史はUNIXやそのほかのUNIX系OSに比べると浅く,カーネル・バージョン1.0が公開されてからまだ11年しか経っていない。しかし,数多く存在するコミュニティによって支えられ,日々急速に進化し続けている。Linux誕生の歴史をより詳しく知りたい場合は,「Linuxの歴史」(http://uc.linux-cafe.jp/r/linux_history.html)が参考になる。

 Linuxカーネルのバージョンには暗黙のルールがある。バージョンのリリース部分(小数点以下の最初の数字)が奇数の場合は開発版,偶数の場合は安定版である。例えば,現在の安定版カーネルのバージョンは2.6であるが,その安定版が公開されるまでの開発版カーネルのバージョンは2.5である。おそらく次期カーネルの開発が始まると,バージョン2.7が開発版,バージョン2.8が安定版となるだろう。

自分Linuxのカーネルを作る

 早速,自分Linuxの頭脳であるカーネルの作成を開始しよう。冒頭でも述べたが,自分Linuxの起動や動作に必要なパラメータのみを組み込み,最最低限に機能を絞り込んでいく。

 そうすることでデバイス・ドライバの数を減らせ,カーネル全体のサイズが小さくなる。フラッシュ・メモリーやメイン・メモリーの容量が少ない環境でも自分Linuxを動作できる可能性が広がる。

 本講座では表1に示したハードウエア環境を基にして解説する。ただし,ネットワーク・インタフェース・カード(NIC)の設定では一般によく利用されているものも対象にする。取り上げているのとは異なるハードウエア環境の場合には,ここで紹介する手順を適宜変更して自分なりのカーネル設定を施していただきたい。

表1 連載で用いているハードウエア環境
[画像のクリックで拡大表示]


モノリシック・カーネルとマイクロ・カーネル

 カーネル本体と周辺装置に依存したデバイス・ドライバなどを一体化したカーネルを「モノリシック・カーネル」と呼ぶ。カーネルに必要な機能を組み込んでいるため,後述するマイクロ・カーネルと比べて,速度面では有利だ。

 ただし,周辺装置を変更した場合にはデバイス・ドライバの入れ替えが発生する。つまり,カーネルの再構築が必要となる。また,周辺機能を分離していないため,開発効率が悪い。

 一方,マイクロ・カーネルはカーネル本体と周辺機能を分離し,メモリー管理,プロセス/スレッド管理,プロセス間通信機能,割り込み/例外処理などの最低限の機能だけを実装したものである。そのため,カーネルはそれら周辺機能を実現する複数のプログラムと協調し合いながら動作する。カーネルと周辺機能が分離されているため,開発効率は高い。

 マイクロ・カーネルが提唱された1980年代から1990年代にかけては,いずれはすべてのOSがマイクロ・カーネルになるだろうと予想されていた。しかし,モノリシック・カーネルを実装していたLinuxの成功により,そのような議論はほとんど意味をなさなくなった。

 現在は,Linuxにもモジュール化機構が搭載*A-1されており,モノリシック・カーネルでありながらマイクロ・カーネルの長所を取り入れたカーネルの開発が進められている。このように,カーネル一体型からモジュール型にすることにより,仮にデバイス・ドライバに不具合があった場合でも簡単に入れ替えられる。