854 lines
21 KiB
Groff
854 lines
21 KiB
Groff
.\" Copyright (c) 1999 Daniel C. Sobral
|
|
.\" All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" %FreeBSD: src/sys/boot/common/loader.8,v 1.18.2.14 2002/07/07 14:32:08 schweikh Exp %
|
|
.\"
|
|
.\" Note: The date here should be updated whenever a non-trivial
|
|
.\" change is made to the manual page.
|
|
.\"
|
|
.\" $FreeBSD$
|
|
.Dd March 14, 1999
|
|
.Dt LOADER 8
|
|
.Os
|
|
.Sh 名称
|
|
.Nm loader
|
|
.Nd カーネルブートストラップの最終段階
|
|
.Sh 解説
|
|
.Nm
|
|
と呼ばれるプログラムは、
|
|
.Fx
|
|
のカーネルブートストラップにおける、最終段です。
|
|
IA32 (i386) アーキテクチャでは、これは
|
|
.Pa BTX
|
|
クライアントです。
|
|
.Xr libstand 3
|
|
に静的にリンクされ、通常はディレクトリ
|
|
.Pa /boot
|
|
に置かれます。
|
|
.Pp
|
|
また、作業自動化、事前設定、回復処理の補助に使用可能な、
|
|
スクリプト言語を提供します。
|
|
このスクリプト言語はおおまかに 2 つの主たる部分に分類されます。
|
|
小さな方は、通常のユーザが直接使用するようデザインされたコマンドの集合で、
|
|
歴史的な事情により「組み込みコマンド」と呼ばれます。
|
|
これらのコマンドを提供した背景には、
|
|
主としてユーザの使い勝手を改善する目的があります。
|
|
大きな部品は
|
|
.Tn ANS
|
|
Forth 互換の Forth インタプリタであり、
|
|
.An John Sadler
|
|
の ficl をベースにしています。
|
|
.Pp
|
|
初期化において、
|
|
.Nm
|
|
はコンソールを検出して
|
|
.Va console
|
|
変数を設定します。
|
|
直前のブートステージにシリアルコンソールを使用した場合には、
|
|
この変数をシリアルコンソール
|
|
.Pq Dq comconsole
|
|
に設定します。
|
|
その後、デバイスをプローブし、
|
|
.Va currdev
|
|
と
|
|
.Va loaddev
|
|
を設定し、
|
|
.Va LINES
|
|
を 24 に設定します。
|
|
次に
|
|
.Tn FICL
|
|
が初期化され、組み込み語が語彙に追加され、存在する場合には
|
|
.Pa /boot/boot.4th
|
|
が処理されます。
|
|
このファイルが読み込まれるまで、ディスクの交換はできません。
|
|
.Nm
|
|
が
|
|
.Tn FICL
|
|
とともに使用する内部インタプリタは
|
|
.Ic interpret
|
|
に設定されます。これは
|
|
.Tn FICL
|
|
のデフォルトです。
|
|
この後、使用可能な場合
|
|
.Pa /boot/loader.rc
|
|
が処理され、そうでない場合には歴史的な理由で
|
|
.Pa /boot/boot.conf
|
|
が読み込まれます。
|
|
これらのファイルは
|
|
.Ic include
|
|
コマンドを介して処理されます。
|
|
このコマンドは、
|
|
処理前にファイル内容すべてをメモリに読み込みますので、
|
|
ディスク交換が可能となります。
|
|
.Pp
|
|
この時点で、
|
|
.Ic autoboot
|
|
が試されていない場合でかつ
|
|
.Va autoboot_delay
|
|
が
|
|
.Dq NO
|
|
(大文字小文字は区別しません) に設定されていない場合、
|
|
.Ic autoboot
|
|
が試されます。
|
|
システムがこの時点まで到達した場合、
|
|
.Va prompt
|
|
が設定され、
|
|
.Nm
|
|
は対話モードになります。
|
|
.Sh 組み込みコマンド
|
|
.Nm
|
|
の組み込みコマンドは、パラメータをコマンドラインから受け取ります。
|
|
現在、スクリプトからの呼び出し方法は、文字列上で
|
|
.Pa evaluate
|
|
を使用することだけです。
|
|
エラー状態が発生すると、
|
|
.Tn ANS
|
|
Forth 例外操作語でインタセプト可能な例外が生成されます。
|
|
インタセプトされない場合、エラーメッセージが表示され、
|
|
インタプリタの状態がリセットされます。
|
|
これにより、スタックが空になりインタプリタのモードが元に戻ります。
|
|
.Pp
|
|
使用可能な組み込みコマンドは次の通りです:
|
|
.Pp
|
|
.Bl -tag -width Ds -compact
|
|
.It Ic autoboot Op Ar seconds
|
|
ユーザが割り込まない場合には、
|
|
指定した秒数の後にシステムのブートストラップへ進みます。
|
|
キーが押されて割り込まれるまで、
|
|
カウントダウンプロンプトを表示し、
|
|
ユーザに対してシステムがブートするところであることを警告します。
|
|
必要であれば、最初にカーネルがロードされます。
|
|
デフォルトは 10 秒です。
|
|
.Pp
|
|
.It Ic bcachestat
|
|
ディスクキャッシュの使用状況を表示します。
|
|
デバッグのためだけにあります。
|
|
.Pp
|
|
.It Ic boot
|
|
.It Ic boot Ar kernelname Op Cm ...
|
|
.It Ic boot Fl flag Cm ...
|
|
システムのブートストラップへすぐに進み、
|
|
必要であればカーネルをロードします。
|
|
すべてのフラグまたは引数はカーネルに渡されますが、
|
|
カーネル名が指定された場合、これらはカーネル名の後にある必要があります。
|
|
.Pp
|
|
.Em 警告 :
|
|
この組み込みコマンドの動作は、
|
|
.Xr loader.4th 8
|
|
がロードされると、変ります
|
|
.Pp
|
|
.It Ic echo Xo
|
|
.Op Fl n
|
|
.Op Aq message
|
|
.Xc
|
|
画面にテキストを表示します。
|
|
.Fl n
|
|
を指定しない場合、改行が表示されます。
|
|
.Pp
|
|
.It Ic heap
|
|
メモリ使用状況が表示されます。デバッグ目的のためだけにあります。
|
|
.Pp
|
|
.It Ic help Op topic Op subtopic
|
|
ヘルプメッセージを
|
|
.Pa /boot/loader.help
|
|
から読み込んで表示します。
|
|
特殊トピック
|
|
.Em index
|
|
は、使用可能なトピックを表示します。
|
|
.Pp
|
|
.It Ic include Ar file Op Ar
|
|
スクリプトファイルを処理します。
|
|
各ファイルは、順番がまわって来たところで完全にメモリに読み込まれ、
|
|
各行がコマンドラインインタプリタに渡されます。
|
|
インタプリタがエラーを返すと、
|
|
他のファイルは読み込まずに include コマンドは即時に異常終了し、
|
|
自身にエラーを返します (
|
|
.Sx エラー
|
|
参照)。
|
|
.Pp
|
|
.It Ic load Xo
|
|
.Op Fl t Ar type
|
|
.Ar file Cm ...
|
|
.Xc
|
|
カーネル、カーネルローダブルモジュール (kld)、内容を問わず
|
|
.Ar type
|
|
とタグ付けされているファイルのいずれかをロードします。
|
|
カーネルとモジュールは、a.out または elf のどちらの形式であってもかまいません。
|
|
ロードされるファイルの後で渡される引数は、
|
|
そのファイルに対する引数として渡されます。
|
|
現在のところ、これはカーネルに対しては動作しないことに注意してください。
|
|
.Pp
|
|
.It Ic ls Xo
|
|
.Op Fl l
|
|
.Op Ar path
|
|
.Xc
|
|
ディレクトリ
|
|
.Ar path
|
|
、または
|
|
.Ar path
|
|
を指定しなかった場合にはルートディレクトリのファイル一覧を表示します。
|
|
.Fl l
|
|
を指定すると、ファイルの大きさも表示します。
|
|
.Pp
|
|
.It Ic lsdev Op Fl v
|
|
モジュールのロード元となりうるデバイスをすべて表示します。
|
|
.Fl v
|
|
を指定すると、更なる詳細を表示します。
|
|
.Pp
|
|
.It Ic lsmod Op Fl v
|
|
ロード済のモジュールを表示します。
|
|
.Fl v
|
|
を指定すると、更なる詳細を表示します。
|
|
.Pp
|
|
.It Ic more Ar file Op Ar
|
|
.Va LINES
|
|
行を表示するごとに停止しながら、指定したファイルを表示します。
|
|
.Pp
|
|
.It Ic pnpscan Op Fl v
|
|
プラグアンドプレイデバイスをスキャンします。
|
|
現在のところ動作しません。
|
|
.Pp
|
|
.It Ic read Xo
|
|
.Op Fl t Ar seconds
|
|
.Op Fl p Ar prompt
|
|
.Op Va variable
|
|
.Xc
|
|
入力行を端末から読み込み、
|
|
.Va variable
|
|
が指定された場合にはこれに読み込み結果を格納します。
|
|
タイムアウトは
|
|
.Fl t
|
|
で指定可能ですが、これは最初に押されるキーにより打ち消されます。
|
|
プロンプトもまた
|
|
.Fl p
|
|
フラグにより表示可能です。
|
|
.Pp
|
|
.It Ic reboot
|
|
即時にシステムをリブートします。
|
|
.Pp
|
|
.It Ic set Ar variable
|
|
.It Ic set Ar variable Ns = Ns Ar value
|
|
ローダの環境変数を設定します。
|
|
.Pp
|
|
.It Ic show Op Va variable
|
|
指定した変数の値を表示します。
|
|
.Va variable
|
|
を指定しないと、すべての変数とその値を表示します。
|
|
.Pp
|
|
.It Ic unload
|
|
全モジュールをメモリから取り除きます。
|
|
.Pp
|
|
.It Ic unset Va variable
|
|
.Va variable
|
|
を環境から取り除きます。
|
|
.Pp
|
|
.It Ic \&?
|
|
.Dq help index
|
|
と同じです。
|
|
.Pp
|
|
.El
|
|
.Ss 組み込みの環境変数
|
|
.Nm
|
|
は実際のところ、異なった 2 種類の
|
|
.Sq 環境
|
|
変数を持ちます。
|
|
それは、ANS Forth の
|
|
.Em 環境問い合わせ
|
|
と、別の空間であり組み込みコマンドが使用する環境変数です。
|
|
後者は Forth の語としては直接使用できません。
|
|
この節で説明するのは、後者です。
|
|
.Pp
|
|
環境変数の設定および設定解除は、
|
|
.Ic set
|
|
と
|
|
.Ic unset
|
|
の組み込みコマンドを介して行います。これらの値は、
|
|
.Ic show
|
|
組み込みコマンドを使用して対話的に検査できます。
|
|
これらの値は、
|
|
.Sx 組み込みパーザ
|
|
で説明する方法でもまたアクセス可能です。
|
|
.Pp
|
|
この環境変数は、システムブート後にシェルに継承されないことに注意してください。
|
|
.Pp
|
|
数個の変数が
|
|
.Nm
|
|
により自動的に設定されます。
|
|
他の変数は、
|
|
.Nm
|
|
またはブート時のカーネル動作に影響し得ます。
|
|
これらのうち値を要求するものがある一方、
|
|
設定されるだけで動作を定義するものもあります。
|
|
これらを以下に示します。
|
|
.Bl -tag -width bootfile
|
|
.It Va autoboot_delay
|
|
.Ic autoboot
|
|
がブート前に待つ秒数です。この変数が定義されていない場合、
|
|
.Ic autoboot
|
|
はデフォルトの 10 秒になります。
|
|
.Pp
|
|
.Dq NO
|
|
に設定すると、
|
|
.Pa /boot/loader.rc
|
|
の処理の後に
|
|
.Ic autoboot
|
|
を自動的には試みなくなります。
|
|
しかし、明示的に
|
|
.Ic autoboot
|
|
を指定すると、デフォルトの 10 秒の遅延の後に通常通り処理されます。
|
|
.It Va boot_askname
|
|
カーネルブート時にルートデバイス名をユーザに尋ねるように、
|
|
カーネルに指示します。
|
|
.It Va boot_ddb
|
|
ブート時に初期化に進むのではなく DDB デバッガを開始するように、
|
|
カーネルに指示します。
|
|
.It Va boot_gdb
|
|
gdb リモートモードを、カーネルデバッガのデフォルトとして選択します。
|
|
.It Va boot_single
|
|
カーネルがマルチユーザスタートアップを開始することを防ぎ、
|
|
カーネルがデバイスプローブを完了したときにはシングルユーザモードになります。
|
|
.It Va boot_userconfig
|
|
カーネルブート時に
|
|
カーネルの対話的なデバイス設定プログラムを実行するよう要求します。
|
|
.It Va boot_verbose
|
|
この変数を設定すると、
|
|
ブートフェーズ中に追加のデバッグ情報をカーネルが表示します。
|
|
.It Va bootfile
|
|
セミコロンで区切った検索パスのリストであり、
|
|
ここからブート可能なカーネルを探します。
|
|
デフォルトは
|
|
.Dq Dq kernel;kernel.old
|
|
です。
|
|
.It Va console
|
|
現在のコンソールを定義します。
|
|
.It Va currdev
|
|
デフォルトデバイスを選択します。デバイスの文法は奇妙なものです。
|
|
.It Va init_path
|
|
カーネルが初期プロセスとして実行しようとすべきバイナリのリストを指定します。
|
|
デフォルトは
|
|
.Dq Li /sbin/init:/sbin/oinit:/sbin/init.bak:/stand/sysinstall
|
|
です。
|
|
.It Va interpret
|
|
Forth の現在の状態がインタプリタの場合、
|
|
.Dq Li ok
|
|
という値を持ちます。
|
|
.It Va LINES
|
|
画面上の行数を定義します。ページャが使用します。
|
|
.It Va module_path
|
|
モジュールを検索するディレクトリのリストを設定します。
|
|
モジュール名は、load コマンドまたは依存関係により暗黙的に指定されます。
|
|
この変数のデフォルト値は
|
|
.Dq Li /;/boot;/modules
|
|
です。
|
|
.It Va num_ide_disks
|
|
IDE ディスクの数を設定します。
|
|
これは、ブート時にルートディスクを見つけることに関する問題への対処です。
|
|
.Va root_disk_unit
|
|
により価値が低下しています。
|
|
.It Va prompt
|
|
.Nm
|
|
のプロンプトの値です。
|
|
デフォルトは
|
|
.Dq Li "${currdev}>"
|
|
です。
|
|
.It Va root_disk_unit
|
|
ルートディスクのディスクユニット番号を検出するコードが混乱する場合、
|
|
この変数を設定することでユニット番号を強制可能です。
|
|
混乱するのは、例えば SCSI と IDE のディスクを両方持つ場合や、
|
|
IDE ディスクの並びに隙間がある場合 (プライマリスレーブが無い場合など) です。
|
|
.It Va rootdev
|
|
デフォルトでは、カーネルブート時にルートファイルシステムの設定には
|
|
.Va currdev
|
|
が使用されます。
|
|
これは
|
|
.Va rootdev
|
|
を明示的に設定することによりオーバライド可能です。
|
|
.It Va dumpdev
|
|
パニック時にカーネルがクラッシュダンプを保存可能なデバイスの名前です。
|
|
これは、自動的に
|
|
.Va kern.dumpdev
|
|
.Xr sysctl 3
|
|
MIB 変数を設定します。
|
|
.El
|
|
.Pp
|
|
他の変数を使用することにより、
|
|
カーネルの調整可能なパラメータをオーバライド可能です。
|
|
次の調整可能な変数が使用可能です:
|
|
.Bl -tag -width Va
|
|
.It Va kern.maxusers
|
|
多くの静的に割り当てられるシステムテーブルの大きさを設定します。
|
|
このチューナブルに対して適切な値をどのように選択するかについては、
|
|
.Xr tuning 7
|
|
を参照してください。
|
|
このチューナブルが設定されている場合、
|
|
カーネルがコンパイルされたときの設定ファイルで宣言された値は、
|
|
置き換えられます。
|
|
.It Va kern.ipc.nmbclusters
|
|
割り当てられる mbuf クラスタ数を設定します。
|
|
カーネルコンパイル時に決定されたデフォルト値より小さくは、設定できません。
|
|
.Va NMBCLUSTERS
|
|
を変更します。
|
|
.It Va kern.vm.kmem.size
|
|
カーネルメモリの大きさ (バイト) を設定します。
|
|
カーネルコンパイル時に決定された値に、完全に優先します。
|
|
.Va VM_KMEM_SIZE
|
|
を変更します。
|
|
.It Va kern.maxswzone
|
|
スワップメタ情報を保持するための KVM 量を制限します。
|
|
これは、システムがサポート可能なスワップ量に直接影響を与えます。
|
|
この値は、KVA 空間のバイト数で指定され、デフォルトは約 70MB です。
|
|
この値を減らし過ぎて、
|
|
実際に構成されるスワップが
|
|
カーネルがサポートするスワップの 1/2 を越えてしまわぬよう、
|
|
注意してください。
|
|
デフォルトの 70MB は、
|
|
カーネルが最大 (約) 14 GB のスワップを構成可能とします。
|
|
バッファキャッシュや
|
|
.Va NMBCLUSTERS
|
|
といった
|
|
他の資源用の KVM 予約を大幅に増やす場合のみ、
|
|
本パラメータを調整してみてください。
|
|
.Va VM_SWZONE_SIZE_MAX
|
|
を変更します。
|
|
.It Va kern.maxbcache
|
|
バッファキャッシュ用に予約される KVM の量を制限します。
|
|
バイト数で指定します。
|
|
デフォルトの最大値は 200 MB です。
|
|
このパラメータは、大規模構成において、
|
|
バッファキャッシュが多くの KVM を消費してしまうことを避けるために使用します。
|
|
スワップゾーンや
|
|
.Va NMBCLUSTERS
|
|
といった
|
|
他の資源用の KVM 予約を大幅に増やす場合のみ、
|
|
本パラメータを調整してみてください。
|
|
NBUF パラメータがこの制限に優先することに注意してください。
|
|
.Va VM_BCACHE_SIZE_MAX
|
|
を変更します。
|
|
.It Va machdep.pccard.pcic_irq
|
|
通常時に PCCARD コントローラに割り当てられる IRQ をオーバライドします。
|
|
典型的には、最初に利用可能な割り込みが割り当てられてしまい、
|
|
他のハードウェアと衝突してしまうかもしれません。
|
|
この値を 0 に設定すると、割り込みは割り当てられず、
|
|
コントローラはポーリングモードのみで動作します。
|
|
.It Va net.inet.tcp.tcbhashsize
|
|
.Va TCBHASHSIZE
|
|
のコンパイル時の設定値をオーバライドするか、
|
|
デフォルトの 512 にプリセットします。
|
|
2 のべき乗である必要があります。
|
|
.El
|
|
.Ss 組み込みパーザ
|
|
組み込みコマンドが実行されるとき、
|
|
行の残りはコマンドが引数として受け取り、
|
|
通常の Forth コマンドには使用されない特別なパーザがコマンドを処理します。
|
|
.Pp
|
|
この特別なパーザは、解析したテキストに対して次のルールを適用します:
|
|
.Pp
|
|
.Bl -enum
|
|
.It
|
|
すべてのバックスラッシュ文字は前処理されます。
|
|
.Bl -bullet
|
|
.It
|
|
\eb , \ef , \er , \en, \et は C
|
|
で扱われるように処理されます。
|
|
.It
|
|
\es は空白文字に変換されます。
|
|
.It
|
|
\ev は
|
|
.Tn ASCII
|
|
の 11 に変換されます。
|
|
.It
|
|
\ez は単にスキップされます。
|
|
.Dq \e0xf\ez\e0xf
|
|
のように使用すると便利です。
|
|
.It
|
|
\e0xN と \e0xNN は 16 進数の N と NN に変換されます。
|
|
.It
|
|
\eNNN は 8 進数 NNN の
|
|
.Tn ASCII
|
|
文字に変換されます。
|
|
.It
|
|
\e" , \e' , \e$ は、これらの文字をエスケープし、
|
|
後述するステップ 2 における特殊な意味を与えられないようにします。
|
|
.It
|
|
\e\e は単一の \e に変換されます。
|
|
.It
|
|
他の場合、バックスラッシュは単に取り除かれます。
|
|
.El
|
|
.It
|
|
エスケープされていないクォートまたはダブルクォートの間のすべての文字列は、
|
|
後続するステップにおいて単一の語として扱われます。
|
|
.It
|
|
.Li $VARIABLE
|
|
または
|
|
.Li ${VARIABLE}
|
|
は、環境変数
|
|
.Va VARIABLE
|
|
の値に変換されます。
|
|
.It
|
|
空白で区切られた複数の引数を、呼び出した組み込みコマンドへ渡します。
|
|
空白は \e\e を使用することによりエスケープ可能です。
|
|
.El
|
|
.Pp
|
|
解析ルールには例外があり、これは
|
|
.Sx 組み込み語と FORTH
|
|
で説明します。
|
|
.Ss 組み込み語と FORTH
|
|
すべての組み込み語は、状態を意識する即時実行語です。
|
|
インタプリトされると、これらは前述の通りに振舞います。
|
|
一方コンパイルされると、
|
|
引数をコマンドラインからではなくスタックから取り出します。
|
|
.Pp
|
|
コンパイルされると、
|
|
実行時に組み込み語は、スタック上で次のパラメータを見付けられると期待します:
|
|
.D1 Ar addrN lenN ... addr2 len2 addr1 len1 N
|
|
ここで
|
|
.Ar addrX lenX
|
|
は文字列であり、組み込み語の引数として解釈されるコマンドラインを構成します。
|
|
内部的には、おのおのの間に空白を狭んで、
|
|
これらの文字列は 1 から N まで結合されます。
|
|
.Pp
|
|
引数が渡されない場合、組み込み語が引数を受け付けない場合であっても、
|
|
単一の 0 を渡す
|
|
.Em 必要
|
|
があります。
|
|
.Pp
|
|
この動作には利点がありますが、それ自身にはトレードオフがあります。
|
|
組み込み語の実行トークンが (
|
|
.Ic '
|
|
または
|
|
.Ic [']
|
|
を通して) 得られて、
|
|
.Ic catch
|
|
または
|
|
.Ic execute
|
|
に渡された場合、組み込み語の動作は
|
|
.Bf Em
|
|
.Ic catch
|
|
または
|
|
.Ic execute
|
|
が実行されるときの
|
|
.Ef
|
|
システムの状態に依存します !
|
|
これは、
|
|
例外を扱いたいまたは扱う必要があるプログラムにとっては、特に悩ましいものです。
|
|
この場合、代理 (proxy) を使用することをお勧めします。
|
|
例えば次のようにします:
|
|
.Dl : (boot) boot ;
|
|
.Sh FICL
|
|
.Tn FICL
|
|
は C で記述された Forth インタプリタであり、
|
|
C の関数などとして呼び出し可能な forth 仮想マシンライブラリの形式です。
|
|
.Pp
|
|
.Nm
|
|
では、対話的に読み込まれた各行は
|
|
.Tn FICL
|
|
に与えられます。
|
|
.Tn FICL
|
|
は、組み込み語を実行するために
|
|
.Nm
|
|
を呼び戻します。
|
|
組み込みの
|
|
.Ic include
|
|
もまた、1 度に 1 行ずつを
|
|
.Tn FICL
|
|
へ与えます。
|
|
.Pp
|
|
.Tn FICL
|
|
へ使用可能な語は 4 グループへ分類可能です。それは、
|
|
.Tn ANS
|
|
Forth 標準語、追加の
|
|
.Tn FICL
|
|
語、追加の
|
|
.Fx
|
|
語、そして組み込みコマンドです。
|
|
最後のものは既に説明しました。
|
|
.Tn ANS
|
|
Forth 標準語は、
|
|
.Sx 規格
|
|
の節に列挙しています。
|
|
別の 2 グループの語については、以降の小節において説明します。
|
|
.Ss FICL 追加語
|
|
.Bl -tag -width wid-set-super
|
|
.It Ic .env
|
|
.It Ic .ver
|
|
.It Ic -roll
|
|
.It Ic 2constant
|
|
.It Ic >name
|
|
.It Ic body>
|
|
.It Ic compare
|
|
This is the STRING word set's
|
|
.Ic compare .
|
|
.It Ic compile-only
|
|
.It Ic endif
|
|
.It Ic forget-wid
|
|
.It Ic parse-word
|
|
.It Ic sliteral
|
|
This is the STRING word set's
|
|
.Ic sliteral .
|
|
.It Ic wid-set-super
|
|
.It Ic w@
|
|
.It Ic w!
|
|
.It Ic x.
|
|
.It Ic empty
|
|
.It Ic cell-
|
|
.It Ic -rot
|
|
.El
|
|
.Ss FREEBSD 追加語
|
|
.Bl -tag -width XXXXXXXX
|
|
.It Ic \&$ Pq --
|
|
最初に入力バッファを表示した後、入力バッファの残りを評価します。
|
|
.It Ic \&% Pq --
|
|
.Ic catch
|
|
例外ガード下の、入力バッファの残りを評価します。
|
|
.It Ic .#
|
|
.Ic .
|
|
と同様に動作しますが、後続の空白を表示しません。
|
|
.It Ic fopen Pq Ar addr len -- fd
|
|
ファイルをオープンします。ファイル記述子を返します。
|
|
失敗時には -1 を返します。
|
|
.It Ic fclose Pq Ar fd --
|
|
ファイルをクローズします。
|
|
.It Ic fkey Pq Ar fd -- char
|
|
ファイルから 1 文字読み込みます。
|
|
.It Ic fload Pq Ar fd --
|
|
ファイル
|
|
.Em fd
|
|
を処理します。
|
|
.It Ic fopen Pq Ar addr len -- fd
|
|
ファイルをオープンします。
|
|
ファイル記述子を返すか、失敗時には -1 を返します。
|
|
.It Xo
|
|
.Ic fread
|
|
.Pq Ar fd addr len -- len'
|
|
.Xc
|
|
ファイル
|
|
.Em fd
|
|
から
|
|
.Em len
|
|
バイトを、バッファ
|
|
.Em addr
|
|
へ読み込もうとします。
|
|
実際に読み込んだバイト数を返します。
|
|
エラー時またはファイルの終了の場合には -1 を返します。
|
|
.It Ic heap
|
|
ディレクトリヒープ中に残された空間を、セル数の単位で返します。
|
|
これは、動的なメモリ割り当ての意味で使われるヒープとは無関係です。
|
|
.It Ic inb Pq Ar port -- char
|
|
ポートからバイトを読み込みます。
|
|
.It Ic key Pq -- Ar char
|
|
コンソールから 1 文字読み込みます。
|
|
.It Ic key? Pq -- Ar flag
|
|
コンソールから読み込み可能な文字がある場合、
|
|
.Ic 真
|
|
を返します。
|
|
.It Ic ms Pq Ar u --
|
|
.Em u
|
|
マイクロ秒待ちます。
|
|
.It Ic outb Pq Ar port char --
|
|
ポートへバイトを書き込みます。
|
|
.It Ic seconds Pq -- Ar u
|
|
深夜 0 時からの秒数を返します。
|
|
.It Ic tib> Pq -- Ar addr len
|
|
入力バッファの残りを、スタック上の文字列として返します。
|
|
.It Ic trace! Pq Ar flag --
|
|
トレースを有効または無効にします。
|
|
.Ic catch
|
|
とともには動作しません。
|
|
.El
|
|
.Ss FREEBSD で定義される環境問い合わせ
|
|
.Bl -tag -width Ds
|
|
.It arch-i386
|
|
アーキテクチャが IA32 の場合
|
|
.Ic 真
|
|
です。
|
|
.It arch-alpha
|
|
アーキテクチャが AXP の場合
|
|
.Ic 真
|
|
です。
|
|
.It FreeBSD_version
|
|
コンパイル時の
|
|
.Fx
|
|
バージョンです。
|
|
.It loader_version
|
|
.Nm
|
|
のバージョンです。
|
|
.El
|
|
.Ss システム文書
|
|
.Sh 関連ファイル
|
|
.Bl -tag -width /boot/defaults/loader.conf -compact
|
|
.It Pa /boot/loader
|
|
.Nm
|
|
自身。
|
|
.It Pa /boot/boot.4th
|
|
追加の
|
|
.Tn FICL
|
|
の初期化。
|
|
.It Pa /boot/boot.conf
|
|
.Nm
|
|
のブートストラップスクリプト。価値が低下しています。
|
|
.It Pa /boot/defaults/loader.conf
|
|
.It Pa /boot/loader.conf
|
|
.It Pa /boot/loader.conf.local
|
|
.Nm
|
|
設定ファイル。
|
|
.Xr loader.conf 5
|
|
で解説されています。
|
|
.It Pa /boot/loader.rc
|
|
.Nm
|
|
のブートストラップスクリプト。
|
|
.It Pa /boot/loader.help
|
|
.Ic help
|
|
がロードします。
|
|
ヘルプメッセージを含みます。
|
|
.El
|
|
.Sh 使用例
|
|
シングルユーザモードでブートします:
|
|
.Pp
|
|
.Dl boot -s
|
|
.Pp
|
|
カーネルのユーザ設定ファイルをロードします。
|
|
他の
|
|
.Ic load
|
|
コマンドを試みる前にカーネルをロードする必要があることに注意してください。
|
|
.Pp
|
|
.Bd -literal -offset indent
|
|
load kernel
|
|
load -t userconfig_script /boot/kernel.conf
|
|
.Ed
|
|
.Pp
|
|
カーネルと起動画面をロードし、5 秒以内に自動ブートします。
|
|
.Bd -literal -offset indent
|
|
load kernel
|
|
load splash_bmp
|
|
load -t splash_image_data /boot/chuckrulez.bmp
|
|
autoboot 5
|
|
.Ed
|
|
.Pp
|
|
ルートデバイスのディスクユニットを 2 に設定し、ブートします。
|
|
IDE ディスクが 2 台のシステムで、
|
|
2 台目の IDE が wd1 ではなく wd2 に固定されているシステムにおいて、
|
|
必要となるでしょう。
|
|
.Pp
|
|
.Bd -literal -offset indent -compact
|
|
set root_disk_unit=2
|
|
boot /kernel
|
|
.Ed
|
|
.Pp
|
|
次を参照してください:
|
|
.Bl -tag -width /usr/share/examples/bootforth/X
|
|
.It Pa /boot/loader.4th
|
|
追加の組み込み的な語について。
|
|
.It Pa /boot/support.4th
|
|
.Pa loader.conf
|
|
が処理する語について。
|
|
.It Pa /usr/share/examples/bootforth/
|
|
分類された使用例。
|
|
.El
|
|
.Sh エラー
|
|
次の値を
|
|
.Nm
|
|
は返します:
|
|
.Bl -tag -width XXXXX -offset indent
|
|
.It 100
|
|
組み込みコマンド処理において任意のタイプのエラーが発生しました。
|
|
.It -1
|
|
.Ic Abort
|
|
が実行されました。
|
|
.It -2
|
|
.Ic Abort"
|
|
が実行されました。
|
|
.It -56
|
|
.Ic Quit
|
|
が実行されました。
|
|
.It -256
|
|
インタプリトするテキストがありません。
|
|
.It -257
|
|
成功するためには更なるテキストが必要です -- 次の実行で終了します。
|
|
.It -258
|
|
.Ic Bye
|
|
が実行されました。
|
|
.It -259
|
|
未定義エラー。
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr libstand 3 ,
|
|
.Xr loader.conf 5 ,
|
|
.Xr tuning 7 ,
|
|
.Xr boot 8 ,
|
|
.Xr btxld 8
|
|
.Sh 規格
|
|
ANS Forth 互換性の観点では、loader は
|
|
.Bf Em
|
|
環境に制限がある ANS Forth System です。
|
|
Core Extensions 語集合からは、
|
|
.Ef
|
|
.Bf Li
|
|
.No .( ,
|
|
.No :noname ,
|
|
.No ?do ,
|
|
parse, pick, roll, refill, to, value, \e, false, true,
|
|
.No <> ,
|
|
.No 0<> ,
|
|
compile\&, , erase, nip, tuck, maker
|
|
.Ef
|
|
.Bf Em
|
|
を提供しています。
|
|
Exception Extensions 語集合を提供しています。
|
|
Locals Extensions 語集合を提供しています。
|
|
Memory-Allocation Extensions 語集合を提供しています。
|
|
Programming-Tools 拡張語集合からは
|
|
.Ef
|
|
.Bf Li
|
|
\&.s,
|
|
bye, forget, see, words,
|
|
\&[if],
|
|
\&[else],
|
|
.Li [then]
|
|
.Ef
|
|
.Bf Em
|
|
を提供しています。
|
|
Search-Order 拡張語集合を提供しています。
|
|
.Ef
|
|
.Sh 歴史
|
|
.Nm
|
|
が最初に登場したのは
|
|
.Fx 3.1
|
|
です。
|
|
.Sh 作者
|
|
.An -nosplit
|
|
.Nm
|
|
は
|
|
.An Michael Smith Aq msmith@FreeBSD.org
|
|
が記述しました。
|
|
.Pp
|
|
.Tn FICL
|
|
は
|
|
.An John Sadler Aq john_sadler@alum.mit.edu
|
|
が記述しました。
|
|
.Sh バグ
|
|
.Ic expect
|
|
と
|
|
.Ic accept
|
|
の語は、コンソールからではなく入力バッファから読み込みます。
|
|
後者については修正されますが、前者は修正されません。
|