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

第 5 章 プログラムの読み込みと実行

ユーザーインタフェースではプログラムをマシンに読み込み、実行するいくつかの方法を提供しています。これらの方法は、それぞれ、Ethernet、ハードディスク、フロッピーディスク、シリアルポート ttya を介してファイルを読み込むためのもので、Forth、FCode、実行可能バイナリプログラムをサポートします。

これらの方法の多くは、Client プログラムヘッダーを持つファイルを必要とします。詳細については、IEEE 1275.1-1994『Standard for Boot (Initializatin Configuration) Firmware』を参照してください。このヘッダーは多くの UNIX システムで使用される a.out ヘッダーに似ています。サンの FCode トークン生成プログラムは、この Client プログラムヘッダーをファイルを生成します。

表 5-1 に、いろいろなソースからファイルを読み込む OpenBoot コマンドを示します。

表 5-1 ファイル読み込み用コマンドと拡張機能

コマンド 

スタックダイアグラム 

説明 

boot [device-specifier] [arguments]

( -- ) 

各種のシステム変数、(省略可能な) 引数の値に従って、使用するファイル、デバイスを決定します。マシンをリセットし、指定されたデバイスから、指定されたプログラムを読み込んで実行します。 

byte-load

( addr xt -- ) 

addr から始まる FCode を解釈します。xt が 1 の場合 (通常の場合) は、rb@ を使用して FCode を読みます。そうでない場合は、実行トークンが xt であるアクセスルーチンを使用します。

dl

( -- ) 

「Control-D」が押されるまで、シリアルラインを通して Forth ソーステキストファイルを読み込み、次に解釈します。たとえば tip を使用する場合は次のように入力します。

‾C cat filename

Control-D

dlbin

( -- ) 

シリアルラインからバイナリファイルを読み込みます。例として、tip を使用する場合は次のように入力します。

‾C cat filename

dload filename

( addr -- ) 

Ethernet を介して指定されたファイルを指定されたアドレスに読み込みます。 

eval

( ... str len -- ???) 

evaluate の同義語。

evaluate

( ... str len -- ???) 

指定された文字列からの Forth ソーステキストを解釈します。 

go

( -- ) 

前に読み込まれていたバイナリプログラムの実行を開始します。または、中断されたプログラムの実行を再開します。 

init-program

( -- ) 

バイナリファイルの実行に備えてマシンを準備します。 

load [device-specifier] [arguments]

( -- ) 

各種のシステム変数、(省略可能な) 引数の値に従って、使用するファイル、デバイスを決定し、指定されたデバイスから指定されたプログラムを読み込みます。 

load-base

( -- addr ) 

load コマンドによりデバイスから読み込んだデータを読み込むアドレス。

?go

( -- ) 

Forth、FCode、またはバイナリプログラムを実行します。 

boot の使用方法

boot は通常はオペレーティングシステムを起動するために使用しますが、任意のクライアントプログラムを読み込み、実行する場合にも使用できます。起動は通常は自動的に行われますが、ユーザーがユーザーインタフェースから開始することもできます。

boot プロセスは次のとおりです。

boot の一般的な形式は次のとおりです。


boot [device-specifier] [arguments]

ただし、device-specifierarguments は省略可能です。boot コマンドの使用に関する詳細については、「上級ユーザー向けの起動」を参照してください。

dlを使ってシリアルポート A から Forth テキストファイルを読み込む

dl で読み込む Forth のプログラムは ASCII ファイルでなければなりません。

シリアルラインからファイルを読み込むには、テストシステムのシリアルポート ttya を、要求があればすぐにファイルを転送できるマシン (つまり、サーバー) に接続し、そのサーバーで端末エミュレータを起動します。次に、端末エミュレータを使用して dl でファイルをダウンロードします。

