ドメイン上の OpenBoot PROM (OBP) は、ハードウェア PROM ではありません。OBPは、SSP 上のファイルから読み込まれます。SSP ファイルは、従来の OBP NVRAM と idprom (hostid) の役割も果たします。
OBP ファイルは、SunOS リリースに固有のディレクトリパスにあります。SunOS 5.6 は Solaris 2.6 オペレーティング環境、SunOS 5.7 は Solaris 7 オペレーティング環境、SunOS 5.8 は Solaris 8 オペレーティング環境にそれぞれ対応します。SunOS のバージョンは、uname -r で確認することができます。たとえば、SunOS 5.7 では OBP ファイルは以下のディレクトリにあります。
/opt/SUNWssp/release/Ultra-Enterprise-10000/5/7/hostobjs/obp
ここで、パスの /5/7 の部分は SunOS のバージョン番号に対応します。別のバージョンのオペレーティングシステムを使用している場合は、パスのこの部分が変わります。
OBP の主要な役割は、外部記憶装置またはネットワークからオペレーティングシステムを起動・構成することです。また、OBP にはハードウェアとソフトウェアを対話式にテストする拡張機能も備わっています。起動手順の一部として、OBP は すべてのシステムボード上の SBus スロットを調べ、デバイスツリーを作成します。このデバイスツリーは、オペレーティングシステムに渡されます。このデバイスツリーを表示するには、prtconf コマンドを使用します (詳細は、SunOS マニュアルページの prtconf(1M) を参照してください)。
さらに OBP は SBus カードの FCode を解釈し実行します。これによりロード可能で簡単なドライバがインストールされ、起動が可能になります。また、OBP はカーネルデバッガも提供します。このデバッガは常に読み込まれています。
以下の節では、obp_helper デーモンと download_helper ファイルによる OBP の制御について説明します。
obp_helper(1M) は、起動プロセッサ以外のプロセッサを起動します。このデーモンは、ブートバス SRAM(BBSRAM) を介して OBP と通信し、要求に応答して時刻を通知します。また、擬似 EEPROM の内容を取得または提供し、マルチプロセッサモードの場合にスレーブプロセッサを解放します。スレーブプロセッサを解放するには、obp_helper(1M) が download_helper をすべてのスレーブプロセッサの BBSRAM に読み込み、スレーブプロセッサであるという指示を BBSRAM に通知します。次に、ブートバスコントローラリセットを解放してプロセッサを起動します。
bringup(1M) コマンドは、obp_helper(1M) をバックグラウンドで起動します。これにより、以前の obp_helper(1M) (存在する場合) が削除されます。obp_helper(1M) は download_helper を実行し、その後に OBP をダウンロードして実行します。
詳細については、マニュアルページの obp_helper(1M) と bringup(1M)、および「download_helper ファイル」を参照してください。
download_helper によって、BBSRAM にではなく、ドメインが使用するメモリーにプログラムをダウンロードすることが可能になります。この結果、メモリー上に再配置する方法を知らなくても、ホストプログラムを実行できるようになります。プログラムは BBSRAM より大きくても問題ありません。
download_helper の機能は、BBSRAM のメールボックスを通じてプロトコルを実行することで実現します。このプロトコルには、物理メモリーから仮想メモリーへの割り当てとマッピング、また BBSRAM のバッファーと仮想メモリー間のデータの移動のためのコマンドが用意されています。割り当てとマッピングが完了すると、実行のスレッドは、SSP が提供するエントリポイントにおいて新しいプログラムに渡されます。これ以降、download_helper は BBSRAM に常駐し、リセット処理を実行します。通常、download_helper は使用しません。download_helper を使用するのは、obp_helper(1M) デーモンだけです。詳細については、マニュアルページの obp_helper(1M) を参照してください。