EN JA
LOADER(8)
LOADER(8) FreeBSD System Manager's Manual LOADER(8)

名称

loaderカーネルブートストラップの最終段階

解説

loader と呼ばれるプログラムは、 FreeBSD のカーネルブートストラップにおける、最終段です。 IA32 (i386) アーキテクチャでは、これは、 BTX クライアントです。 libstand(3) に静的にリンクされ、通常は、ディレクトリ /boot に置かれます。

また、作業自動化、事前設定、回復処理の補助に使用可能な、スクリプト言語を提供します。このスクリプト言語は、おおまかに 2 つの主たる部分に分類されます。小さな方は、通常のユーザが直接使用するようデザインされたコマンドの集合で、歴史的な事情により「組み込みコマンド」と呼ばれます。これらのコマンドを提供した背景には、主としてユーザの使い勝手を改善する目的があります。大きな部品は、 ANS Forth 互換の Forth インタプリタであり、 John Sadler の FICL をベースにしています。

初期化において、 loader は、コンソールを検出して console 変数を設定します。直前のブートステージにシリアルコンソールを使用した場合には、この変数をシリアルコンソール (“ comconsole”) に設定します。複数のコンソールが選択されるなら、それらは、空白によって区切られてリストされます。その後、デバイスをプローブし、 currdevloaddev を設定し、 LINES を 24 に設定します。次に FICL が初期化され、組み込み語が語彙に追加され、存在する場合には、 /boot/boot.4th が処理されます。このファイルが読み込まれるまで、ディスクの交換はできません。 loader が FICL とともに使用する内部インタプリタは、 interpret に設定されます。これは、 FICL のデフォルトです。この後、使用可能な場合 /boot/loader.rc が処理され、そうでない場合には、歴史的な理由で /boot/boot.conf が読み込まれます。これらのファイルは、 include コマンドを介して処理されます。このコマンドは、処理前にファイル内容すべてをメモリに読み込みますので、ディスク交換が可能となります。

この時点で、 autoboot が試されていない場合でかつ autoboot_delay が“ NO” (大文字小文字は、区別しません) に設定されていない場合、 autoboot が試されます。システムがこの時点まで到達した場合、 prompt が設定され、 loader は、対話モードになります。歴史的に autoboot_delay が“ 0”に設定されるときでさえ、カーネルとモジュールがロードされている間にコンソールのあるキーを押すことによって、ユーザは、autoboot プロセスを割り込みすることができることに注意してください。ある場合には、そのようなふるまいが望ましくないかもしれません、それを防ぐには、 autoboot_delay に“ -1”を設定し、この場合に、 loader は、 autoboot が失敗した場合にだけ、対話モードを保証します。

組み込みコマンド

loader の組み込みコマンドは、パラメータをコマンドラインから受け取ります。現在、スクリプトからの呼び出し方法は、文字列上で evaluate を使用することだけです。エラー状態が発生すると、 ANS Forth 例外操作語でインタセプト可能な例外が生成されます。インタセプトされない場合、エラーメッセージが表示され、インタプリタの状態がリセットされます。これにより、スタックが空になりインタプリタのモードが元に戻ります。

使用可能な組み込みコマンドは、次の通りです:

autoboot [ seconds [ prompt]]
ユーザが割り込まない場合には、指定した秒数の後にシステムのブートストラップへ進みます。キーが押されて割り込まれるまで、カウントダウンプロンプトを表示し、ユーザに対してシステムがブートするところであることを警告します。必要であれば、最初にカーネルがロードされます。デフォルトは、10 秒です。

bcachestat
ディスクキャッシュの使用状況を表示します。デバッグのためだけにあります。

boot
boot kernelname [ ...]
boot -flag ...
システムのブートストラップへすぐに進み、必要であればカーネルをロードします。すべてのフラグまたは引数は、カーネルに渡されますが、カーネル名が指定された場合、これらは、カーネル名の後にある必要があります。

警告: この組み込みコマンドの動作は、 loader.4th(8) がロードされると、変ります

echo [ -n][ <message>]
画面にテキストを表示します。 -n を指定しない場合、改行が表示されます。

heap
メモリ使用状況が表示されます。デバッグ目的のためだけにあります。

