next up previous
次へ: openシステムコール 上へ: 情報システム実験(7) 戻る: 情報システム実験(7)

システムコールの実装(その1: dio_open, dio_release)

ユーザ空間用に作成したアプリケーションから、カーネル空間に展開したデバイ スドライバにアクセスするためには、カーネルへのシステムコールを利用する。

デバイスアクセスに使用できるシステムコールには、次のようなものがある。

これらのシステムコールを実行したときに、カーネル空間のデバイスドライバで は各システムコールに対応した関数を呼び出す。

呼び出される関数は、情報システム実験(6)の「1.1キャラクタ型ドラ イバの登録(register_chrdev)」でキャラクタ型ドライバの登録時に設定 したfile_operations構造体の各フィールドに対応づけられる。

構造体の中の各フィールドは、特定の操作を実装するドライバの関数へのポイン タである。サポートされていない操作の場合は、NULLのままにしておく。


\begin{boxedminipage}{7cm}
\begin{verbatim}file_operations dio_fops = {
owne...
...
ioctl: NULL,
open: NULL,
release: NULL,
}\end{verbatim}
\end{boxedminipage}

この構造体にNULLを指定していた部分を、実際に処理を実行したい関数 のポインタを指定するように変更してregister_chrdev関数を対応づける ことで、システムコールの実行時に任意の処理が呼び出されるようになる。 (注. ownerは関数のプレースホルダではないため、対応するシステムコー ルは存在しない。)

各システムコールとfile_operation構造体のメンバとの対応は次のよう になる。

ユーザ空間のopenシステムコールはカーネル空間のopenメソッド に対応する。同様にユーザ空間のcloseシステムコールはカーネル空間の releaseメソッドに対応する。



Subsections

MANOME Yoichi 平成18年12月26日