Solaris 8 のソフトウェア開発 (追補)

ドライバのテスト

この節では、th_define(1M) コマンドと th_manage(1M) コマンドを使用して、障害を作成し投入する方法を説明します。

障害の作成

th_define(1M) ユーティリティは、errdef を定義するための、bofi デバイスドライバへのインタフェースを提供します。1 つの errdef が、デバイスドライバのハードウェアへのアクセスを破壊する方法に関する 1 つの仕様に対応しています。th_define のコマンド行引数によって、投入する障害の正確な種類を指定します。指定した引数によって矛盾のない errdef が定義される場合は、th_define プロセスは bofi ドライバに errdef を格納します。errdef で定められている基準に達するまで、プロセスは停止状態になります。実際には、アクセスカウントがゼロ (0) になると、停止状態が終了します。

障害の投入

テストハーネスはデータアクセスのレベルで動作します。データアクセスには次のような特性があります。

テストハーネスはデータのアクセスを横取りし、該当する障害をドライバに投入します。th_define(1M)コマンドで指定された errdef によって、次の情報がエンコードされます。

-a acc_chk オプションを使用すると、errdef でフレームワーク障害をシミュレートできます。

障害投入プロセス

障害を投入するプロセスには、次の 2 つの段階があります。

  1. th_define コマンドを使用して errdef を作成します。

    テストの定義を bofi ドライバに渡して、errdef を作成します。bofi ドライバは定義を保持するので、th_manage(1M) を使用して定義にアクセスできます。

  2. 作業負荷を作成し、th_manage を使用して errdef を起動し管理します。

    th_manage(1M) コマンドは、bofi ハーネスドライバが認知するさまざまな ioctl に対するユーザーインタフェースです。th_manage はドライバ名とインスタンスのレベルで動作します。th_manage には、アクセスハンドルを一覧表示する get_handles、errdef を起動する start、errdef を中止する stop などのコマンドがあります。

    errdef を起動すると、対象となるデータのアクセスに障害が発生します。th_manage ユーティリティでは、errdef の現在の状態を表示する broadcast や errdef をクリアする clear_errors などのコマンドがサポートされています。

    詳細は、th_define(1M) および th_manage(1M) のマニュアルページを参照してください。

テストハーネスの警告

テストハーネスは、警告メッセージを次の方法で処理するように設定できます。

2 つめの方法を取ると、問題の根本原因を突き止めやすくなります。

bofi-range-check 属性値を warn に設定すると、ドライバによる DDI 関数の範囲違反をハーネスが検出したときに、次のメッセージが出力されます(panic に設定されている場合はパニック状態になります)。


ddi_getX() out of range addr %x not in %x
ddi_putX() out of range addr %x not in %x
ddi_rep_getX() out of range addr %x not in %x
ddi_rep_putX() out of range addr %x not in %x

X は 8、16、32、または 64 です。

ハーネスが 1000 を超える割り込みを挿入するように要求された場合には、ドライバが割り込みジャバーを検出しなかった場合に、次のメッセージが出力されます。


undetected interrupt jabber - %s %d