この章では、不揮発性 RAM (NVRAM) のシステム変数にアクセスし、変更する方法について説明します。
システム変数はシステム NVRAM に格納されます。それらの変数は、起動時のマシン構成と関連する通信特性を設定します。システム変数のデフォルト値は変更することができ、行った変更は電源再投入後も有効です。システム変数はつねに注意深く調整する必要があります。これらの変数を正しく使用すれば、システムのハードウェアを柔軟に取り扱えます。
この章で説明する手順は、画面には ok プロンプトが表示されるものとしています。Forth モニターに入る方法については 第 1 章「概要」を参照してください。
表 3-1 に現在の NVRAM のシステム変数の一覧を示します。
表 3-1 NVRAM システム変数
変数名 |
設定値 |
説明 |
---|---|---|
true |
true の場合、電源投入またはリセット後に自動的に起動します。 |
|
disk |
起動するデバイス。 |
|
空白文字 |
起動するファイル (空白文字の場合、第 2 ブーターがデフォルトを選択します)。 |
|
vmunix |
起動デバイスとファイルを指定します (1.x のみ)。 |
|
le()vmunix |
診断起動デバイスとファイル (1.x のみ)。 |
|
net |
診断起動ソースデバイス。 |
|
empty string |
空白文字 |
|
false |
true の場合、診断プログラムを実行します。 |
|
false |
true の場合、差し込み式デバイス FCode の名前フィールドを取り入れます。 |
|
デフォルトなし |
システムバージョン情報。 |
|
keyboard |
電源投入時の入力デバイス (通常 keyboard、ttya、または ttyb)。 |
|
false |
true の場合、キーボードクリックを使用可能にします。 |
|
デフォルトなし |
カスタムキーボードのキーマップ。 |
|
デフォルトなし |
システム更新情報。 |
|
false |
true の場合、ネットワークドライバはシステムのアドレスではなく、自身の MAC アドレスを使用します。 |
|
false |
true の場合、 Stop-A で中断されるまでシステムの自己診断テストを繰り返します。 |
|
nvramrc |
空白文字 |
NVRAMRC の内容。 |
空白文字 |
カスタム OEM バナー ( oem-banner? が trueで使用可能になります)。 |
|
false |
true の場合、カスタム OEM バナーを使用します。 |
|
デフォルトなし |
バイト配列カスタム OEM ロゴ (oem-logo? が true で使用可能になります)。 16 進で表示 |
|
false |
true の場合、カスタム OEM ロゴを使用します (true でない場合は、サン ロゴを使用します)。 |
|
screen |
電源投入時の出力デバイス (通常 screen、ttya、ttyb)。 |
|
0123 |
プローブされる SBus スロット、それらのスロットがプローブされる順番。 |
|
80 |
画面上のカラム数 (文字数 / 行)。 |
|
34 |
画面上の行数。 |
|
7 |
ホストアダプタの SCSI バスアドレス。範囲は 0 - 7。 |
|
31204567 |
|
|
security-#badlogins |
デフォルトなし |
誤ったセキュリティーパスワードの試行回数。 |
none |
ファームウェアセキュリティーレベル (none、command、またはfull)。 |
|
デフォルトなし |
ファームウェアセキュリティーパスワード (表示されません)。これを直接設定してはなりません。 |
|
1 |
テストするメモリーの M バイト数。 diag-switch? が true の場合は無視されます。 |
|
false |
rue の場合、POST は VMEbus のループバックテストを行いません。 |
|
45670123 |
SCSI テープユニットを割り当てます(1.x のみ)。 |
|
false |
true の場合、制限付きモニタープロンプト (>) を表示します。 |
|
0 |
1 バイトのスクラッチフィールド。読み取り/書き込みテストに使用されます。 |
|
true |
組み込みより対線 Ethernet 向け 10baseT リンクテストを有効にします。 |
|
9600,8,n,1,- |
ttya (ボーレート、データビット数、パリティー、ストッブビット数、ハンドシェーク)。 |
|
9600,8,n,1,- |
ttyb (ボーレート、データビット数、パリティー、ストッブビット数、ハンドシェーク)。 |
|
true |
true の場合、オペレーティングシステムは ttya のキャリヤ検出を無視します。 |
|
true |
true の場合、オペレーティングシステムは ttyb のキャリヤ検出を無視します。 |
|
false |
true の場合、オペレーティングシステムは ttya の DTR、RTS をアクティブにしません。 |
|
false |
true の場合、オペレーティングシステムは ttyb の DTR、RTS をアクティブにしません。 |
|
false |
true の場合、システム起動時に NVRAMRC のコマンドを実行します。 |
|
true |
true の場合、ハイブリッド (1.x/2.x) PROM がバージョン 2.xで起動します。 |
|
false |
true の場合、ウォッチドッグリセット後に再起動します。 |
OpenBoot システムによっては一部の変数をサポートしていません。デフォルトは、システムのタイプや PROM のバージョンによって変わることがあります。
NVRAM のシステム変数は、表 3-2に示すコマンドを使用して表示、変更できます。
表 3-2 システム変数の表示と変更
コマンド |
説明 |
---|---|
printenv |
(数値は通常 10 進で示されます。) printenv parameter は指定する変数の現在値を表示します。 |
setenv parameter value |
parameter (変数)を 10 進またはテキスト値 value に設定します。 (変更は永続的ですが、通常はリセット後に初めて有効になります。) |
set-default parameter | |
set-defaults |
変数設定を工場出荷時のデフォルトに戻します。 |
以降のページでこれらのコマンドをどのように使用できるかを示します。
システムの現在の変数設定のリストを表示するには、次のように入力します。
現在の設定の書式付きリストでは、数値変数は特に注記がない限り 10 進数で示されます。
変数設定を変更するには、次のように入力します。
setenv parameter value |
parameter は変数の名前であり、value は変数に該当する数値またはテキスト文字列です。数値のデータ型は 0x を前に付けなければ 10 進になります。0xは 16 進数の修飾子です。(大部分の変数変更は、次の電源再投入またはシステムリセットによって有効になります。)
たとえば、auto-boot? 変数の設定を true から false に変更するには、次のように入力します。
ok setenv auto-boot? false ok |
set-default 変数と set-defaults コマンドを使用して、NVRAM のシステム変数の特定の 1 つまたは大部分をもとのデフォルト設定に戻すことができます。
たとえば、auto-boot? 変数をそのもとのデフォルト設定 (true) に戻すには、次のようの入力します。
ok set-default auto-boot? ok |
大部分の変数をそれぞれのもとのデフォルト設定に戻すには、次のように入力します。
ok set-defaults ok |
NVRAM のシステムセキュリティー用として次に示す変数があります。
security-mode は、許可のないユーザーが Forth モニターから実行できる一連の処理を制限できます。3 つのセキュリティーモードを、セキュリティーの低い順序で示すと次のとおりです。
command モードおよび fullモードを使用するには、制限付きモニターを使用します。セキュリティーを command モードまたは fullモードに設定すると、OpenBootファームウェアは制限付きモニターとして起動します。none セキュリティーモードでは、どちらがデフォルトかによって、OpenBoot ファームウェアは Forth モニターか、制限付きモニターとして起動します。
none セキュリティーモードでは、どのコマンドも制限付きモードで入力でき、パスワードは必要ありません。command および full セキュリティーモードでは、特定のコマンドを実行するのにパスワードが必要です。たとえば、Forth モードにするにはパスワードが必要です。Forth モニターに入った後は、パスワードは必要なくなります。
security-mode はオペレーティングシステムの eeprom ユーティリティーで変更できます。
security-mode に設定しているときは、システムは制限付きモニターとして起動します。このモニターモードでは、パスワードの必要性は次のとおりです。
次に画面で例を示します。
> b (パスワード必要なし) > c (パスワード必要なし) > b filename (パスワード必要) PROM Password: (入力時パスワードは画面表示されない) > n (パスワード必要) PROM Password: (入力時パスワードは画面表示されない) |
セキュリティーパスワードと command セキュリティーモードを設定するには、ok プロンプトで次のように入力します。
ok password ok New password (only first 8 chars are used): ok Retype new password: ok setenv security-mode command ok |
この例でも機能しますが、通常はオペレーティングシステムからの eeprom コマンドで 2 つの security 変数を設定します。
設定するセキュリティーパスワードは root パスワードと同じ規則に従います。つまり、6 〜 8 の英字および数字の組み合わせです。セキュリティーパスワードは root パスワードと同じでも、異なっても差し支えありません。システムをリセットする必要はありません。セキュリティー機能はコマンドを入力した直後に有効になります。
セキュリティーパスワードを絶対に忘れないようにしてください。このパスワードを忘れると、システムが使用できなくなります。販売代理店に連絡してマシンを再び起動可能にする必要があります。
誤ったセキュリティーパスワードを入力した場合は、約 10 秒の遅延があってから次の起動プロンプトが現れます。誤ったセキュリティーパスワードを入力した回数は security-#badlogins 変数に格納されます。この変数は 32 ビットの符号付きの数値です。
full セキュリティーモードは最も制限の多いモードです。security-modeを full に設定した場合は、システムは制限付きモニターとして起動します。このモードでは、パスワードの必要性は次のとおりです。
b コマンドの入力時にはパスワードが必要です。
c コマンドはパスワードを要求しません。
次に例を示します。
> c (パスワード必要なし) > b (パスワード必要) PROM Password: (入力時パスワードは画面表示されない) > b filename (パスワード必要) PROM Password: (入力時パスワードは画面表示されない) > n (パスワード必要) PROM 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 SPARCstation 2, Type 4 Keyboard ROM Rev. 2.0, 16MB memory installed, Serial # 289 Ethernet address 8:0:20:d:e2:7b, Host ID: 55000121 ok |
PROM がシステムバナーを表示します。これは SPARCstation 2 のバナーの例です。SPARC システムによりバナーはこれとは異なることがあります。
バナーは、テキストフィールドとロゴの 2 つの部分からなっています (シリアルポートを介す場合は、テキストフィールドしか表示されません)。oem-banner と oem-banner? システム変数を使用して、既存のテキストフィールドを、カスタマイズしたテキストメッセージに置き換えることができます。
電源投入時バナーにカスタマイズしたテキストフィールドを挿入するには、次のように入力します。
ok setenv oem-banner Hello Mom and Dad ok setenv oem-banner? true ok banner Hello Mom and Dad ok |
システムは、この画面に示すように、新しいメッセージ付きのバナーを表示します。
図形ロゴは多少異なる方法で取り扱わなければなりません。oem-logoは、64 x 64 に配列された合計 4096 ビットからなる 512 バイトの配列です。各ビットはそれぞれ 1 ピクセルに相当します。最初のバイトの最上位ビット (MSB) が左上コーナのピクセルを制御します。次のビットはその右のピクセルを制御し、以下同様に各ビットは順次にピクセルに対応します。
新しいロゴを作成するには、まず、正しいデータを収容した Forth 配列を作成し、次にこの配列を oem-logo にコピーします。次の例では、Forth のコマンドを使用して配列を作成しています。(ロゴは、オペレーティングシステムのもとでも eeprom コマンドを使用して作成できます。) 作成した配列を次に to コマンドを使用してコピーしています。次の例では、oem-logo の上側の半分に昇順パターンを書き込んでいます。
ok create logoarray d# 512 allot ok logoarray d# 256 0 do i over i + c! loop drop ok logoarray d# 256 to oem-logo 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 に設定され、したがってカスタマイズしたロゴはそれ以降表示されなくなります。
システム入出力の制御関係の構成用として次に示す変数があります。
これらの変数を使用して入出力用の電源投入時デフォルトを割り当て、ttya と ttyb のシリアルポートの通信特性を調整できます。ttya-mode と ttyb-mode の結果を除いて、これらの値は次の電源再投入またはシステムリセットまで有効になりません。
input-device および output-device 変数は、電源投入リセット後の入出力デバイスの選択を制御します。input-deviceのデフォルト値は keyboard であり、output-device のデフォルト値は screen です。入出力は 表 3-3 の値に設定できます。
表 3-3 入出力デバイス変数
オプション |
説明 |
---|---|
device-specifier |
そのデバイスのパス名または別名によって識別されるデバイス。 |
(入力専用) デフォルトシステムキーボード。 |
|
screen |
(出力専用) デフォルトグラフィックスディスプレイ。 |
シリアルポート A |
|
シリアルポート B |
システムをリセットすると、指定したデバイスがデフォルトの入力または出力デバイスになります。(入力または出力デバイスを一時的に変更する場合は、第 4 章「Forth ツールの使用方法」で説明する input または output コマンドを使用します。)
ttyaを電源投入時デフォルト入力デバイスとして設定するには、次のように入力します。
ok setenv input-device ttya ok |
input-device として keyboard を選択したが、このデバイスが接続されていない場合は、次の電源再投入またはシステムリセット後は、入力は ttya から受け入れられます。output-device として screen を選択したが、フレームバッファーが存在しない場合は、次の電源再投入またはシステムリセット後は、出力はttya に送られます。
デフォルト出力デバイスとして bwtwo フレームバッファーを指定するには (特にシステムに複数のフレームバッファーが存在する場合)、次のように入力します。
ok setenv output-device /sbus/bwtwo ok |
大部分のサンシステムで、ttya と ttyb の両方に対して次にデフォルト設定が使用されます。
9600 ボー、8 データビット、パリティーなし、1 ストップビット、ハンドシェークなし
2 つのシリアルポート ttya および ttyb の通信特性は、ttya-mode および ttyb-mode の各変数に次に値を設定します。
baud = 110、300、1200、2400、4800、9600、19200、または 38400 ビット /秒
#bits = 5、6、7、または 8 (データビット)
parity = n(なし)、e (偶数)、または o (奇数)、パリティービット
#stop = 1 (1)、. (1.5)、または 2 (2) ストップビット
handshake = - (なし)、h (ハードウェア(rts/cts))、または s (ソフトウェア (xon/xoff)).
たとえば、ttya を 1200 ボー、7 データビット、偶数パリティー、1 ストップビット、ハンドシェークなしに設定するには、次のように入力します。
ok setenv ttya-mode 1200,7,e,1,- ok |
これらの変数値の変更はただちに有効になります。
システムによっては、rts/cts および xon/xoff ハンドシェークは実装されていません。選択したプロトコルが実装されていないときは、handshake 変数は受け入れられますが、無視されます。メッセージは何も表示されません。
次にシステム変数を使用して、電源再投入またはシステムリセット後にシステムを自動的に起動させるかどうかを設定できます。
auto-boot? が true の場合は、システムは ( boot-device と boot-file の値を使用して) 自動的に起動します。
手動起動時にも、これらの変数を使用して起動デバイスと起動するプログラムを選択することができます。たとえば、Ethernet からの自動起動を指定するには、次のように入力します。
ok setenv boot-device net ok boot |
指定した起動は通常、すぐに開始されます。
boot-device と boot-file の指定方法は、diag-switch? を true に設定しているときには異なります。詳細は、次の節を参照してください。
電源投入時テスト用として次に示す変数があります。
大部分のシステムでは、diag-switch? 変数の工場出荷時のデフォルトは falseです。diag-switch? を true に設定するには、次のように入力します。
ok setenv diag-switch? true ok |
diag-switch? を有効にすると、システムはそれ以降の電源投入時に常により厳密な自己診断テストを実行します。diag-switch? を有効にすると、追加ステータスメッセージが (一部は ttya に、一部は指定した出力デバイスに) 送出され、全メモリーがテストされ、さまざまなデフォルト起動オプションが使用されます。起動 PROM は diag-file 変数によって指定されたプログラムを diag-device によって指定されるデバイスから起動しようとします。
一部の SPARC システムはハードウェアの診断スイッチを備えています。そのハードウェアスイッチまたは diag-switch? が設定されている場合は、システムは電源投入時にフルテストを実行します。
電源投入時に Stop-D キー処理を使用しても、diag-switch? を true に強制設定できます。
diag-switch? を false に設定するには、次のように入力します。
ok setenv diag-switch? false ok |
diag-switch? が false のときは、診断テストは実行されるので、(テストでエラーが発生しなければ) システムは診断テストを呼び出さず、診断の一部を実行します。
NVRAM の一部に nvramrc と呼ばれる部分があります。そのサイズはそれぞれの SPARC システムによって異なります。これは、起動時に実行されるユーザー定義のコマンドの格納用として予約されています。
一般的に、NVRAMRC は起動時システム変数を保存したり、デバイスドライバコードをパッチしたり、インストール先固有のデバイス構成とデバイスの別名を定義するためにデバイスドライバが使用します。また、バグパッチまたはユーザーインストールの拡張用にも使用できます。コマンドは、ユーザーがコンソールから入力するとおりの ASCII で格納されます。
NVRAMRC 関係のシステム変数には次の 2 つがあります。
NVRAMRC 内のコマンドは、use-nvramrc? を true に設定している場合に、システム起動時に実行されます。次の例外を除く、ほとんどすべての Forth モニターコマンドがここで使用できます。
NVRAMRC のエディタである nvedit では、表 3-4に示すコマンドを使用して、NVRAMRC の内容を作成、変更することができます。
表 3-4 NVRAMRC エディタコマンド
コマンド |
説明 |
---|---|
NVRAMRC にコマンド devalias alias device-path を格納します。この別名は、 nvunalias または set-defaults コマンドが実行されるまで有効です。 |
|
NVRAMRC エディタを起動します。前の nvedit セッションからのデータが一時バッファー内に残っている場合は、以前の内容の編集を再開します。残っていない場合は、 NVRAMRC の内容を一時バッファーに読み込んで、それらの編集を開始します。 |
|
一時バッファーの内容を、 NVRAMRC に書かないで捨てます。捨てる前に、確認を求めます。 |
|
NVRAMRC の内容が set-defaultsの実行結果として失われている場合、それらの内容を回復し、次に nvedit の場合と同様にこのエディタを起動します。NVRAMRC の内容が失われたときからnvrecover が実行されるまでの間に nvedit を実行した場合は、 nvrecover は失敗します。 |
|
一時バッファーの内容を実行します。 |
|
一時バッファーの内容を NVRAMRC にコピーします。一時バッファーの内容は捨てます。 |
|
対応する別名をNVRAMRCから削除します。 |
一部の OpenBoot 2.x には nvalias および nvunalias コマンドがありません。
表 3-5 に NVRAM で使用できる編集コマンドを示します。
表 3-5 nveditキー操作コマンド
キー操作 |
説明 |
---|---|
Control-B |
1 文字位置戻ります。 |
Control-C |
エディタを終了し、OpenBook コマンドインタプリタに戻ります。一時バッファーは保存されていますが、 NVRAMRC には戻されません。 (後で nvstore を使用して一時バッファーを NVRAMRC に書いて戻してください。) |
Control-F |
1 文字位置戻ります。 |
Control-K |
行の終わりでは、現在行に次の行をつなぎます (つまり、2 つの行を 1 つにします)。 |
Control-L |
すべての行を表示します。 |
Control-N |
NVRAMRC 編集バッファの次の行に進みます。 |
Control-O |
カーソル位置に new line を挿入し、現在行にとどまっています。 |
Control-P |
NVRAMRC 編集バッファーの前の行に戻ります。 |
Delete |
前の 1 文字を削除します。 |
Return |
カーソル位置に改行を挿入し、次の行に進みます。 |
そのほかの標準的エディタ用コマンドについては、第 4 章「Forth ツールの使用方法」を参照してください。
次の手順で、NVRAMRC コマンドファイルを起動してください。
ok プロンプトで、nveditと入力します。
エディタのコマンドを使用して NVRAMRC の内容を編集します。
Control-C を入力してエディタを終了し、再び ok プロンプトを表示させます。
nvstore と入力して変更結果を保存します。
setenv use-nvramrc? true と入力して、NVRAMRC を有効にします。
reset と入力してシステムをリセットしてから NVRAM の内容を実行するか、nvramrc eval と入力して nvramrc の内容を直接実行します。まだ nvstore と入力して変更結果を保存してなかった場合は、nvrun と入力して一時編集バッファーの内容を実行してください。
次の例で、NVRAMRC内に単純なコロン定義を作成する方法を示します。
ok nvedit 0: : hello ( -- ) 1: ." Hello, world. " cr 2: ; 3: ^-C ok nvstore ok setenv use-nvramrc? true ok reset .... ok hello Hello, world. ok |
上記の例で、nveditの行番号のプロンプト (0:、1:、2:、3:) に注意してください。これらのプロンプトはシステムによって異なることがあります。