OpenBoot 3.x コマンド・リファレンスマニュアル

第 3 章 システム変数の設定

この章では、不揮発性 RAM (NVRAM) のシステム変数にアクセスし、変更する方法について説明します。

システム変数はシステム NVRAM に格納されます。それらの変数は、起動時のマシン構成と関連する通信特性を設定します。システム変数のデフォルト値は変更することができ、行った変更は電源再投入後も有効です。システム変数は常に注意深く調整する必要があります。

この章で説明する手順は、ユーザーインタフェースに入っているものとしています。ユーザーインタフェースに入る方法については、第 1 章「概要」を参照してください。

表 3-1 に、IEEE Standard 1275-1994 の定義に従う標準的セットの NVRAM システム変数の一覧を示します。

表 3-1 標準システム変数

変数名  

設定値 

説明 

auto-boot?

true 

true の場合、電源投入後またはリセット後に自動的に起動します。 

boot-command

boot 

auto-boot? が true の場合に実行されるコマンド。

boot-device

disk net 

起動するデバイス。 

boot-file

空白文字 

起動するプログラムに渡される引数。 

diag-device

net 

診断起動ソースデバイス。 

diag-file

空白文字 

診断モードで起動するプログラムに渡される引数。 

diag-switch?

false 

true の場合、診断モードで実行します。 

fcode-debug?

false 

true の場合、差し込み式デバイス FCode の名前フィールドを取り入れます。 

input-device

keyboard 

コンソール入力デバイス (通常 keyboardttyattyb)

nvramrc

空白文字 

NVRAMRCの内容。 

oem-banner

空白文字 

カスタム OEM バナー (oem-banner? が true で使用可能になります)。

oem-banner?

false 

true の場合、カスタム OEM バナーを使用します。 

oem-logo

デフォルトなし 

バイト配列カスタム OEM ロゴ (oem-logo? が true で使用可能になります)。

16 進で表示。 

oem-logo?

false 

true の場合、カスタム OEM ロゴを使用します (true でない場合は、サンロゴを使用します)。 

output-device

screen 

コンソール出力デバイス (通常 screenttyattyb)。

screen-#columns

80 

画面上のカラム数 (文字数/行)。 

screen-#rows

34 

画面上の行数。 

security-#badlogins

デフォルトなし 

誤ったセキュリティーパスワードの試行回数。 

security-mode

none 

ファームウェアセキュリティーレベル (nonecommandfull)。

security-password

デフォルトなし 

ファームウェアセキュリティーパスワード (表示されません)。 

use-nvramrc?

false 

ファームウェアセキュリティーパスワード (表示されません)。 

上記以外に、IEEE Standard 1275-1994 の SBus 版でシステム変数が定義されています。それらの変数を表 3-2 に示します。

表 3-2 SBus システム変数

変数名  

設定値 

説明 

sbus-probe-list

0123 

プローブされる SBus スロットとそれらがプローブされる順番。 


注 -

OpenBoot の実装が異なると、使用するデフォルトやシステム変数も異なる場合があります。


変数設定の表示と変更

NVRAM システム変数は、表 3-3 に示すコマンドを使用して表示、変更できます。

表 3-3 システム変数の表示と変更

コマンド  

説明 

printenv

すべての現在の変数とデフォルト値を表示します。  

printenv variable は指定する変数の現在値を表示します。

setenv variable value

variable を 10 進またはテキスト値 value に設定します。

(変更は永続的ですが、通常はリセット後に初めて有効になります。) 

set-default variable

指定する変数 (variable) の値を工場出荷時のデフォルトに設定します。

set-defaults

変数設定を工場出荷時のデフォルトに戻します。 

password

security-password を設定します。 

以降でこれらのコマンドをどのように使用できるかを示します。


注 -

Sun OS は OpenBoot システム変数を変更するための eeprom (1M) ユーティリティーを備えています。


変数の現在の設定の表示システムの現在の変数設定のリストを表示するには、次のように入力します。


ok printenv 

Variable Name   Value   Default Value
oem-logo 2c 31 2c 2d 00 00 00 00 ...
oem-logo?       false   false
oem-banner
oem-banner?     false   false
output-device   ttya    screen
input-device    ttya    keyboard
sbus-probe-list 03      0123
diag-file
diag-device     net     net
boot-file
boot-device     disk    disk net
auto-boot?      false   true
fcode-debug?    true    false
use-nvramrc?    false   false
nvramrc
screen-#columns 80      80
screen-#rows    34      34
security-mode   none    none
security-password
security-#badlogins     0
diag-switch?    true    false
ok

