LOADER(8) FreeBSD システム管理者マニュアル LOADER(8)
名称
loader − カーネルブートストラップの最終段階 |
解説
loader と呼ばれるプログラムは、 FreeBSD のカーネルブートストラップにおけ る、最終段です。 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 [prompt]]
ユーザが割り込まない場合には、指定した秒数の後にシステムのブート ストラップへ進みます。キーが押されて割り込まれるまで、カウントダ ウンプロンプトを表示し、ユーザに対してシステムがブートするところ であることを警告します。必要であれば、最初にカーネルがロードされ ます。デフォルトは 10 秒です。 bcachestat boot 警告: この組み込みコマンドの動作は、 loader.4th(8) がロードされる と、変ります echo heap help [topic [subtopic]] include file [file ...] load ls lsdev [−v] lsmod [−v] more file [file ...] pnpscan [−v] read reboot set variable show [variable] unload unset variable ? 組み込みの環境変数 環境変数の設定および設定解除は、 set と unset の組み込みコマンドを介して 行います。これらの値は、 show 組み込みコマンドを使用して対話的に検査でき ます。これらの値は、 組み込みパーザで説明する方法でもまたアクセス可能で す。 この環境変数は、システムブート後にシェルに継承されないことに注意してくだ さい。 数個の変数が loader により自動的に設定されます。他の変数は、 loader また はブート時のカーネル動作に影響し得ます。これらのうち値を要求するものがあ る一方、設定されるだけで動作を定義するものもあります。双方の組み込み変数 が下記に説明されています。 acpi_load autoboot_delay ‘‘NO’’ に設定すると、 /boot/loader.rc の処理の後に autoboot を 自動的には試みなくなります。しかし、明示的に autoboot を指定す ると、デフォルトの 10 秒の遅延の後に通常通り処理されます。 boot_askname boot_cdrom boot_ddb boot_gdb boot_multicons boot_serial boot_single boot_userconfig boot_verbose bootfile console currdev init_path interpret LINES module_path num_ide_disks prompt root_disk_unit rootdev 他の変数を使用することにより、カーネルの調整可能なパラメータをオーバライ ド可能です。次の調整可能な変数が使用可能です: hw.physmem hw.pci.enable_io_modes kern.maxusers kern.ipc.nmbclusters kern.ipc.nsfbufs kern.maxswzone kern.maxbcache machdep.disable_mtrrs net.inet.tcp.tcbhashsize vm.kmem_size 組み込みパーザ この特別なパーザは、解析したテキストに対して次のルールを適用します: 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 wid-set-super w@ w! x. empty cell- -rot FREEBSD 追加語 $ (--) % (--) .# fclose (fd --) fkey (fd -- char) fload (fd --) fopen (addr len mode -- fd) fread (fd addr len -- len’) heap? (-- cells) inb (port -- char) key (-- char) key? (-- flag) ms (u --) outb (port char --) seconds (-- u) tib> (-- addr len) trace! (flag --) FREEBSD で定義される環境問い合わせ arch-i386 arch-alpha FreeBSD_version loader_version システム文書 関連ファイル |
/boot/loader
loader 自身。 使用例 |
シングルユーザモードでブートします: |
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 /usr/share/examples/bootforth/ エラー |
次の値を loader は返します: |
100
組み込みコマンド処理において任意のタイプのエラーが発生しまし た。 -1 -2 -56 -256 -257 -258 -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〉 によって書かれました。 |
バグ
expect と accept の語は、コンソールからではなく入力バッファから読み込みま す。後者については修正されますが、前者は修正されません。 FreeBSD 10.0 October 1, 2004 FreeBSD 10.0 |