Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
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アーキテクチャへの移植性は非常に高く、比較的容易に対応できます。
ディレクトリ | 概要 |
kernel | Linuxカーネルの動きを制御する、基本機能 |
mm | Linuxカーネルのメモリ管理(実メモリ管理、仮想記憶) |
fs | 直下に仮想ファイルシステム。サブディレクトリ以下に、各種ファイルシステム |
net | 各種ネットワークプロトコルに関するコード。サブディレクトリ以下には、TCP/IPをはじめ、UNIXドメインソケット、ATM、X.25など各種プロトコル処理に依存したコードがある |
ipc | System V IPC(共有メモリ、セマフォ、メッセージ) |
init | Linuxカーネル起動時に呼び出される、各種初期化処理の本体 |
crypto | 暗号処理共通関数 |
block | ブロック型デバイス制御のための共通処理 |
drivers | 各種デバイスを制御するためのドライバ |
sound | サウンドドライバ |
arch | 各種CPUアーキテクチャに依存したコード。CPUアーキテクチャごとサブディレクトリに分けられ、i386サブディレクトリ以下にはx86系CPU対応コード、それ以外にも64ビットCPUから組み込み専用CPU用のコードまで、さまざまなCPU用のコードが置かれている |
include | Linuxカーネルのコンパイル時に参照する、各種ヘッダーファイル。CPUアーキテクチャ依存のヘッダーは、asmという名前で始まるサブディレクトリ下にまとめられている |