第4回 デバイスドライバの概要



この文章は、OS-9000/80386(OS-9/x86)およびOS-9/PowerPCに対応しています。



さて、ファイルマネージャの方はちょっと置いといて、デバイスドライバの方もやっときましょう。

OS-9のデバイスドライバは、ファイルマネージャのようなサブルーチンの集まりで構成されています。デバイスドライバを構成するサブルーチンは、ファイルマネージャ毎に異なります。つまり、ファイルマネージャの都合で自由に設計する事が出来るという事です。
RBFやSCFなど既存のファイルマネージャ用のデバイスドライバを設計するには、RBFやSCFの要求するインタフェースを用意しなければなりませんが、ファイルマネージャから作成する場合は、好き勝手に作ってしまう事が出来ます。ただし、基本的には次に示す6つのエントリで構成されます。
番号 エントリ名 内容
1 Init デバイスを初期化するために呼び出されます。デバイスドライバは必要に応じてハードウェアや、スタティックストレージの初期化を行います(デバイスが割り込みを使用する場合は、割り込みハンドラの登録も行います)。このエントリへのパラメタとしては、デバイスリストが必須だと思います。また、デバイスのパス名、アクセスモードがあると便利でしょう。
2 Read デバイスからデータを読み込むために呼び出されます。デバイスドライバは必要に応じてハードウェアからデータを読み出します(データ入力に割り込みを使用する場合は、入力キューからの読み出しになります)。このエントリへのパタメタとしては、パスディスクリプタ、入力バッファのアドレスが必須だと思います。また、RBFのようなデバイスでは論理セクタ番号などの位置情報も必要です。場合によっては入力バッファの大きさも必要になるでしょう。
3 Write デバイスへデータを書き込むために呼び出されます(データ出力に割り込みを使用する場合は、出力キューへの書き込みになります)。このエントリへのパラメタとしては、パスディスクリプタ、出力バッファのアドレスが必須だと思います。また、RBFのようなデバイスでは論理セクタ番号などの位置情報も必要です。場合によっては出力バッファの大きさも必要になるでしょう。
4 Getstat _os_getstat()を処理するために呼び出されます。このエントリへのパラメタとしては、パスディスクリプタとパラメタブロックが必須です。また、機能コードを個別のパラメタとして渡してやると便利でしょう。
5 Setstat _os_setstat()を処理するために呼び出されます。このエントリへのパラメタとしては、パスディスクリプタとパラメタブロックが必須です。また、機能コードを個別のパタメタとして渡してやると便利でしょう。
6 Terminate デバイスを後始末するために呼び出されます。デバイスドライバは必要に応じてハードウェアや、スタティックストレージの後始末を行います(デバイスが割り込みを使用する場合は、割り込みハンドラの登録解除も行います)。このエントリへのパラメタとしては、デバイスリストが必須となります。


関数宣言例
error_code Init(dev_list *, u_char *, u_int16);
error_code Read(path_desc *, u_char *, u_int32);
error_code Write(path_desc *, u_char *, u_int32);
error_code Getstat(path_desc *, u_int16, void *);
error_code Setstat(path_desc *, u_int16, void *);
error_code Terminate(dev_list *);

前へ 次へ 戻る