help [ topic [ subtopic]]
ヘルプメッセージを /boot/loader.help から読み込んで表示します。特殊トピック index は、使用可能なトピックを表示します。

include file [ file ...]
スクリプトファイルを処理します。各ファイルは、順番がまわって来たところで完全にメモリに読み込まれ、各行がコマンドラインインタプリタに渡されます。インタプリタがエラーを返すと、他のファイルは、読み込まずに include コマンドは、即時に異常終了し、自身にエラーを返します ( 「エラー」 参照)。

load [ -t type] file ...
カーネル、カーネルローダブルモジュール (kld)、内容を問わず type とタグ付けされているファイルのいずれかをロードします。カーネルとモジュールは、a.out または FLF のどちらの形式であってもかまいません。ロードされるファイルの後で渡される引数は、そのファイルに対する引数として渡されます。現在のところ、これは、カーネルに対しては動作しないことに注意してください。

load_geli [ -n keyno] prov file
与えられたプロバイダ名のための geli(8) 暗号化キーファイルをロードします。キーインデックスを keyno を通して指定することできるか、または 0 をデフォルトとします。

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
ローダの環境変数を設定します。

show [ variable]
指定した変数の値を表示します。 variable を指定しないと、すべての変数とその値を表示します。

unload
全モジュールをメモリから取り除きます。

unset variable
variable を環境から取り除きます。

?
使用可能なコマンドの一覧を表示します。

組み込みの環境変数

loader は、実際のところ、異なった 2 種類の‘環境’を持ちます。それは、 ANS Forth の 環境問い合わせ と、別の空間であり組み込みコマンドが使用する環境変数です。後者は、Forth の語としては直接使用できません。この節で説明するのは、後者です。

環境変数の設定および設定解除は、 setunset の組み込みコマンドを介して行います。これらの値は、 show 組み込みコマンドを使用して対話的に検査できます。これらの値は、 「組み込みパーザ」 で説明する方法でもまたアクセス可能です。

この環境変数は、システムブート後にシェルに継承されないことに注意してください。

数個の変数が loader により自動的に設定されます。他の変数は、 loader またはブート時のカーネル動作に影響し得ます。これらのうち値を要求するものがある一方、設定されるだけで動作を定義するものもあります。双方の組み込み変数が下記に説明されています。

autoboot_delay
autoboot がブート前に待つ秒数です。この変数が定義されていない場合、 autoboot は、デフォルトの 10 秒になります。

NO”に設定すると、 /boot/loader.rc の処理の後に autoboot を自動的には試みなくなります。しかし、明示的に autoboot を指定すると、デフォルトの 10 秒の遅延の後に通常通り処理されます。

0”に設定されるなら遅延は、挿入されませんが、ユーザは、 autoboot プロセスを割り込み、カーネルとモジュールがロードされている間にコンソールから何らかのキーを押すことによって、対話モードに入ることができます。

-1”に設定されるなら遅延は、挿入されませんが、 loader は、 autoboot がある理由で失敗した場合にだけ、対話モードを保証します。

