ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
mutex_owned() を使用してロック要件の検証とドキュメント化を行う
条件付きコンパイルを使用してコストの高いデバッグ機能を切り替える
保守性を確保するには、ドライバが次の動作を実行できるようにする必要があります。
潜在的な障害とは、何らかのほかの動作が発生するするまではそれ自身が表面化しない障害のことです。たとえば、コールドスタンバイになっているデバイスで発生しているハードウェアの障害は、マスターデバイスで障害が発生するまで検出されないままになる場合があります。この時点で、システムには障害のあるデバイスが 2 つ含まれることになり、処理を継続できない可能性があります。
検出されないままの潜在的な障害は、通常、最終的にはシステム障害の原因となります。潜在的な障害の検査を行わないと、冗長システムの全体での可用性が損なわれます。このような状況を回避するには、デバイスドライバで潜在的な障害を検出し、ほかの障害と同じ方法で報告する必要があります。
ドライバには、デバイスで定期的な健全性検査を行うための機構を備える必要があります。デバイスがセカンダリデバイスまたはフェイルオーバーデバイスになる場合がある、耐障害を備えた状況では、プライマリデバイスで障害が発生する前に、障害が発生したセカンダリデバイスを早期に検出し、セカンダリデバイスを修復または交換できるようにすることが非常に重要です。
定期的な健全性検査を使用すると、次の活動を実行できます。
最後のポーリング以降に値が変更された可能性のあるデバイスで、レジスタまたはメモリーの場所を検査します。
通常、決定にかかわる動作を示すデバイスの機能には、ハートビートセマフォー、デバイスタイマー (たとえば、ダウンロードによって使用されるローカルの lbolt)、およびイベントカウンタが含まれます。更新された予測可能な値をデバイスから読み取ることで、処理が正常に行われているという確信を、ある程度持つことができます。
転送ブロックやドライバによって発行されたコマンドなどの送信要求にタイムスタンプを付けます。
定期的な健全性検査によって、完了していないと疑われる要求を探すことができます。
次に予定されている検査の前に完了する必要のある動作を、デバイスで開始します。
この動作が割り込みである場合、この検査は、デバイスの回路から割り込みを出力できることを確認する最適な方法です。