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