0.2 Linuxカーネルのソースコード

 Linuxカーネルは、Linus氏を頂点とした開発コミュニティが開発した、オリジナルのカーネルです。Linuxカーネルのコードは次のサイトから入手してください。

 ftp://ftp.jp.kernel.org/pub/linux/kernel/v2.6/

 Linuxカーネルのコードは、500万行以上にも及ぶ非常に大きなものです。Linuxカーネルが改版されるたびに、信じられない速度でコードが大きくなっています。このLinuxカーネルコードは、機能ごとに大まかにディレクトリ単位で分類されています。これからLinuxカーネルを読まれる方の手助けになるよう、表0-1に各ディレクトリの説明をしておきます。Linuxカーネルのコードのうち、約半分がdrivers以下のデバイスドライバ用コードですが、Linuxカーネルの動きを理解するためには、代表的な一部のドライバの動きを理解するだけで大丈夫です。

 このLinuxカーネルコードは、目的に対して直接的な実装を採用しており、あまり複雑な構造にはなっていません。一方、ソースコードのコーディングポリシーには一貫性がなく、慣れるまではコードを読み解くときに非常に混乱すると思われます。バザール方式による開発スタイルが、その原因の1つです。その一方で、Linuxカーネルコードの新しいCPUアーキテクチャへの移植性は非常に高く、比較的容易に対応できます。

表0-1 Linuxカーネルのソースツリー
ディレクトリ概要
kernelLinuxカーネルの動きを制御する、基本機能
mmLinuxカーネルのメモリ管理(実メモリ管理、仮想記憶)
fs直下に仮想ファイルシステム。サブディレクトリ以下に、各種ファイルシステム
net各種ネットワークプロトコルに関するコード。サブディレクトリ以下には、TCP/IPをはじめ、UNIXドメインソケット、ATM、X.25など各種プロトコル処理に依存したコードがある
ipcSystem V IPC(共有メモリ、セマフォ、メッセージ)
initLinuxカーネル起動時に呼び出される、各種初期化処理の本体
crypto暗号処理共通関数
blockブロック型デバイス制御のための共通処理
drivers各種デバイスを制御するためのドライバ
soundサウンドドライバ
arch各種CPUアーキテクチャに依存したコード。CPUアーキテクチャごとサブディレクトリに分けられ、i386サブディレクトリ以下にはx86系CPU対応コード、それ以外にも64ビットCPUから組み込み専用CPU用のコードまで、さまざまなCPU用のコードが置かれている
includeLinuxカーネルのコンパイル時に参照する、各種ヘッダーファイル。CPUアーキテクチャ依存のヘッダーは、asmという名前で始まるサブディレクトリ下にまとめられている