現在の設定の書式付きリストでは、数値変数は 10 進数で示されます。

変数設定を変更するには、次のように入力します。


ok setenv variable-name value

variable-name は変数の名前であり、value は変数に該当する数値またはテキスト文字列です。数値のデータ型は、0x を前に付けなければ 10 進になります。0x は 16 進数の修飾子です。

たとえば、auto-boot? 変数の設定を false に変更するには、次のように入力します。


ok setenv auto-boot? false
ok 


注 -

多くの場合、変数の値を変更しても、そのままでは OpenBoot ファームウェアの動作には無効です。次の電源再投入またはシステムリセットで初めて、ファームウェアはそれらの変数の新しい値を使用します。


set-default 変数set-defaults コマンドを使用して、変数の特定の 1 つまたは大部分をもとのデフォルト設定に戻すことができます。

たとえば、auto-boot? 変数をそのもとのデフォルト設定 (true) に戻すには、次のように入力します。


ok set-default auto-boot?
ok

大部分の変数をそれぞれのもとのデフォルト設定に戻すには、次のように入力します


ok set-defaults
ok

SPARC システムでは、マシンのパワーアップ処理の間「Stop-N」 を押し下げておくことにより、NVRAM 変数をそれぞれのデフォルト設定に戻すことができます。このコマンドを発行するときは、SPARC システムに電源を投入した直後に「Stop-N」を押し、数秒間またはバナーが表示されるまで (ディスプレイが使用できる場合)、押さえたままにしておきます。これにより、SPARC と互換性のあるマシンの NVRAM の内容をデフォルト設定に戻すことができます。

セキュリティー変数の設定

NVRAM のシステムセキュリティー用として次に示す変数があります。

security-mode は、ユーザーがユーザーインタフェースから実行できる一連の処理を制限できます。3 つのセキュリティーモードを、セキュリティーの高い順序で示すと次のとおりです。

表 3-4 security-mode 設定用コマンド

モード 

コマンド 

full

go 以外のコマンドはすべてパスワードを必要とします。

command

boot および go 以外のコマンドはすべてパスワードを必要とします。

none

パスワードを必要としません (デフォルト)。 

コマンドセキュリティー

security-mode を設定しているときは、

次に画面で例を示します。


ok boot     (パスワード必要なし)
ok go       (パスワード必要なし)
ok boot filename  (パスワード必要)
Password:   (入力時パスワードは画面表示されない)
ok reset-all   (パスワード必要)
Password:   (入力時パスワードは画面表示されない) 


注意 - 注意 -

セキュリティーパスワードを絶対に忘れないようにしてください。また、セキュリティーモードを設定するにセキュリティーパスワードを設定してください。このパスワードを忘れると、システムが使用できなくなります。購入先に連絡してマシンを再び起動可能にする必要があります。


セキュリティーパスワードと command セキュリティーモードを設定するには、ok プロンプトで次のように入力します。


ok password 
ok New password (only first 8 chars are used):
ok Retype new password:
ok setenv security-mode command 
ok

設定するセキュリティーパスワードは 0 〜 8 つの文字でなければなりません。8 文字目より後の文字は無視されます。システムをリセットする必要はありません。セキュリティー機能はコマンドを入力した直後に有効になります。

誤ったセキュリティーパスワードを入力した場合は、約 10 秒の遅延があってから次の起動プロンプトが現れます。誤ったセキュリティーパスワードを入力した回数は security-#badlogins 変数に格納されます。

フルセキュリティー

full セキュリティーモードは最も制限の多いモードです。security-modefull に設定した場合は、

次に例を示します。


ok go       (パスワード必要なし)
ok boot     (パスワード必要)
Password:   (入力時パスワードは画面表示されない)
ok boot filename   (パスワード必要)
Password:   (入力時パスワードは画面表示されない)
ok reset-all     (パスワード必要)
Password:   (入力時パスワードは画面表示されない)


注意 - 注意 -

セキュリティーパスワードを絶対に忘れないようにしてください。また、セキュリティーモードを設定するにセキュリティーパスワードを設定してください。このパスワードを忘れると、システムが使用できなくなります。購入先に連絡してマシンを再び起動可能にする必要があります。


セキュリティーパスワードと full セキュリティーを設定するには、ok プロンプトで次のように入力します。


