モジュールのロードに必要な関数や必須の自動構成エントリポイントなど、一部の処理はどのタイプのドライバでも実行できます。このセクションでは、すべてのドライバに共通したエントリポイントの種類について説明します。共通のエントリポイントの一覧は、Summary of Common Entry Pointsに、マニュアルページへのリンクとその他の関連情報とともに記載してあります。
文字デバイスとブロックデバイス用のドライバは、cb_ops (9S) 構造体をエクスポートします。この構造体では、ブロックデバイスアクセスと文字デバイスアクセス用のドライバエントリポイントを定義します。どちらのタイプのドライバも、open(9E) およびclose (9E) エントリポイントをサポートする必要があります。ブロックドライバは strategy(9E) をサポートする必要がありますが、文字ドライバはデバイスのタイプに適していれば、read (9E)、write (9E)、ioctl (9E)、mmap(9E)、または devmap (9E) エントリポイントのどのような組み合わせの実装も選択できます。さらに、文字ドライバは chpoll(9E) を通じてポーリングインタフェースをサポートすることもできます。非同期入出力は、ブロックドライバと、ブロックファイルシステムおよび文字ファイルシステムの両方を使用できるドライバで、aread (9E) およびawrite (9E) を通じてサポートされます。
すべてのドライバは、ドライバモジュールのロード、アンロード、および情報の報告を行うためにロード可能なモジュールのエントリポイント _init(9E)、_fini (9E)、および_info (9E) を実装する必要があります。
ドライバは、_init (9E) でグローバルリソースの割り当てと初期化を行うべきです。ドライバは、 _fini(9E) でそのリソースを解放するべきです。
ドライバは、デバイスの自動構成のために attach (9E)、detach (9E)、およびgetinfo (9E) エントリポイントを実装する必要があります。また、SCSI ターゲットデバイスなど、デバイスがブート中に自らを識別できない場合は、オプションのエントリポイントprobe (9E) を実装できます。これらのルーチンの詳細は、Chapter 6, Driver Autoconfigurationを参照してください。
Oracle Solaris プラットフォームには、カーネルレベルの統計情報 (kstats とも呼ばれる) を保持およびエクスポートするための豊富なインタフェースセットが用意されています。ドライバは、これらのインタフェースを自由に使用して、ドライバの内部状態を監視するために、ユーザーアプリケーションで使用できるドライバとデバイスの統計情報をエクスポートします。カーネル統計情報を処理するために 2 つのエントリポイントが提供されています。
ks_snapshot(9E) は、特定の時間に kstats を取り込みます。
ks_update(9E) は、kstats データを自由に更新するために使用できます。ks_update() は、デバイスがカーネルデータを追跡するように設定されているが、そのデータの抽出に時間がかかる場合に役立ちます。
詳細は、kstat_create (9F) とkstat (9S) のマニュアルページを参照してください。Kernel Statisticsも参照してください。
電源管理機能を備えたハードウェアデバイスのドライバは、オプションのエントリポイント power(9E) をサポートできます。このエントリポイントの詳細は、Chapter 12, Power Managementを参照してください。
デバイスを管理するドライバでは、quiesce(9E) エントリポイントを実装する必要があります。デバイスを管理しないドライバでは、dev_ops 構造体の devo_quiesce フィールドを ddi_quiesce_not_needed() に設定できます。quiesce() 関数を呼び出せるのは、システムが、横取りが無効化された、高い PIL (Priority Interrupt Level) を持つシングルスレッドである場合だけです。したがって、この関数がブロックされてはいけません。デバイスに定義済みのリセット状態構成がある場合、ドライバは休止処理の一部として、デバイスをそのリセット状態に返すべきです。この場合の一例として、新しいオペレーティングシステムイメージへのブート時にファームウェアがバイパスされる高速リブートが挙げられます。
次の表に、すべてのタイプのドライバで使用できるエントリポイントの一覧を示します。
|