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 を書き始める前に理解し、慣れることが多くあります。あまりにも多いので飽きてしまったり、実務のために必要な時間が少なくなってしまうかもしれません。

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

beagle bone black と実際のデバイスを使用して driver を開発していく予定です。

期待している経験値

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

今までと違うコーディング・ルール・スタイル

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

このページで使用する書式・表現

表現内容表現例説明
キーボード操作[Ctrl] + [Alt] + [Del]キーボードを押す操作を表現します。
GUI コントロールxtermGUI の ウインドウ・タイトル、テキスト・ボックス、チェック・ボックスの様なコントロールを表現します。
可変要素major_number環境や状況によって変化する内容を表現します。
コンソール入力gcc -Wall -O -o main main.cコンソールの入力を表現します。
コンソール出力Hello world.コンソールの入力を表現します。
コンソール入力の可変要素down_loaded_directoryコンソールの入力の可変要素を表現します。
コンソール出力の可変要素12:24:56コンソール出力の可変要素を表現します。
コード断片if (likely(condition))文章中のコード断片を表現します。関数名のようなシンボルはフォントを変えず、そのまま表記します。

Use the source, Luke!

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


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