デバイス・ドライバについて
[Up]
デバイス・ドライバについて
Dec. 25, 2001 T. Naniwa
デバイス・ドライバーのソースは kernel/BTRON/device 以下に保存されてい
るが,実態は ITRON タスクとなっており,それぞれ独立して動作する.ドライ
バとしての動作は,送られて来たメッセージに対する応答の形で作成される.作
成したドライバを利用するには,kernel/BTRON/make の Makefile と
config.tab を書き換え,コンパイルと btron イメージへの組み込みが行われる
ようにする必要がある.
以下の文章では,ファイルの相対パスについては kernel/POSIX/manager を省
略している.
まず,POSIX 環境でデバイスドライバにアクセスするには /dev 以下のスペシャ
ルファイルを open して read/write/fcntl などのシステムコールを発行するこ
とになるが,そのためにはスペシャルファイルの majori/minor 番号を決定し,
スペシャルファイルを作るとともに,filesystem.c の special_file_table に
デバイスドライバの識別名を登録しておく必要がある.ブロック・デバイスとキャ
ラクタ・デバイスは major 番号の最上位ビットで区別される.
デバイスドライバは,スペシャルファイルが open/close されたところで
DEV_OPN/DEV_CLS メッセージを受け取る.ブロック・デバイスは DEV_OPN に対
して,デバイスのサイズを返答する.これは,POSIX manager 内でデバイスの大
きさを越えたアクセスの制限に利用される.キャラクタ・デバイスはサイズとし
ては 0 を返せば良い.
次に,キャラクタ・デバイスとブロック・デバイスでは read に対する動作が
異なる.詳細は syscalls/read.c とsfs/sfs_device.c にあるが,ブロック・デ
バイスに対してアプリケーションが read システムコールを発行した場合
AP −(read)→ POSIX manager −(DEV_REA)→ device driver
の順にメッセージが送られ,POSIX manager は DEV_REA への返答を待つ.その
後 POSIX manager から AP に返答が返されるというのがメッセージの流れにな
る.
AP ←(返答)− POSIX manager ←(返答)− device driver
一方キャラクタ・デバイスにread システムコールを発行した場合,
AP −(read)→ POSIX manager −(DEV_PRD)→ device driver
の順にメッセージが送られ,POSIX manager からは DEV_PRD が発行される.こ
の場合,POSIX manager は DEV_PRD への返答は待たず,他のプロセスからのメッ
セージの受付を待つ状態になる.device driver からの read が終了した時点で,
device direver から直接 AP にメッセージが返され,AP は次の処理に移る.
AP ←(返答)− device driver
また,ブロック・デバイスからは一度に複数のデータを読み込むことが出来るが,
キャラクタ・デバイスからデータを読む場合は読み込むデータ数を常に 1 byte
毎になるようにしている.
read 以外の POSIX システムコールに対する動作は同じである.