boot_askname
カーネルブート時にルートデバイス名をユーザに尋ねるように、カーネルに指示します。
boot_cdrom
ルートファイルシステムを CD-ROM からマウントすることを試みるように、カーネルに指示します。
boot_ddb
ブート時に初期化に進むのではなく DDB デバッガを開始するように、カーネルに指示します。
boot_dfltroot
静的にコンパイルされたルートファイルシステムをマウントするようにカーネルに指示します。
boot_gdb
gdb リモートモードを、カーネルデバッガのデフォルトとして選択します。
boot_multicons
ブートの初期にカーネルの複数コンソールサポートを有効にします。動作中のシステムでは、コンソール構成は、 conscontrol(8) ユーティリティで操作できます。
boot_mute
コンソールがミュート (音を消) されるとき、すべてのコンソール出力は、抑制されます。実行中のシステムでは、コンソールのミュート状態は、 conscontrol(8) ユーティリティによって操作することができます。
boot_pause
デバイスをプローブ (検出) している間、各行は、印刷 (出力) された後に一時停止します。
boot_serial
内部コンソールがある場合でも、強制的にシリアルコンソールを使います。
boot_single
カーネルがマルチユーザスタートアップを開始することを防ぎ、カーネルがデバイスプローブを完了したときには、シングルユーザモードになります。
boot_verbose
この変数を設定すると、ブートフェーズ中に追加のデバッグ情報をカーネルが表示します。
bootfile
セミコロンで区切った検索パスのリストであり、ここからブート可能なカーネルを探します。デフォルトは、“ kernel”です。
comconsole_speed
シリアルコンソールの速度を定義します (i386 と amd64 のみ)。以前のブートステージがシリアルコンソールが使用中であることを示しているなら、この変数は、コンソールのシリアルポートの現在の速度に初期化されます。そうでなければ、 loader がコンパイルされたとき、 BOOT_COMCONSOLE_SPEED 変数を使用して上書きされないなら、9600 に設定されます。 comconsole_speed 変数の変更は、直ちに有効となります。
comconsole_port
コンソール UART にアクセスするために使用される基本 I/O ポートを定義します (i386 と amd64 のみ)。変数が設定されていないなら、 loader の編集の間に BOOT_COMCONSOLE_PORT 変数によって上書きされないなら、想定する値は、PC ポート COM1 に対応する 0x3F8 です。 comconsole_port 変数の設定は、コンソールの位置のためのカーネルへのヒントを提供するために自動的に hw.uart.console 環境変数を設定します。ローダコンソールは、変数 comconsole_port が設定された直後に、変更されます。
comconsole_pcidev
シリアルコンソール UART として使用される、'単純な通信' クラスの PCI デバイスの位置を定義します (i386 と amd64 のみ)。変数の構文は、 'bus:device:function[:bar]' で、ここで、すべてのメンバは、16 進数の値を示す 0x 接頭辞も指定できますが、数値でなければなりません。 bar メンバは、省略可能で、もし省略されるなら、0x10 と仮定されます。 bar は、デコードされた I/O 空間でなければなりません。変数 comconsole_pcidev の設定は、自動的に変数 comconsole_port を選択された bar の基本とヒント hw.uart.console に設定します。ローダコンソールは、変数 comconsole_pcidev が設定された直後に変更されます。
console
現在のコンソールか (複数の) コンソールを定義します。複数のコンソールが指定されるかもしれません。その場合には、最初のリストされたコンソールは、ユーザランド出力のためのデフォルトのコンソールになります (例えば、 init(8) から)。
currdev
デフォルトデバイスを選択します。デバイスの文法は、奇妙なものです。
init_chroot
ルートファイルシステムの有効なディレクトリに設定されるなら、 init(8) は、そのディレクトリに chroot(2) 操作を実行し、それを新しいルートディレクトリにします。シングルユーザモードまたはマルチユーザモードに入る前に (しかし、有効であるなら、 init_script を実行した後)、それは、起こります。
init_path
カーネルが初期プロセスとして実行しようとすべきバイナリのリストを指定します。最初にマッチしたバイナリが使用されます。デフォルトリストは、“ /sbin/init:/sbin/oinit:/sbin/init.bak:/rescue/init”です。
init_script
ルートファイルシステムの有効なファイル名に設定されるなら、他の何かを行う前に、本当に最初のアクションとして、そのスクリプトを実行するように init(8) に指示します。シグナル操作と終了コードの解釈は、 /etc/rc スクリプトを実行するのと同様です。特に、シングルユーザ操作は、スクリプトが 0 以外の終了コードで終わるか、または SIGTERM が init(8) プロセス (PID 1) に配信されるなら、実行されます。
init_shell
様々なシェルスクリプトを実行するために使用されるシェルバイナリを定義します。デフォルトは、“ /bin/sh”です。設定されるなら /etc/rc/etc/rc.shutdown スクリプトと同様に init_script を実行するために使用されます。対応する kenv(2) 変数の値は、 init(8) がシェルスクリプトを呼び出すときは、常に評価されるので、 kenv(1) ユーティリティを使用することで、後にそれを変更することができます。特に、デフォルトでないシェルが init_script を実行するために使用されるなら、 /etc/rc スクリプトは、標準のシェル /bin/sh で実行することができるように、スクリプトがデフォルトに戻る init_shell の値をリセットすることがあるのは、望ましいかもしれません。
interpret
Forth の現在の状態がインタプリタの場合、“ OK”という値を持ちます。
LINES
画面上の行数を定義します。ページャが使用します。
module_path
モジュールを検索するディレクトリのリストを設定します。モジュール名は、load コマンドまたは依存関係により暗黙的に指定されます。この変数のデフォルト値は、“ /boot/kernel;/boot/modules”です。
num_ide_disks
IDE ディスクの数を設定します。これは、ブート時にルートディスクを見つけることに関する問題への対処です。 root_disk_unit により価値が低下しています。
prompt
loader のプロンプトの値です。デフォルトは、“ ${interpret}”です。変数 prompt が設定解除されていれば、デフォルトプロンプトは、‘ >’です。
root_disk_unit
ルートディスクのディスクユニット番号を検出するコードが混乱する場合、この変数を設定することでユニット番号を強制可能です。混乱するのは、例えば SCSI と IDE のディスクを両方持つ場合や、 IDE ディスクの並びに隙間がある場合 (プライマリスレーブが無い場合など) です。
rootdev
デフォルトでは、カーネルブート時にルートファイルシステムの設定には、 currdev が使用されます。これは、 rootdev を明示的に設定することによりオーバライド可能です。