ok password 
ok New password (only first 8 chars are used):
ok Retype new password:
ok setenv security-mode full 
ok

電源投入時バナーの変更

バナー構成用として次の変数があります。

電源投入時バナーを表示するには、次のように入力します。


ok banner 
Sun Ultra 1 SBus (UltraSPARC 167 MHz),Keyboard PresentPROM
Rev. 3.0, 64MB memory installed, Serial # 289Ethernet
address 8:0:20:d:e2:7b, Host ID: 80000121
ok

システムによりバナーはこれとは異なることがあります。

バナーは、テキストフィールドとロゴの 2 つの部分からなっています (シリアルポートを介す場合は、テキストフィールドしか表示されません)。oem-banneroem-banner? システム変数を使用して、既存のテキストフィールドを、カスタマイズしたテキストメッセージに置き換えることができます。

作成カスタマイズしたバナー電源投入時バナーにカスタマイズしたテキストフィールドを挿入するには、次のように入力します。


ok setenv oem-banner Hello Mom and Dad
ok setenv oem-banner? true
ok banner
 Hello Mom and Dad
ok

システムは、前の画面に示すように、新しいメッセージ付きのバナーを表示します。

図形ロゴは多少異なる方法で取り扱わなければなりません。oem-logo は、64×64 に配列された合計 4096 ビットからなる 512 バイトの配列です。各ビットはそれぞれ 1 ピクセルに相当します。最初のバイトの最上位ビット (MSB) が左上コーナのピクセルを制御します。次のビットはその右のピクセルを制御し、以下同様に各ビットは順次にピクセルに対応します。

新しいロゴを作成するには、まず、正しいデータを収容した Forth 配列を作成し、次にこの配列を oem-logo にコピーします。次にこの配列を $setenvoem-logo にインストールします。次の例では、oem-logo の上側の半分に昇順パターンを書き込んでいます。


ok create logoarray d# 512 allot
ok logoarray d# 256 0 do i over i + c! loop drop
ok logoarray d# 256 " oem-logo" $setenv
ok setenv oem-logo? true
ok banner 

初期設定のサンの電源投入時バナーを復元するには、oem-logo? および oem-banner? 変数を false に設定します。


ok setenv oem-logo? false
ok setenv oem-banner? false
ok

oem-logo 配列は非常に大きいので、printenv は最初のほぼ 8 バイト (16 進) しか表示しません。配列全体を表示するには、oem-logo dump コマンドを使用します。 oem-logo 配列は、データの復元が難しいことがあるので、set-defaultsによって消去されません。しかし、set-defaults を実行すると、oem-logo? が false に設定され、したがってカスタマイズしたロゴはそれ以降表示されなくなります。


注 -

一部のシステムは oem-logo 機能をサポートしません。


入出力の制御

コンソールは、OpenBoot とユーザーとの間の第一の対話手段として使用されます。コンソールは、ユーザーから与えられる情報を受け取るために使用される入力デバイスと、ユーザーに情報を送るために使用される出力デバイスからなっています。一般的に、コンソールはテキスト・グラフィックス両用ディスプレイデバイスとキーボードの組み合わせか、シリアルポートに接続された ASCII 端末です。

システム入出力の制御関係の構成用として次に示すシステム変数があります。

これらの変数を使用してコンソール用の電源投入時デフォルトを割り当てます。これらの値は次の電源再投入またはシステムリセットまで有効になりません。

入出力デバイスオプションの選択

input-device および output-device 変数は、電源投入リセット後のファームウェア入出力デバイスの選択を制御します。input-device のデフォルト値は keyboard であり、output-device のデフォルト値は screen です。input-deviceoutput-device の値はデバイス指定子でなければなりません。多くの場合、別名 keyboardscreen がこれらの変数の値として使用されます。

システムをリセットすると、指定したデバイスが初めのフォームウェアのコンソールの入力または出力デバイスになります。(入力または出力デバイスを一時的に変更する場合は、第 4 章「Forth ツールの使用方法」で説明する input または output コマンドを使用します。)

設定デフォルト入出力デバイス ttya を電源投入時初期コンソール入力デバイスとして設定するには、次のように入力します。


ok setenv input-device ttya
ok

input-device として keyboard を選択したが、このデバイスが接続されていない場合は、次の電源再投入またはシステムリセット後は、入力は予備のデバイス (通常 ttya) から受け入れられます。output-device として screen を選択したが、フレームバッファーが存在しない場合は、次の電源再投入またはシステムリセット後は、出力は予備のデバイスに送られます。

