デバイス・ドライバについて


[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 システムコールに対する動作は同じである.