ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
B. Oracle Solaris DDI/DKI サービスのサマリー
Oracle Solaris コンソールとカーネル端末エミュレータ
コンソールフレームバッファードライバでの視覚的な入出力インタフェースの実装
X Window System のフレームバッファー固有の DDX モジュール
コンソールフレームバッファードライバの開発、テスト、およびデバッグ
ポーリングされた入出力インタフェースはドライバ内の関数として実装され、カーネル端末エミュレータから直接呼び出されます。ドライバは、VIS_DEVINIT ioctl コマンドの実行中に、自身のポーリングされた入出力エントリポイントのアドレスを端末エミュレータに渡します。VIS_DEVINIT コマンドは、端末エミュレータによって開始されます。
vis_polledio 構造体を次のコードに示します。
typedef void * vis_opaque_arg_t; struct vis_polledio { struct vis_polledio_arg *arg; void (*display)(vis_opaque_arg_t, struct vis_consdisplay *); void (*copy)(vis_opaque_arg_t, struct vis_conscopy *); void (*cursor)(vis_opaque_arg_t, struct vis_conscursor *); };
ポーリングされた入出力インタフェースは、VIS_CONSDISPLAY、VIS_CONSCOPY、および VIS_CONSCURSOR ioctl インタフェースと同じ機能を提供します。ポーリングされた入出力インタフェースは、対応する ioctl コマンドに関して上で説明されたのと同じ手順に従います。ポーリングされた入出力インタフェースは、このセクションの残りの部分で説明されている追加の制限に非常に厳密に従う必要があります。
ポーリングされた入出力インタフェースは、オペレーティングシステムが休止状態にあり、かつスタンドアロンモードにある場合にのみ呼び出されます。システムは、ユーザーが OpenBoot PROM に入った場合、または kmdb デバッガに入った場合には常にスタンドアロンモードに入り、システムがパニック状態になった場合にもこのモードに入ります。1 つの CPU と 1 つのスレッドのみがアクティブです。ほかの CPU とスレッドはすべて停止されます。タイムシェアリング、DDI 割り込み、およびシステムサービスはオフに設定されます。
スタンドアロンモードではドライバ機能が厳しく制限されますが、ドライバの同期要件は簡素化されます。たとえば、ユーザーアプリケーションが、ポーリングされた入出力ルーチン内からドライバのメモリーマッピングを通してコンソールフレームバッファードライバにアクセスすることはできません。
スタンドアロンモードでは、コンソールフレームバッファードライバは、次のどのアクションも実行してはいけません。
割り込みの待機
mutex の待機
メモリーの割り当て
DDI または LDI インタフェースの使用
システムサービスの使用
ポーリングされた入出力関数は比較的単純な操作であるため、これらの制限に従うことは難しくありません。たとえば、描画エンジンを操作する場合、コンソールフレームバッファードライバは割り込みを待機するのではなく、このデバイス内のビットをポーリングできます。ドライバは、割り当て済みのメモリーを使用して Blit データを描画できます。DDI または LDI インタフェースは必要ないはずです。