デフォルト出力デバイスとして SBus フレームバッファーを指定するには (特にシステムに複数のフレームバッファーが存在する場合)、次のように入力します。


ok setenv output-device /sbus/SUNW,leo 
ok 

シリアルポート特性の設定

設定シリアルポート特性シリアルポートの代表的な通信特性の範囲は次のとおりです。


注 -

システムによっては、rts/cts および xon/xoff ハンドシェークは実装されていません。選択したプロトコルが実装されていないときは、ハンドシェーク変数は受け入れられますが、無視されます。メッセージは何も表示されません。


起動オプションの選択

次にシステム変数を使用して、電源再投入またはシステムリセット後にシステムを自動的に起動させるかどうかを設定できます。

auto-boot?true で OpenBoot が診断モードではない場合は、システムは電源再投入またはシステムのリセット後 (boot-deviceboot-file の値を使用して) 自動的に起動します。

手動起動時にも、これらの変数を使用して起動デバイスと起動するプログラムを選択することができます。たとえば、Ethernet からの自動起動を指定するには、次のように入力します。


ok setenv boot-device net 
ok 

boot-file boot-device に対する変更は、次に起動 (boot) が実行されたときに有効になります。

電源投入時自己診断テストの制御 (POST)

電源投入時自己診断テスト用として次に示す変数があります。

diag-switch?true に設定すると、diagnostic-mode?true を返します。diagnostic-mode?true を返すと、システムは次のように動作します。

大部分のシステムでは、diag-switch? 変数の工場出荷時のデフォルトは false です。diag-switch?true に設定するには、次のように入力します。


ok setenv diag-switch? true 
ok


注 -

一部のシステムは diagnostic-mode?true を返すハードウェアの診断スイッチを備えています。そのハードウェアスイッチが設定されているか、または diag-switch?true に設定されている場合は、システムは電源投入時にフルテストを実行します。



注 -

一部の実装では、電源投入時に実装によって決まるキー入力処理を使用して diag-switch?true に強制設定できる場合があります。詳細は、システムのマニュアルまたは本書の付録 C 「障害追跡ガイド」を参照してください。


diag-switch?false に設定するには、次のように入力します。


ok setenv diag-switch? false 
ok

診断モードではない場合は、(テストでエラーが発生しなければ) システムは診断テスト実行中は報告せず、診断の一部を実行します。

nvramrc の使用方法

nvramrc システム変数はスクリプトと呼ばれる内容を持ち、起動時に実行されるユーザー定義コマンドを格納します。

一般的に、nvramrc は起動時のシステム変数を保存したり、デバイスドライバコードをパッチしたり、インストール先固有のデバイス構成とデバイスの別名を定義するためにデバイスドライバが使用します。また、バグパッチまたはユーザーインストールの拡張用にも使用できます。コマンドは、ユーザーがコンソールから入力するように ASCII で格納されます。

use-nvramrc? システム変数が true の場合は、そのスクリプトが OpenBoot の起動処理で次のように評価されます。

場合によっては、probe-all install-console banner の処理を変更することが必要な場合があります。たとえば、差し込み式ディスプレイデバイスのプローブが終わってからコンソールデバイスの選択が終わるまでに、差し込み式デバイスの特性を変更するコマンドを実行する必要があることがあります。そのようなコマンドは、probe-allinstall-console の間で実行する必要があります。出力をコンソールに表示するコマンドを install-console または banner の後に入れる必要があります。

これは、bannersuppress-banner を内容とするカスタムスクリプトを作成することにより実現できます。それは、そのスクリプトから bannersuppress-banner が実行されれば、probe-allinstall-console および banner 処理が実行されないためです。つまり、そのスクリプト内部で probe-allinstall-consolebanner を場合により他のコマンドと混用する形で使用することができ、スクリプト終了後にそれらのコマンドを再び実行させないようにできます。

次の例外を除く、ほとんどすべてのユーザーインタフェースコマンドがスクリプトで使用できます。

スクリプトの内容の編集

スクリプトエディタである nvedit では、表 3-5 に示すコマンドを使用して、スクリプトの内容を作成、変更することができます。

表 3-5 NVRAMAC に影響するコマンド

コマンド 

説明 

nvalias alias device-path

スクリプトにコマンド devalias alias device-path を格納します。この別名は、nvunalias または set-defaults コマンドが実行されるまで有効です。