他の変数を使用することにより、カーネルの調整可能なパラメータをオーバライド可能です。次の調整可能な変数が使用可能です:

hw.physmem
システムが使用する物理メモリ量を制限します。デフォルトでは、大きさは、バイトで指定しますが、 k, K, m, M, g, G のサフィックスを使用し、それぞれキロバイト、メガバイト、ギガバイトで指定可能です。無効なサフィックスを使用すると、カーネルは、この変数を無視してしまいます。
hw.pci.host_start_mem, hw.acpi.host_start_mem
他に強制するものが無いとき、メモリの開始アドレスを制限します。デフォルトは、0x80000000 で、少なくともメモリのサイズを設定し、他のリソースと衝突しないようにすべきです。通常、PCI ブリッジは、メモリ開始アドレスを強制するので、 PCI ブリッジが無いシステムでのみこの変数を設定する必要があります (そして、この変数は、ブリッジがこのアドレスを強制しないときのみ使用されます)。
hw.pci.enable_io_modes
BIOS がオフのままとしたり、デバイスドライバが正しく有効化しなかった PCI リソースを、有効化します。この調整変数のデフォルト値は、ON (1) ですが、ペリフェラルによっては問題となることがあります。
kern.maxusers
多くの静的に割り付けられるシステムテーブルの大きさを設定します。この調整変数に対して適切な値をどのように選択するかについては、 tuning(7) を参照してください。この調整変数が設定されている場合、カーネルがコンパイルされたときの設定ファイルで宣言された値は、置き換えられます。
kern.ipc.nmbclusters
割り付けられる mbuf クラスタ数を設定します。カーネルコンパイル時に決定されたデフォルト値より小さくは、設定できません。
kern.ipc.nsfbufs
割り付けるべき sendfile(2) バッファ数を設定します。 NSFBUFS に優先します。すべてのアーキテクチャがそのようなバッファを使用するというわけではありません。詳細に関して sendfile(2) を参照してください。
kern.maxswzone
1MB のメタデータごとのほぼ 200MB のスワップ空間の割合で、システムがサポートすることができるスワップの最大の量を直接管理する、スワップのメタデータを保持するために使用される KVM の量を制限します。この値は、KVA 空間のバイト単位で指定されます。値が提供されないなら、システムは、システムに存在する物理的なメモリの量の 8 倍に相当するスワップの量を扱うために十分なメモリを割り当てます。

理論的な制限に到達する前に、システムが空間を使い果たすかもしれないことを意味する、スワップのメタデータを断片化するかもしれないことに注意してください。したがって、理論的な最大のほぼ半分より多くのスワップを設定しないように注意するべきです。

スワップのメタデータのための空間を使い果たすことは、回復不能な状態のシステムとなるかもしれません。したがって、バッファキャッシュまたは kern.ipc.nmbclusters のような他のリソースのための KVM 予約を大幅に拡張する必要があるなら、単に、このパラメータを変更するべきです。カーネルオプション VM_SWZONE_SIZE_MAX を修正します。

kern.maxbcache
バッファキャッシュ用に予約される KVM の量を制限します。バイト数で指定します。デフォルトの最大値は、i386 で 200 MB、 amd64 と sparc64 で、400MB です。このパラメータは、大規模構成において、バッファキャッシュが多くの KVM を消費してしまうことを避けるために使用します。スワップゾーンや kern.ipc.nmbclusters といった他のリソース用の KVM 予約を大幅に増やす場合のみ、本パラメータを調整してみてください。 NBUF パラメータがこの制限に優先することに注意してください。 VM_BCACHE_SIZE_MAX を変更します。
kern.msgbufsize
カーネルメッセージバッファのサイズを設定します。バッファを調べるか、またはそれをファイルにダンプする間に大量のトレースデータが集められる必要がないなら、64KB のデフォルトの制限で通常十分です。カーネルオプション MSGBUF_SIZE に優先します。
machdep.disable_mtrrs
i686 MTRR を無効化します (x86 のみ)。
net.inet.tcp.tcbhashsize
TCBHASHSIZE のコンパイル時の設定値をオーバライドするか、デフォルトの 512 にプリセットします。 2 のべき乗である必要があります。
vm.kmem_size
カーネルメモリの大きさ (バイト) を設定します。カーネルコンパイル時に決定された値に、優先します。 VM_KMEM_SIZE を変更します。
vm.kmem_size_min
vm.kmem_size_max
カーネルによって自動的に割り付けられるカーネルメモリの (それぞれ) 最小と最大の量を設定します。カーネルがコンパイルされたとき、これらは、決定された値を上書きします。 VM_KMEM_SIZE_MINVM_KMEM_SIZE_MAX を変更します。

組み込みパーザ

組み込みコマンドが実行されるとき、行の残りは、コマンドが引数として受け取り、通常の Forth コマンドには、使用されない特別なパーザがコマンドを処理します。

この特別なパーザは、解析したテキストに対して次のルールを適用します:

  1. すべてのバックスラッシュ文字は、前処理されます。
    • \b , \f , \r , \n , \t は、C で扱われるように処理されます。
    • \s は、空白文字に変換されます。
    • \v は、 ASCII の 11 に変換されます。
    • \z は、単にスキップされます。“\0xf\z\0xf”のように使用すると便利です。
    • \0xN と\0xNN は、16 進数の N と NN に変換されます。
    • \NNN は、8 進数 NNN の ASCII 文字に変換されます。
    • \" , \' , \$ は、これらの文字をエスケープし、後述するステップ 2 における特殊な扱いをされないようにします。
    • \\は、単一の\に変換されます。
    • 他の場合、バックスラッシュは、単に取り除かれます。
  2. エスケープされていないクォートまたはダブルクォートの間のすべての文字列は、後続するステップにおいて単一の語として扱われます。
  3. $VARIABLE または ${VARIABLE} は、環境変数 VARIABLE の値に変換されます。
  4. 空白で区切られた複数の引数を、呼び出した組み込みコマンドへ渡します。空白は、\\を使用することによりエスケープ可能です。

解析ルールには、例外があり、これは、 「組み込み語と FORTH」 で説明します。

組み込み語と 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 の関数などとして呼び出し可能な forth 仮想マシンライブラリの形式です。

loader では、対話的に読み込まれた各行は、 FICL に与えられます。 FICL は、組み込み語を実行するために loader を呼び戻します。組み込みの include もまた、1 度に 1 行ずつを FICL へ与えます。

FICL へ使用可能な語は、4 グループへ分類可能です。それは、 ANS Forth 標準語、追加の FICL 語、追加の FreeBSD 語、そして組み込みコマンドです。最後のものは、既に説明しました。 ANS Forth 標準語は、 「規格」 の節に列挙しています。別の 2 グループの語については、以降の小節において説明します。

FICL 追加語

.env
.ver
-roll
2constant
>name
body>
compare
これは、「文字列」単語セットの 比較 です。
compile-only
endif
forget-wid
parse-word
sliteral
これは、「文字列」単語セットの sliteral です。
wid-set-super
w@
w!
x.
empty
cell-
-rot