次の例では、Solaris の端末エミュレータ tip を使用するものとします。(この手順についての詳細は、付録 A 「TIP 接続の設定」を参照してください。

  1. テストシステムの ok プロンプトで次のように入力します。


    ok dl
    

  2. サーバーの tip ウィンドウから、次のように入力します。

    ‾C

    これによりコマンド行を表示します。このコマンド行を使用して Solaris コマンドをサーバーに発行します。


    注 -

    C は大文字で入力する必要があります。



    注 -

    tip は、 がコマンド行上の最初の文字の場合にのみ、この文字を tip コマンドとして認識します。tip‾C を認識できなかった場合は、tip ウィンドウに Enter キーを入力し、もう一度 ‾C を入力します。


  3. local command プロンプトで cat を使用してファイルを転送します。


    ‾C (local command) cat filename
    (Away two seconds)
    Control-D 
    

  4. tip(Away n seconds) の形式のメッセージを表示したら、tip ウィンドウに

    Control-D

    を入力して、ファイルの終わりに達したことを dl に知らせます。

    dl はそこで自動的にファイルを解釈し、ファイルが読み込まれたシステムの画面に再び ok プロンプトが現れます。

load の使用方法

load の構文と動作は、プログラムが読み込まれるだけで、実行はされない点を除いて boot と同じです。load も、boot の場合と異なり、読み込む前にマシンをリセットしません。

load コマンドの一般的な形式は次のとおりです。


load [device-specifier] [arguments]

load コマンドの変数の解析は、boot の場合と同じシステム変数によって制御され、loaddevice-specifierarguments は同じプロセスで識別されます。(詳細は、「上級ユーザー向けの起動」を参照してください。)

device-specifierarguments が識別できたら、読み込みが次のように行われます。

  1. device-specifierarguments/chosen ノードのそれぞれ bootpathbootargs 特性に保存されます。

  2. device-specifier がシステム変数から得られた場合は、その値はデバイスのリストであることがあります。リストのエントリが 1 つだけであれば、load はそのエントリを device-specifier として使用します。


    注 -

    リストのエントリが複数の場合は、リスト上の最初のエントリから最後のエントリの 1 つ前までの各デバイスが開こうとします。システムがデバイスを開けると、そのデバイスは閉じられ、load がそれを device-specifier として使用します。リスト上のどのデバイスも開けなかった場合は、load はリストの最後のデバイスを device-specifier として使用します。


  3. loaddevice-specifier によって指定されるデバイスを開こうとします。そのデバイスが開けなかった場合は、読み込みは終了されます。

  4. デバイスが開けた場合は、その load 方法が呼び出されて、指定されたプログラムが指定されたデバイスからシステムのデフォルト読み込みアドレスに読み込まれます。

  5. 正常に読み込みができて、読み込まれたイメージの先頭がシステムの有効なクライアントプログラムヘッダーであれば、次の操作が行われます。

    1. そのヘッダーに指定されているアドレスに指摘されたサイズのメモリーが割り当てられます。

    2. 読み込まれたイメージがデフォルト読み込みアドレスから新しく割り当てられたメモリーに転送されます。

    3. go コマンドによって読み込まれたプログラムが実行できるようにしてシステムは初期化されます。後に続く go コマンドが読み込まれたプログラムの実行を開始するためにシステムが初期化されます。

dlbin を使って FCode またはバイナリ実行ファイルをシリアルポート A から読み込む

dlbin で読み込む FCode プログラムまたはバイナリプログラムは、Client プログラムヘッダーファイルでなければなりません。dlbin は、それらのファイルを Client プログラムヘッダーで示されるエントリポイントに読み込みます。バイナリファイルを 4000 (16 進数) にリンクします。最新バージョンの FCode トークン生成プログラムは、エントリポイントを 4000 として Client プログラムヘッダーファイルを作成します。

シリアルラインを通してファイルを読み込むには、要求に応じてファイルを転送できるマシン (つまり「サーバー」) にテストシステムのシリアルポート ttya を接続します。サーバーの端末エミュレータを起動し、その端末エミュレータを使用して dlbin を使用するファイルをダウンロードします。

次の例では、Solaris の端末エミュレータ tip を使用するものとします。(この手順についての詳細は、付録 A 「TIP 接続の設定」を参照してください。)

  1. テストシステムの ok プロンプトで、次のように入力します。


     
    ok dlbin
    

サーバーの tip ウィンドウで次のように入力します。


‾c

これによりコマンド行を表示します。このコマンド行を使用してサーバーに UNIX コマンドを発行できます。


注 -

C は大文字で入力する必要があります。



注 -

tip は、 がコマンド行上の最初の文字の場合、この文字を tip コマンドとして認識します。tip‾C を認識できなかった場合は、tip ウィンドウに Enter を入力し、もう一度 ‾C を入力します。


  1. "local command" プロンプトで、cat を使用してファイルを転送します。


    ‾C (local command) cat filename
    (Away two seconds)

ダウンロードが終了すると、tip(Away n seconds) の形式のメッセージを表示し、テストシステム側の画面に再び ok プロンプトが現れます。

FCode プログラムを実行するには、次のように入力します。


ok 4000 1 byte-load

ダウンロードしたプログラムを実行するには、次のように入力します。


ok go 

dload を使って Ethernet から読み込む

dload は、次に示すように、Ethernet を通じて指定されたアドレスに読み込みます。


ok 4000 dload filename

上記の例で、filename はサーバーのルートからの相対パス名でなければなりません。dload 入力のアドレスとして 4000 (16 進) を使用します。dload は簡易ファイル転送プロトコル (TFTP) を使用するので、このコマンド行が正しく動作するためには、サーバーのアクセス権の調整が必要なことがあります。

Forth プログラム

dload で読み込む Forth プログラムは、最初の 2 文字が「¥」(バックスラッシュと空白文字) である ASCII ファイルでなければなりません。読み込んだ Forth プログラムを実行するには、次のように入力します。


ok 4000 file-size @ eval

上の例で、file-size には読み込んだイメージのサイズを設定します。

FCode プログラム

dload で読み込む FCode プログラムは Client プログラムヘッダーファイルでなければなりません。読み込んだ FCode プログラムを実行するには、次のように入力します。


ok 4000 1 byte-load

byte-load は、SBus などの拡張ボード上での FCode プログラムの解釈用として OpenBoot が使用します。例の中にある 1 は、一般の場合の FCode 間の区切り指定用の変数の特定値です。dload はシステムメモリーに読み込まれるので、1 は正しい区切りになります。

実行可能バイナリ

dload は、Client プログラムヘッダーにバイナリプログラムがあることを必要とします。実行可能バイナリは、dload の入力アドレス (4000 など) にリンクされているか、位置に依存しないようになっていなければなりません。バイナリプログラムを実行するには、次のように入力します。


ok go

上記のプログラムをもう一度実行するには、次のように入力します。


ok init-program go

dload は、(起動コマンドの場合とは異なり) 中間起動プログラムを使用しません。したがって、Client プログラムヘッダーファイル内のシンボル情報はすべてユーザーインタフェースのシンボリックデバッグ機能で処理できます。(シンボリックデバッグについての詳細は、第 6 章「デバッグ」を参照してください)。

?go の使用方法

プログラムをシステムに読み込むことができたら、?go を使用してプログラムのタイプにかかわりなくそのプログラムを実行できます。

?go は読み込まれたイメージの先頭を調べます。イメージの先頭が文字列 "¥" (バックスラッシュと空白文字) である場合は、イメージは Forth テキストとみなされます。インタプリタが呼び出されてイメージを解釈します。