$nvalias

スタックから引数 name-string device-string を使用する以外は、nvalias と同じ機能です。

nvedit

スクリプトエディタを起動します。前の nvedit セッションからのデータが一時バッファー内に残っている場合は、以前の内容の編集を再開します。残っていない場合は、nvramrc の内容を一時バッファーに読み取って、それらの編集を開始します。

nvquit

一時バッファーの内容を、nvramrc に書き込まないで捨てます。捨てる前に、確認を求めます。

nvrecover

nvramrc の内容が set-defaults の実行結果として失われている場合、それらの内容を回復し、次に nvedit の場合と同様にこのエディタを起動します。nvramrc の内容が失われたときから nvrecover が実行されるまでの間に nvedit を実行した場合は、nvrecover は失敗します。

nvrun

一時バッファーの内容を実行します。 

nvstore

一時バッファーの内容を nvramrc にコピーします。一時バッファーの内容は捨てます。

nvunalias alias

対応する別名を nvramrc から削除します。

$nvunalias

スタックから引数 name-string を使用する以外は、nvunalias と同じ機能です。

表 3-6 にスクリプトエディタで使用できる編集コマンドを示します。

表 3-6 スクリプトエディタキー操作コマンド

キー操作 

説明 

Control-B 

1 文字位置戻ります。 

Escape B 

1 語戻ります。 

Control-F 

1 文字位置進みます 

Escape F 

1 語進みます。 

Control-A 

行の先頭に戻ります。 

Control-E 

行の終わりに進みます。 

Control-N 

スクリプト編集バッファーの次の行に進みます。 

Control-P 

スクリプト編集バッファーの前の行に戻ります。 

Return (Enter) 

カーソル位置に改行を挿入し、次の行に進みます。 

Control-O 

カーソル位置に改行を挿入し、現在の行にとどまっています。 

Control-K 

カーソル位置から行の終わりまで消去し、消去した文字を保存バッファーに格納します。カーソルが行の終わりにある場合は、現在の行に次の行をつなぎます (つまり、改行を削除します)。 

Delete 

前の 1 文字を削除します。 

Backspace 

前の 1 文字を削除します。 

Control-H 

前の 1 文字を削除します。 

Escape H 

語の先頭からカーソルの直前まで消去し、消去した文字を保存バッファーに格納します。 

Control-W 

語の先頭からカーソルの直前まで消去し、消去した文字を保存バッファーに格納します。 

Control-D 

次の 1 文字を消去します。 

Escape D 

カーソルから語の終わりまで消去し、消去した文字を保存バッファーに格納します。 

Control-U 

1 行全体を消去し、消去した文字を保存バッファーに格納します。 

Control-Y 

保存バッファーの内容をカーソルの前に挿入します。 

Control-Q 

次の文字の前に引用符を付けます (つまり、制御文字を挿入できます)。 

Control-R 

1 行を入力し直します。 

Control-L 

編集バッファーの内容全体を表示します。 

Control-C 

エディタを終了し、OpenBoot コマンドインタプリタに戻ります。一時バッファーは保存されていますが、スクリプトには戻されません。(後で nvstore を使用して書いて戻してください。)

スクリプトファイルの起動

次の手順で、スクリプトコマンドファイルを作成し起動してください。

  1. ok プロンプトで、nvedit と入力します。

エディタのコマンドを使用してスクリプトの内容を編集します。

  1. Control-C を入力してエディタを終了し、再び ok プロンプトを表示させます。

変更を保存するために nvstore をまだ入力していない場合、nvrun と入力して一時編集バッファーの内容を実行できます。

  1. nvstore と入力して変更結果を保存します。

  2. 次のように入力して、スクリプトを有効にします。


    setenv use-nvramrc? true
    

  3. reset-all と入力してシステムをリセットしてからスクリプトの内容を実行するか、次のように入力してスクリプトの内容を直接実行します。


    nvramrc evaluate
    

次の例で、nvramrc 内に単純なコロン定義を作成する方法を示します。


ok nvedit 
0: : hello ( -- ) 
1: ." Hello, world. " cr 
2: ; 
3: ^C 
ok nvstore 
ok setenv use-nvramrc? true 
ok reset-all 
...
ok hello 
Hello, world.
ok 

上の例で nvedit の行番号のプロンプト (0:、1:、2:、3:) に注意してください。これらのプロンプトはシステムによって異なることがあります。