FREEBSD 追加語

$ (--)
最初に入力バッファを表示した後、入力バッファの残りを評価します。
% (--)
catch 例外ガード下の、入力バッファの残りを評価します。
.#
. と同様に動作しますが、後続の空白を表示しません。
fclose ( fd --)
ファイルをクローズします。
fkey ( fd -- char)
ファイルから 1 文字読み込みます。
fload ( fd --)
ファイル fd を処理します。
fopen ( addr len mode -- fd)
ファイルをオープンします。ファイル記述子を返します。失敗時には、-1 を返します。 mode パラメータは、ファイルオープンの目的が読み込み用、書き込み用、両用のいずれであるかを選択します。定数 O_RDONLY, O_WRONLY, O_RDWR/boot/support.4th で定義され、それぞれ読み込み専用、書き込み専用、読み書きを示します。
fread ( fd addr len -- len')
ファイル fd から len バイトを、バッファ addr へ読み込もうとします。実際に読み込んだバイト数を返します。エラー時またはファイルの終了の場合には、-1 を返します。
heap? (-- cells)
ディレクトリヒープ中に残された空間を、セル数の単位で返します。これは、動的なメモリ割り付けの意味で使われるヒープとは無関係です。
inb ( port -- char)
ポートからバイトを読み込みます。
key (-- char)
コンソールから 1 文字読み込みます。
key? (-- flag)
コンソールから読み込み可能な文字がある場合、 を返します。
ms ( u --)
u マイクロ秒待ちます。
outb ( port char --)
ポートへバイトを書き込みます。
seconds (-- u)
深夜 0 時からの秒数を返します。
tib> (-- addr len)
入力バッファの残りを、スタック上の文字列として返します。
trace! ( flag --)
トレースを有効または無効にします。 catch とともには動作しません。

FREEBSD で定義される環境問い合わせ

arch-i386
アーキテクチャが IA32 の場合 です。
FreeBSD_version
コンパイル時の FreeBSD バージョンです。
loader_version
loader のバージョンです。

システム文書

関連ファイル

/boot/loader
loader 自身。
/boot/boot.4th
追加の FICL の初期化。
/boot/boot.conf
loader のブートストラップスクリプト。価値が低下しています。
/boot/defaults/loader.conf
/boot/loader.conf
/boot/loader.conf.local
loader 設定ファイル。 loader.conf(5) で解説されています。
/boot/loader.rc
loader のブートストラップスクリプト。
/boot/loader.help
help がロードします。ヘルプメッセージを含みます。

使用例

シングルユーザモードでブートします:

boot -s

カーネルと起動画面をロードし、5 秒以内に自動ブートします。他の load コマンドを試みる前にカーネルをロードする必要があることに注意してください。

load kernel 
load splash_bmp 
load -t splash_image_data /boot/chuckrulez.bmp 
autoboot 5

ルートデバイスのディスクユニットを 2 に設定し、ブートします。 IDE ディスクが 2 台のシステムで、 2 台目の IDE が ada1 の代わりに ada2 に固定されているシステムにおいて、必要となるでしょう。

set root_disk_unit=2 
boot /boot/kernel/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
未定義エラー。

規格

ANS Forth 互換性の観点では、loader は、
環境に制限がある ANS Forth System です。 Core Extensions 語集合からは、
.(, :noname, ?do, parse, pick, roll, refill, to, value, \, false, true, <>, 0<>, compile, , erase, nip, tuck, marker
を提供しています。 Exception Extensions 語集合を提供しています。 Locals Extensions 語集合を提供しています。 Memory-Allocation Extensions 語集合を提供しています。 Programming-Tools 拡張語集合からは、
.s, bye, forget, see, words, [if], [else],
[then]
を提供しています。 Search-Order 拡張語集合を提供しています。

歴史

loader は、 FreeBSD 3.1 ではじめて登場しました。

作者

loader は、 Michael Smith <msmith@FreeBSD.org>によって書かれました。

FICL は、 John Sadler <john_sadler@alum.mit.edu>によって書かれました。

バグ

expectaccept の語は、コンソールからではなく入力バッファから読み込みます。後者については、修正されますが、前者は、修正されません。
October 1, 2013 FreeBSD