Linux Kernel Driver Quest

はじめに

「自分が Linux Kernel Driver を書いてきた経験を整理したい」という目的でこのページを書く予定です。既に世の中には数多くの Linux Kernel Driver を書くための参考書があります。このページがこれらの参考書より優れた記述になる自信はありません。Linux Kernel Driver を書こうとするとき、様々な疑問や気になることをフラフラしながら書いていく予定です。

Driver を書く上で知っていれば良い範囲で Linux Kernel を読んでいきます。多くの Kernel 解説書で触れているような 起動処理、排他制御、リソース管理(メモリ、ディスク、他)、プロセス・スレッド管理/スケジューリング、ファイルシステム等は軽く触れるだけにします。

このページの進め方

全体を通してソースコードを追跡できる環境を使って Linux Kernel を読み進め、理解を深めるやり方で進めます。ソースコードを追跡する環境は web page として用意します。説明の各所でソースコード中のシンボルとそれに関連するソースコートを読めるリンクを張ります。一々リンクを辿るのは面倒かもしれません。それでも、ソースコードを読んでいくことを強く希望します。自分は Linux Kernel はソース自体が仕様書だと思っています。1 行、1 行、あるいはもっと細かく 1 演算子であっても、なぜその順で処理していくのか。いくつかの計算方法から、なぜその方法を選んだのか意図が込められている箇所があります。人間の言語では書ききれない仕様です。

仮想環境を使ったチュートリアル

仮想環境を使い、Linux Kernel の基礎を理解していく予定です。Driver を書き始める前に理解し、慣れることが多くあります。あまりにも多いので飽きてしまったり、実務のために必要な時間が少なくなってしまうかもしれません。

実働ターゲットを使った実践

期待している経験値

手短に言えば Linux あるいは POSIX 相当環境で、C 言語によるアプリケーション開発経験があると期待しています。最低限 2,000 行程度のアプリケーションを 4, 5 本は書いたという程度です。man page section 2 にある system call を使った経験がある。

今までと違う習わし

恐らく仕事でコーディングルールが決まっている。あるいは教育機関で「良い」とされるコーディングルールを習ったと思います。Linux Kernel には独自のコーディングルールがあります(追記予定)。これらは、アプリケーションプログラマにとって衝撃的なルールでしょう。いくつかの例をみていくと。

Use the source, Luke!

ソースを読むことです。とは言うものの膨大な量です。何処を読めばよいのか、grep でシンボルを探しても見つからない。といった理解を困難にする問題もできる限り解決できるようにしていきます。


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS