LOADER

Section: Maintenance Commands (8)
索引 jman

BSD mandoc
 

索引

名称

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

索引

解説

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

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

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

この時点で、 autoboot が試されていない場合でかつ autoboot_delay が ``NO'' (大文字小文字は区別しません) に設定されていない場合、 autoboot が試されます。 システムがこの時点まで到達した場合、 prompt が設定され、 は対話モードになります。  

索引

組み込みコマンド

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

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

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

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

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

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

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

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

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

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

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

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 を環境から取り除きます。

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

 

組み込みの環境変数

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

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

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

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

acpi_load
ACPI モジュールの自動ロードを無効にするには、これをアンセットします。 device.hints5 の hint.acpi.0.disabled も参照してください。
autoboot_delay
autoboot がブート前に待つ秒数です。 この変数が定義されていない場合、 autoboot はデフォルトの 10 秒になります。

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

boot_askname
カーネルブート時にルートデバイス名をユーザに尋ねるように、 カーネルに指示します。
boot_cdrom
ルートファイルシステムを CD-ROM からマウントすることを試みるように、 カーネルに指示します。
boot_ddb
ブート時に初期化に進むのではなく DDB デバッガを開始するように、 カーネルに指示します。
boot_gdb
gdb リモートモードを、カーネルデバッガのデフォルトとして選択します。
boot_multicons
ブートの初期にカーネルの複数コンソールサポートを有効にします。 動作中のシステムでは、コンソール構成は conscontrol(8) ユーティリティで操作できます。
boot_serial
内部コンソールがある場合でも、強制的にシリアルコンソールを使います。
boot_single
カーネルがマルチユーザスタートアップを開始することを防ぎ、 カーネルがデバイスプローブを完了したときにはシングルユーザモードになります。
boot_userconfig
カーネルブート時に カーネルの対話的なデバイス設定プログラムを実行するよう要求します。 現在は何もしません。
boot_verbose
この変数を設定すると、 ブートフェーズ中に追加のデバッグ情報をカーネルが表示します。
bootfile
セミコロンで区切った検索パスのリストであり、 ここからブート可能なカーネルを探します。 デフォルトは ``kernel '' です。
console
現在のコンソールを定義します。
currdev
デフォルトデバイスを選択します。 デバイスの文法は奇妙なものです。
init_path
カーネルが初期プロセスとして実行しようとすべきバイナリのリストを指定します。 最初にマッチしたバイナリが使用されます。 デフォルトリストは ``/sbin/init:/sbin/oinit:/sbin/init.bak:/stand/sysinstall '' です。
interpret
Forth の現在の状態がインタプリタの場合、 ``OK '' という値を持ちます。
LINES
画面上の行数を定義します。 ページャが使用します。
module_path
モジュールを検索するディレクトリのリストを設定します。 モジュール名は、load コマンドまたは依存関係により暗黙的に指定されます。 この変数のデフォルト値は ``/boot/kernel;/boot/modules '' です。
num_ide_disks
IDE ディスクの数を設定します。 これは、ブート時にルートディスクを見つけることに関する問題への対処です。 root_disk_unit により価値が低下しています。
prompt
のプロンプトの値です。 デフォルトは ``${interpret} '' です。 変数 prompt が設定解除されていれば、デフォルトプロンプトは `>' です。
root_disk_unit
ルートディスクのディスクユニット番号を検出するコードが混乱する場合、 この変数を設定することでユニット番号を強制可能です。 混乱するのは、例えば SCSI と IDE のディスクを両方持つ場合や、 IDE ディスクの並びに隙間がある場合 (プライマリスレーブが無い場合など) です。
rootdev
デフォルトでは、カーネルブート時にルートファイルシステムの設定には currdev が使用されます。 これは rootdev を明示的に設定することによりオーバライド可能です。

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

hw.physmem
システムが使用する物理メモリ量を制限します。 デフォルトでは大きさはバイトで指定しますが、 k , K , m , M , g G のサフィックスを使用し、 それぞれキロバイト、メガバイト、ギガバイトで指定可能です。 無効なサフィックスを使用すると、カーネルはこの変数を無視してしまいます。
hw.pci.enable_io_modes
BIOS がオフのままとしたり、デバイスドライバが正しく有効化しなかった PCI 資源を、有効化します。 このチューナブルのデフォルト値は ON (1) ですが、 ペリフェラルによっては問題となることがあります。
kern.maxusers
多くの静的に割り当てられるシステムテーブルの大きさを設定します。 このチューナブルに対して適切な値をどのように選択するかについては、 tuning(7) を参照してください。 このチューナブルが設定されている場合、 カーネルがコンパイルされたときの設定ファイルで宣言された値は、 置き換えられます。
kern.ipc.nmbclusters
割り当てられる mbuf クラスタ数を設定します。 カーネルコンパイル時に決定されたデフォルト値より小さくは、設定できません。 NMBCLUSTERS を変更します。
kern.ipc.nsfbufs
割り当てるべき sendfile(2) バッファ数を設定します。 NSFBUFS に優先します。
kern.maxswzone
スワップメタ情報を保持するための KVM 量を制限します。 これは、システムがサポート可能なスワップ量に直接影響を与えます。 この値は、KVA 空間のバイト数で指定され、デフォルトは約 70MB です。 この値を減らし過ぎて、 実際に構成されるスワップが カーネルがサポートするスワップの 1/2 を越えてしまわぬよう、 注意してください。 デフォルトの 70MB は、 カーネルが最大 (約) 14 GB のスワップを構成可能とします。 バッファキャッシュや NMBCLUSTERS といった 他の資源用の KVM 予約を大幅に増やす場合のみ、 本パラメータを調整してみてください。 VM_SWZONE_SIZE_MAX を変更します。
kern.maxbcache
バッファキャッシュ用に予約される KVM の量を制限します。 バイト数で指定します。 デフォルトの最大値は 200 MB です。 このパラメータは、大規模構成において、 バッファキャッシュが多くの KVM を消費してしまうことを避けるために使用します。 スワップゾーンや NMBCLUSTERS といった 他の資源用の KVM 予約を大幅に増やす場合のみ、 本パラメータを調整してみてください。 NBUF パラメータがこの制限に優先することに注意してください。 VM_BCACHE_SIZE_MAX を変更します。
machdep.disable_mtrrs
i686 MTRR を無効化します (x86 のみ)。
net.inet.tcp.tcbhashsize
TCBHASHSIZE のコンパイル時の設定値をオーバライドするか、 デフォルトの 512 にプリセットします。 2 のべき乗である必要があります。
vm.kmem_size
カーネルメモリの大きさ (バイト) を設定します。 カーネルコンパイル時に決定された値に、優先します。 VM_KMEM_SIZE を変更します。

 

組み込みパーザ

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

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

  1. すべてのバックスラッシュ文字は前処理されます。

  2. エスケープされていないクォートまたはダブルクォートの間のすべての文字列は、 後続するステップにおいて単一の語として扱われます。
  3. $VARIABLE または ${VARIABLE} は、環境変数 VARIABLE の値に変換されます。
  4. 空白で区切られた複数の引数を、呼び出した組み込みコマンドへ渡します。 空白は \\ を使用することによりエスケープ可能です。

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

組み込み語と FORTH

すべての組み込み語は、状態を意識する即時実行語です。 インタプリトされると、これらは前述の通りに振舞います。 一方コンパイルされると、 引数をコマンドラインからではなくスタックから取り出します。

コンパイルされると、 実行時に組み込み語は、スタック上で次のパラメータを見付けられると期待します: ここで addrX lenX は文字列であり、組み込み語の引数として解釈されるコマンドラインを構成します。 内部的には、おのおのの間に空白を狭んで、 これらの文字列は 1 から N まで結合されます。

引数が渡されない場合、組み込み語が引数を受け付けない場合であっても、 単一の 0 を渡す 必要 があります。

この動作には利点がありますが、それ自身にはトレードオフがあります。 組み込み語の実行トークンが ( または ['] を通して) 得られて、 catch または execute に渡された場合、組み込み語の動作は Bf Em catch または execute が実行されるときの システムの状態に依存します ! Ef これは、 例外を扱いたいまたは扱う必要があるプログラムにとっては、特に悩ましいものです。 この場合、代理 (proxy) を使用することをお勧めします。 例えば次のようにします:

: (boot) boot
 

索引

FICL

FICL は C で記述された Forth インタプリタであり、 C の関数などとして呼び出し可能な forth 仮想マシンライブラリの形式です。

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

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

FICL 追加語

.env
.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 追加語

$ (--)
最初に入力バッファを表示した後、入力バッファの残りを評価します。
% (--)
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 の場合 です。
arch-alpha
アーキテクチャが AXP の場合 です。
FreeBSD_version
コンパイル時の Fx バージョンです。
loader_version
のバージョンです。

 

システム文書

 

索引

関連ファイル

/boot/loader
自身。
/boot/boot.4th
追加の FICL の初期化。
/boot/boot.conf
のブートストラップスクリプト。 価値が低下しています。
/boot/defaults/loader.conf
/boot/loader.conf
/boot/loader.conf.local
設定ファイル。 loader.conf5 で解説されています。
/boot/loader.rc
のブートストラップスクリプト。
/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 が wd1 ではなく wd2 に固定されているシステムにおいて、 必要となるでしょう。

set root_disk_unit=2
boot /kernel

次を参照してください:

/boot/loader.4th
追加の組み込み的な語について。
/boot/support.4th
loader.conf が処理する語について。
/usr/share/examples/bootforth/
分類された使用例。

 

索引

エラー

次の値を は返します:

100
組み込みコマンド処理において任意のタイプのエラーが発生しました。
-1
Abort が実行されました。
-2
Abort が実行されました。
-56
Quit が実行されました。
-256
インタプリトするテキストがありません。
-257
成功するためには更なるテキストが必要です -- 次の実行で終了します。
-258
Bye が実行されました。
-259
未定義エラー。

 

索引

関連項目

libstand(3), loader.conf5, tuning(7), boot(8), btxld(8)  

索引

規格

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

索引

歴史

は Fx 3.1 ではじめて登場しました。  

索引

作者

An -nosplit は An Michael Smith Aq msmith@FreeBSD.org によって書かれました。

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

索引

バグ

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


 

索引

Index

名称
解説
組み込みコマンド
組み込みの環境変数
組み込みパーザ
組み込み語と FORTH
FICL
FICL 追加語
FREEBSD 追加語
FREEBSD で定義される環境問い合わせ
システム文書
関連ファイル
使用例
エラー
関連項目
規格
歴史
作者
バグ

jman



Time: 07:07:39 GMT, January 12, 2009