起動はクライアントプログラムを読み込み実行するプロセスです。クライアントプログラムは、通常はオペレーティングシステムまたはオペレーティングシステムのローダプログラムですが、boot を使用して診断などその他の種類のプログラムを読み込み、実行することもできます。(オペレーティングシステム以外のプログラムの読み込みについての詳細は、第 5 章「プログラムの読み込みと実行」を参照してください。)
起動は、普通は、上記で説明した各システム変数の内容値に基づいて自動的に行われますが、ユーザーインタフェースからも開始できます。
OpenBoot は起動処理で次に示す手順を実行します。
最後のリセット以降にクライアントプログラムが実行されている場合は、OpenBoot ファームウェアがマシンをリセットする場合があります。(リセットするかどうかは実装によって決まります。)
boot コマンド行を読み込んで、使用する起動デバイスと起動引数を知ることによりデバイスが選択されます。起動デバイスや起動引数値は、boot コマンドの形式によってはシステム変数から取り出されます。
デバイスツリーの /chosen ノードの bootpath、bootargs 特性に選択した値が設定されます。
選択されたプログラムが、選択したデバイスのタイプによって決まるプロトコルを使用してメモリーに読み込まれます。たとえば、ディスク起動の場合はディスクの先頭から決まったブロック数が読み込まれるのに対して、テープ起動では特定のテープファイルが読み込まれます。
読み込まれたプログラムが実行されます。プログラムの動作は、さらに、(存在する場合) 選択するシステム変数に設定されていた引数文字列、コマンド行で boot コマンドに渡される引数文字列によっても制御できます。
多くの場合、起動処理によって読み込み、実行されるプログラムは二次起動プログラムであり、それはさらに別のプログラムを読み込みすることを目的とします。この二次起動プログラムは、OpenBoot が使用するものとは異なるプロトコルを使用して二次起動プログラムを読み込むことができます。たとえば、OpenBoot は簡易ファイル転送プロトコル (TFTP) を使用して二次起動プログラムを読み込むこともでき、さらに読み込まれた二次起動プログラムが今度はネットワークファイルシステム (NFS) を使用してオペレーティングシステムを読み込むこともできます。
一般的な二次起動プログラムには次の形式の引数を指定できます。
filename -flags
ここで、filename はオペレーティングシステムを格納しているファイルの名前であり、-flags は、二次起動プログラム、オペレーティングシステム、またはそれらの両方の起動フェーズの詳細制御用のオプションのリストです。すぐ次の boot コマンドのテンプレートに示すように、OpenBoot はそのようなテキストをすべて OpenBoot そのものには特別な意味をもたない、1 つの隠された arguments 文字列として取り扱うということ、つまり、引数文字列は変更されないでそのまま指定されたプログラムに渡されるということに注意してください。
boot コマンドの形式は次のとおりです。
ok boot [device-specifier] [arguments] |
boot コマンドの省略可能な変数を表 2-1 で説明します。
表 2-1 boot コマンドの省略可能な変数
変数名 |
説明 |
---|---|
[device-specifier] |
起動デバイスの名前 (フルパス名または devalias)。一般的には次のような値が使用されます。 cdrom (CD-ROM ドライブ) disk (ハードディスク) floppy (3.5 インチフロッピーディスク) net (Ethernet) tape (SCSI テープ) device-specifier を指定しないときに、diagnostic-mode? から false が返された場合は、boot は boot-device システム変数によって指定されるデバイスを使用します。 device-specifier を指定しないときに、diagnostic-mode? から true が返された場合は、boot は diag-device システム変数によって指定されるデバイスを使用します。 |
[arguments] |
起動するプログラム (たとえば stand/diag) の名前と任意のプログラム引数。 arguments を指定しないときに、diagnostic-mode? から false が返された場合は、boot は boot-file システム変数によって指定されるファイルを使用します。 arguments を指定しないときに、diagnostic-mode? から true が返された場合は、boot は diag-file システム変数によって指定されるファイルを使用します。 |
デバイス名を必要とする大部分の (boot や test などの) コマンドには、フルデバイス名でもデバイスの別名でも指定できます。本書では、device-specifier (デバイス指定子) という用語は、デバイスパス名でもデバイスの別名でも指定できるということを意味しています。
デバイスの別名は構文的には arguments と区別できないので、OpenBoot はこのあいまいさを次のように解決します。
コマンド行上の boot の後の空白文字で区切られた語の最初の文字が / である場合は、その語はデバイスパス、つまり device-specifier です。この device-specifier の右側のテキストはすべて arguments になります。
上記とは異なって、空白文字で区切られた語の最初の文字が / ではなくて、かつ既存のデバイスの別名と一致する場合は、その語は device-specifier です。この device-specifier の右側のテキストはすべて arguments になります。
上記のどちらとも異なる場合は、該当するデフォルトの起動デバイスが使用され、boot の右側のテキストはすべて arguments になります。
したがって、boot コマンド行には次に示すような書式が可能です。
ok boot |
この書式の場合は、boot はデフォルトの起動デバイスからデフォルトの起動引数によって指定されるプログラムを読み込み、実行します。
ok boot device-specifier |
boot の引数が 1 つだけであって、その最初の文字が / であるか、または定義されている devalias の名前である場合は、boot はその引数をデバイス指定子として使用します。つまり、boot は指定されたデバイスからデフォルト起動引数によって指定されるプログラムを読み込み、実行します。
たとえば、明示的にディスクから起動するには、次のように入力します。
ok boot disk |
明示的にネットワークから起動するには、次のように入力します。
ok boot net |
boot の引数が 1 つだけであって、かつその最初の文字が / でもなく、また定義されている devaliasの名前でもない場合は、boot はその後のテキストをすべて boot の引数として使用します。
ok boot arguments |
boot はデフォルトの起動デバイスから引数によって指定されるプログラムを読み込み、実行します。
ok boot device-specifier arguments |
空白文字で区切られた引数が最低 2 つはあって、かつそれらの最初の引数の最初の文字が / であるか、または定義されている devalias の名前である場合は、boot は最初の引数をデバイス指定子として使用し、その後のテキストをすべて boot の引数として使用します。つまり、boot は指定されたデバイスから引数によって指定されるプログラムを読み込み、実行します。
上に示したすべての場合について、boot はそれが使用するデバイスを /chosen ノードの bootpath 特性に記録します。boot はさらに、それが使用する引数も /chosen ノードの bootargs 特性に記録します。
デバイスの別名定義はシステムごとに異なります。第 1 章「概要」で説明している devalias を使用してシステムの別名の定義を調べてください。