loader(8)
|
FreeBSD 一般コマンドマニュアル
|
loader
loader
る、最終段です。 IA32 (i386) アーキテクチャでは、これは BTX クライアント
です。 libstand(3) に静的にリンクされ、通常はディレクトリ /boot に置かれ
ます。
また、作業自動化、事前設定、回復処理の補助に使用可能な、スクリプト言語を
提供します。このスクリプト言語はおおまかに 2 つの主たる部分に分類されま
す。小さな方は、通常のユーザが直接使用するようデザインされたコマンドの集
合で、歴史的な事情により「組み込みコマンド」と呼ばれます。これらのコマン
ドを提供した背景には、主としてユーザの使い勝手を改善する目的があります。
大きな部品は ANS Forth 互換の Forth インタプリタであり、 John Sadler の
ficl をベースにしています。
初期化において、 loader はコンソールを検出して console 変数を設定します。
直前のブートステージにシリアルコンソールを使用した場合には、この変数をシ
リアルコンソール (``comconsole'') に設定します。その後、デバイスをプロー
ブし、 currdev と loaddev を設定し、 LINES を 24 に設定します。次に FICL
が初期化され、組み込み語が語彙に追加され、存在する場合には /boot/boot.4th
が処理されます。このファイルが読み込まれるまで、ディスクの交換はできませ
ん。 loader が FICL とともに使用する内部インタプリタは interpret に設定さ
れます。これは FICL のデフォルトです。この後、使用可能な場合
/boot/loader.rc が処理され、そうでない場合には歴史的な理由で
/boot/boot.conf が読み込まれます。これらのファイルは include コマンドを介
して処理されます。このコマンドは、処理前にファイル内容すべてをメモリに読
み込みますので、ディスク交換が可能となります。
この時点で、 autoboot が試されていない場合でかつ autoboot_delay が ``NO''
(大文字小文字は区別しません) に設定されていない場合、 autoboot が試されま
す。システムがこの時点まで到達した場合、 prompt が設定され、 loader は対
話モードになります。
組み込みコマンド
loader の組み込みコマンドは、パラメータをコマンドラインから受け取ります。
現在、スクリプトからの呼び出し方法は、文字列上で evaluate を使用すること
だけです。エラー状態が発生すると、 ANS Forth 例外操作語でインタセプト可能
な例外が生成されます。インタセプトされない場合、エラーメッセージが表示さ
れ、インタプリタの状態がリセットされます。これにより、スタックが空になり
インタプリタのモードが元に戻ります。
使用可能な組み込みコマンドは次の通りです:
autoboot [seconds]
ユーザが割り込まない場合には、指定した秒数の後にシステムのブート
ストラップへ進みます。キーが押されて割り込まれるまで、カウントダ
ウンプロンプトを表示し、ユーザに対してシステムがブートするところ
であることを警告します。必要であれば、最初にカーネルがロードされ
ます。デフォルトは 10 秒です。
bcachestat
ディスクキャッシュの使用状況を表示します。デバッグのためだけにあ
ります。
boot
heap メモリ使用状況が表示されます。デバッグ目的のためだけにあります。
help [topic [subtopic]]
ヘルプメッセージを /boot/loader.help から読み込んで表示します。特
殊トピック index は、使用可能なトピックを表示します。
include file [file ...]
スクリプトファイルを処理します。各ファイルは、順番がまわって来た
ところで完全にメモリに読み込まれ、各行がコマンドラインインタプリ
タに渡されます。インタプリタがエラーを返すと、他のファイルは読み
込まずに include コマンドは即時に異常終了し、自身にエラーを返しま
す ( エラー参照)。
load [-t type] file ...
カーネル、カーネルローダブルモジュール (kld)、内容を問わず type
とタグ付けされているファイルのいずれかをロードします。カーネルと
モジュールは、a.out または elf のどちらの形式であってもかまいませ
ん。ロードされるファイルの後で渡される引数は、そのファイルに対す
る引数として渡されます。現在のところ、これはカーネルに対しては動
作しないことに注意してください。
ls [-l] [path]
ディレクトリ path 、または path を指定しなかった場合にはルート
ディレクトリのファイル一覧を表示します。 -l を指定すると、ファイ
ルの大きさも表示します。
lsdev [-v]
モジュールのロード元となりうるデバイスをすべて表示します。 -v を
指定すると、更なる詳細を表示します。
lsmod [-v]
ロード済のモジュールを表示します。 -v を指定すると、更なる詳細を
表示します。
more file [file ...]
LINES 行を表示するごとに停止しながら、指定したファイルを表示しま
す。
pnpscan [-v]
プラグアンドプレイデバイスをスキャンします。現在のところ動作しま
せん。
read [-t seconds] [-p prompt] [variable]
入力行を端末から読み込み、 variable が指定された場合にはこれに読
み込み結果を格納します。タイムアウトは -t で指定可能ですが、これ
は最初に押されるキーにより打ち消されます。プロンプトもまた -p フ
ラグにより表示可能です。
reboot 即時にシステムをリブートします。
set variable
set variable=value
loader は実際のところ、異なった 2 種類の `環境' 変数を持ちます。それ
は、ANS Forth の 環境問い合わせと、別の空間であり組み込みコマンドが使用す
る環境変数です。後者は Forth の語としては直接使用できません。この節で説明
するのは、後者です。
環境変数の設定および設定解除は、 set と unset の組み込みコマンドを介して
行います。これらの値は、 show 組み込みコマンドを使用して対話的に検査でき
ます。これらの値は、 組み込みパーザで説明する方法でもまたアクセス可能で
す。
この環境変数は、システムブート後にシェルに継承されないことに注意してくだ
さい。
数個の変数が loader により自動的に設定されます。他の変数は、 loader また
はブート時のカーネル動作に影響し得ます。これらのうち値を要求するものがあ
る一方、設定されるだけで動作を定義するものもあります。これらを以下に示し
ます。
autoboot_delay
autoboot がブート前に待つ秒数です。この変数が定義されていない場
合、 autoboot はデフォルトの 10 秒になります。
``NO'' に設定すると、 /boot/loader.rc の処理の後に autoboot を
自動的には試みなくなります。しかし、明示的に autoboot を指定す
ると、デフォルトの 10 秒の遅延の後に通常通り処理されます。
boot_askname
カーネルブート時にルートデバイス名をユーザに尋ねるように、カー
ネルに指示します。
boot_ddb ブート時に初期化に進むのではなく DDB デバッガを開始するように、
カーネルに指示します。
boot_gdb gdb リモートモードを、カーネルデバッガのデフォルトとして選択し
ます。
boot_single
カーネルがマルチユーザスタートアップを開始することを防ぎ、カー
ネルがデバイスプローブを完了したときにはシングルユーザモードに
なります。
boot_userconfig
カーネルブート時にカーネルの対話的なデバイス設定プログラムを実
行するよう要求します。
boot_verbose
この変数を設定すると、ブートフェーズ中に追加のデバッグ情報をカ
ーネルが表示します。
bootfile セミコロンで区切った検索パスのリストであり、ここからブート可能
なカーネルを探します。デフォルトは ````kernel;kernel.old'''' で
す。
ます。
LINES 画面上の行数を定義します。ページャが使用します。
module_path
モジュールを検索するディレクトリのリストを設定します。モジュー
ル名は、load コマンドまたは依存関係により暗黙的に指定されます。
この変数のデフォルト値は ``/;/boot;/modules'' です。
num_ide_disks
IDE ディスクの数を設定します。これは、ブート時にルートディスク
を見つけることに関する問題への対処です。 root_disk_unit により
価値が低下しています。
prompt loader のプロンプトの値です。デフォルトは ``${currdev}>'' で
す。
root_disk_unit
ルートディスクのディスクユニット番号を検出するコードが混乱する
場合、この変数を設定することでユニット番号を強制可能です。混乱
するのは、例えば SCSI と IDE のディスクを両方持つ場合や、 IDE
ディスクの並びに隙間がある場合 (プライマリスレーブが無い場合な
ど) です。
rootdev デフォルトでは、カーネルブート時にルートファイルシステムの設定
には currdev が使用されます。これは rootdev を明示的に設定する
ことによりオーバライド可能です。
他の変数を使用することにより、カーネルの調整可能なパラメータをオーバライ
ド可能です。次の調整可能な変数が使用可能です:
kern.ipc.nmbclusters
割り当てられる mbuf クラスタ数を設定します。カーネルコンパ
イル時に決定されたデフォルト値より小さくは、設定できませ
ん。 NMBCLUSTERS を変更します。
kern.vm.kmem.size
カーネルメモリの大きさ (バイト) を設定します。カーネルコン
パイル時に決定された値に、完全に優先します。 VM_KMEM_SIZE
を変更します。
machdep.pccard.pcic_irq
通常時に PCCARD コントローラに割り当てられる IRQ をオーバラ
イドします。典型的には、最初に利用可能な割り込みが割り当て
られてしまい、他のハードウェアと衝突してしまうかもしれませ
ん。この値を 0 に設定すると、割り込みは割り当てられず、コン
トローラはポーリングモードのみで動作します。
net.inet.tcp.tcbhashsize
TCBHASHSIZE のコンパイル時の設定値をオーバライドするか、デ
フォルトの 512 にプリセットします。 2 のべき乗である必要が
あります。
o \v は ASCII の 11 に変換されます。
o \z は単にスキップされます。 ``\0xf\z\0xf'' のように使用すると便
利です。
o \0xN と \0xNN は 16 進数の N と NN に変換されます。
o \NNN は 8 進数 NNN の ASCII 文字に変換されます。
o \" , \' , \$ は、これらの文字をエスケープし、後述するステップ 2
における特殊な意味を与えられないようにします。
o \\ は単一の \ に変換されます。
o 他の場合、バックスラッシュは単に取り除かれます。
2. エスケープされていないクォートまたはダブルクォートの間のすべての文字
列は、後続するステップにおいて単一の語として扱われます。
3. $VARIABLE または ${VARIABLE} は、環境変数 VARIABLE の値に変換されま
す。
4. 空白で区切られた複数の引数を、呼び出した組み込みコマンドへ渡します。
空白は \\ を使用することによりエスケープ可能です。
解析ルールには例外があり、これは 組み込み語と FORTH で説明します。
B>組B>みB>込B>みB>語B>と FORTH
すべての組み込み語は、状態を意識する即時実行語です。インタプリトされる
と、これらは前述の通りに振舞います。一方コンパイルされると、引数をコマン
ドラインからではなくスタックから取り出します。
コンパイルされると、実行時に組み込み語は、スタック上で次のパラメータを見
付けられると期待します:
addrN lenN ... addr2 len2 addr1 len1 N
ここで addrX lenX は文字列であり、組み込み語の引数として解釈されるコマン
ドラインを構成します。内部的には、おのおのの間に空白を狭んで、これらの文
字列は 1 から N まで結合されます。
引数が渡されない場合、組み込み語が引数を受け付けない場合であっても、単一
の 0 を渡す 必要があります。
この動作には利点がありますが、それ自身にはトレードオフがあります。組み込
み語の実行トークンが ( ' または ['] を通して) 得られて、 catch または
execute に渡された場合、組み込み語の動作は catch または execute が実行さ
れるときの システムの状態に依存します ! これは、例外を扱いたいまたは扱う
必要があるプログラムにとっては、特に悩ましいものです。この場合、代理
(proxy) を使用することをお勧めします。例えば次のようにします:
: (boot) boot;
FICL
FICL は C で記述された Forth インタプリタであり、 C の関数などとして呼び
.ver
-roll
2constant
>name
body>
compare This is the STRING word set's compare.
compile-only
endif
forget-wid
parse-word
sliteral This is the STRING word set's sliteral.
wid-set-super
w@
w!
x.
empty
cell-
-rot
FREEBSD B>追B>加B>語
$ (--) 最初に入力バッファを表示した後、入力バッファの残りを評価しま
す。
% (--) catch 例外ガード下の、入力バッファの残りを評価します。
.# . と同様に動作しますが、後続の空白を表示しません。
fopen (addr len -- fd)
ファイルをオープンします。ファイル記述子を返します。失敗時には
-1 を返します。
fclose (fd --)
ファイルをクローズします。
の終了の場合には -1 を返します。
heap ディレクトリヒープ中に残された空間を、セル数の単位で返します。
これは、動的なメモリ割り当ての意味で使われるヒープとは無関係で
す。
inb (port -- char)
ポートからバイトを読み込みます。
key (-- char)
コンソールから 1 文字読み込みます。
key? (-- flag)
コンソールから読み込み可能な文字がある場合、 B>真を返します。
ms (u --)
u マイクロ秒待ちます。
outb (port char --)
ポートへバイトを書き込みます。
seconds (-- u)
深夜 0 時からの秒数を返します。
tib> (-- addr len)
入力バッファの残りを、スタック上の文字列として返します。
trace! (flag --)
トレースを有効または無効にします。 catch とともには動作しませ
ん。
FREEBSD B>でB>定B>義B>さB>れB>るB>環B>境B>問B>いB>合B>わB>せ
arch-i386
アーキテクチャが IA32 の場合 B>真です。
arch-alpha
アーキテクチャが AXP の場合 B>真です。
FreeBSD_version
コンパイル時の FreeBSD バージョンです。
loader_version
loader のバージョンです。
B>シB>スB>テB>ムB>文B>書
関連ファイル
/boot/loader loader 自身。
/boot/boot.4th 追加の FICL の初期化。
/boot/boot.conf loader のブートストラップスクリプト。価値が低
下しています。
にカーネルをロードする必要があることに注意してください。
load kernel
load -t userconfig_script /boot/kernel.conf
カーネルと起動画面をロードし、5 秒以内に自動ブートします。
load kernel
load splash_bmp
load -t splash_image_data /boot/chuckrulez.bmp
autoboot 5
ルートデバイスのディスクユニットを 2 に設定し、ブートします。 IDE ディス
クが 2 台のシステムで、 2 台目の IDE が wd1 ではなく wd2 に固定されている
システムにおいて、必要となるでしょう。
set root_disk_unit=2
boot /kernel
次を参照してください:
/boot/loader.4th 追加の組み込み的な語について。
/boot/support.4th loader.conf が処理する語について。
/usr/share/examples/bootforth/ 分類された使用例。
エラー
次の値を loader は返します:
100 組み込みコマンド処理において任意のタイプのエラーが発生しまし
た。
-1 Abort が実行されました。
-2 Abort" が実行されました。
-56 Quit が実行されました。
-256 インタプリトするテキストがありません。
-257 成功するためには更なるテキストが必要です -- 次の実行で終了し
ます。
-258 Bye が実行されました。
-259 未定義エラー。
関連項目
libstand(3), loader.conf(5), boot(8), btxld(8)
規格
FICL は John Sadler <john_sadler@alum.mit.edu> が記述しました。
バグ
expect と accept の語は、コンソールからではなく入力バッファから読み込みま
す。後者については修正されますが、前者は修正されません。
FreeBSD 4.4 March 14, 1999 FreeBSD 4.4