ユーザ空間用に作成したアプリケーションから、カーネル空間に展開したデバイ
スドライバにアクセスするためには、カーネルへのシステムコールを利用する。
デバイスアクセスに使用できるシステムコールには、次のようなものがある。
openシステムコール
closeシステムコール
readシステムコール
writeシステムコール
ioctlシステムコール
これらのシステムコールを実行したときに、カーネル空間のデバイスドライバで
は各システムコールに対応したメソッド(関数)を呼び出す。
呼び出されるメソッド(関数)は、情報システム実験(11)の「1.2 cdevイン
ターフェイス」の「キャラクタ型デバイスドライバの登録は次のように行う」で
cdev_init関数を使ってデバイスドライバの登録する時に設定した
file_operations構造体の各フィールドに対応づけられる。
構造体の中の各フィールドは、特定の操作を実装するドライバのメソッド(関数)
へのポインタである。サポートされていない操作の場合は、NULLのまま
にしておく。
この構造体のNULLで指定していた部分を、実際に処理を実行したいメソッ
ド(関数)のポインタで置き換えて、これをcdev_init関数で対応づけるこ
とで、システムコールの実行時に任意の処理を呼び出せるようになる。
(注. ownerはメソッド(関数)のプレースホルダではないため、対応する
システムコールは存在しない。)
各システムコールとfile_operation構造体のメンバとの対応は次のよう
になる。
openシステムコール:open
closeシステムコール:release
readシステムコール:read
writeシステムコール:write
ioctlシステムコール:ioctl
ユーザ空間のopenシステムコールはカーネル空間のopenメソッド
に対応する。同様にユーザ空間のcloseシステムコールはカーネル空間の
releaseメソッドに対応する。