最終更新:2015-10-29 (木) 18:03:31 (3388d)
Linux/デバイスドライバ
ドキュメント
開発メモ
Linuxでのデバイスの扱い
- Un*x の基本的特徴のひとつは、デバイスの操作を抽象化していることである。 すべてのハードウェアデバイス?は、通常ファイルのようのように見える。
- それらは、 ファイル操作で使用されるのと同じ標準的なシステムコールを利用して、オープン、 クローズ、書き込み、読み出しが可能である。
- システム上のあらゆるデバイスは、 デバイスファイルによって表現されていて、たとえば、システム上の最初の IDE ディスクは /dev/hda と表される。
デバイスの種類
- ブロックデバイス - ある決められた単位(ブロック)でデータの入出力を行うデバイス
- キャラクタデバイス - 1バイトずつデータの入出力を行うデバイス
- ネットワークデバイス
メジャー番号とマイナー番号
- 同一のデバイスドライバによって制御されるすべてのデバイスコントローラは、共通の メジャー番号を持つ。
- マイナーデバイス番号が使用されるのは、デバイスドライバが 異なるデバイスやそのデバイスのコントローラを区別するためである。
ドライバの処理
- 初期化ルーチン:OSの起動時に呼ばれ、デバイスをOSに認識させる
- トップハーフルーチン:アプリケーションから呼ばれる部分 (open/read)
- ボトムハーフルーチン:ハードウェア割り込みによって駆動される
組み込み方
- Linux/sys/moduleでロードされているモジュール一覧が見れる
静的リンク
- カーネル本体にデバイスドライバを組み込む (make configでy指定)
- ランレベル1の時に読み込まれる。
- カーネルが肥大化・・
- ライセンスの問題
Linux/カーネルモジュール
- ドライバを動的にロードしたりできる。(make configでm指定)
- ランレベル3の時に読み込まれる
コンパイル
- コンパイルするだけならカーネルのヘッダがインストールされていれば良い。
コマンド
Linux/カーネルモジュール/開発
置き場所
ソースコード
- Linux/usr/src/linux/drivers?
バイナリ
- Linux/lib/modules/version/kernel/drivers?
デバッグツール
システムコール
関連
Linux Device Drivers, Third Edition (オライリー本)
http://lwn.net/Kernel/LDD3/
- CCライセンスで公開されている。
古い
Linux 2.4
http://homepage3.nifty.com/rio_i/lab/driver24/
http://www.mech.tohoku-gakuin.ac.jp/rde/contents/linux/drivers/indexframe.html
参考
http://net-newbie.com/linux/driver/
http://net-newbie.com/linux/driver/driver2.html
http://d.hatena.ne.jp/elwoodblues/20090715/1247637254
http://www.cc.toin.ac.jp/haya-lab/knowhow/doc5.html
http://archive.linux.or.jp/JF/JFdocs/The-Linux-Kernel-9.html
http://www.linuxforu.com/tag/linux-device-drivers-series/