日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
LOADER.EFI(8) FreeBSD システム管理者マニュアル LOADER.EFI(8) 名称 loader.efi -- UEFI カーネルローダ 解説 UEFI システムで、loader.efi は、カーネルをロードします。 boot1.efi(8) は、loader.efi が UFS または ZFS ファイルシステム内に置かれ ているとき、ロードするために使用されます。代りに、efibootmgr(8) で設定さ れているとき、または uefi(8) で説明されているようにデフォルトのブートプロ グラムとして直接置かれているとき、loader.efi は、直接使用されます。システ ムが、bsdinstall(8) を使用して構築されるtろき、loader.efi は、直接使用さ れます。 コンソールの考慮事項 EFI BIOS は、一般的なコンソールを提供しています。loader.efi で、これは、 console 変数を使用して ``efi'' を指定することによって選択されます。 loader.efi は、``efi'' コンソールが何を指しているかを推測するために 8be4df61-93ca-11d2-aa0d-00e098032b8c-ConOut UEFI 環境変数を調べます。 loader.efi は、ConOut によって指定されたすべての位置にプロンプトとメ ニューを出力します。しかしながら、複数のコンソールが存在するとき、FreeBSD カーネルに制限があります。カーネルは、設定されたすべてのコンソールに出力 します。プライマリコンソールのみは、rc(8) システムからログメッセージを取 得し、geli(8) パスワードのようなプロンプトを表示します。loader.efi が最初 にビデオデバイスを見つけるなら、loader.efi は、プライマリとしてビデオコン ソールを使用するようにカーネルに伝えます。同様に、シリアルデバイスが ConOut リストの最初にあるなら、シリアルポートは、プライマリコンソールにな ります。 ConOut 変数がないなら、リアルとビデオの両方が試行されます。loader.efi は、ビデオのために ``efi'' (動作するか、または動作しないかもしれない) コ ンソールを使用し、デフォルトのボーレートで COM1 のシリアルのために ``comconsole'' を使用します。カーネルは、UEFI グラフィックデバイスが検出 されるなら、ビデオコンソールをプライマリとしてデュアルコンソールを使用 し、そうでなければ、シリアルコンソールをプライマリとして使用します。 x86 プラットフォームで、EFI BIOS がサポートしていないとき、ローダの出力を シリアルポートにリダイレクトしたいなら、または EFI BIOS が出力をリダイレ クトしないシリアルポートであるなら、console を ``comconsole'' に設定しま す。デフォルトのポートは、0x3f8 の I/O アドレスがある、COM1 です。これを 異なるポートアドレスに設定するために comconsole_port が使用されます。 comconsole_speed は、シリアルポート (デフォルトは、9600 です) の設定に使 用されます。console を ``efi,comconsole'' に設定するなら、EFI コンソール とシリアルポートの両方に出力が得られます。EFI BIOS がすでにシリアルポート にリダイレクトされているので、これによって文字数が 2 倍になるなら、 console を ``efi'' に設定します。 EFI BIOS がシリアルポートをリダイレクトするなら、使用するアドレスをカーネ ルに伝える必要があります。EFI は、シリアルポートを識別するために、ACPI の UID を使用しますが、loader.efi は、ACPI パーサがないので、それを I/O ポー トに変換することができません。FreeBSD カーネルは、ACPI リソースをデコード できる前に、コンソールを初期化します。FreeBSD カーネルは、シリアルコン ソールを設定するために hw.uart.console 変数を見つかります。その形式は、 uart(4) に記述されているべきですが、記述されていません。適切なポートアド レスで ``io:0x3f8,br:115200'' に設定します。PCI またはメモリにマップされ たポートは、このマニュアルページの範囲を超えています。 シリアルポートは、IBM PC 互換システムで、次のように割り当てられます: Windows 名 I/O ポートアドレス 代表的な FreeBSD デバイス COM1 0x3f8 /dev/uart0 COM2 0x2f8 /dev/uart1 COM3 0x3e8 /dev/uart2 COM4 0x2e8 /dev/uart3 しかしながら、COM3 と COM4 は、異なります。 プライマリコンソール プライマリコンソールは、ブートフラグを使用して設定されます。これらのコマ ンド行の引数は、カーネルのために対応するフラグを設定します。これらのフラ グは、ローダ環境変数を ``yes'' または ``no'' に設定することによって制御す ることができます。ブートフラグは、コマンド行で boot コマンドに設定されま す。カーネル内で、RB_ フラグは、振る舞いを制御するために使用され、アーキ テクチャに特有の方法で、この文書でカバーされていない振る舞いを発見を手助 けするために含まれています。 ブートフラグ ローダ変数 カーネル RB_ フラグ -a boot_askme RB_ASKNAME -c boot_cdrom RB_CDROM -d boot_ddb RB_KDB -r boot_dfltroot RB_DFLTROOT -D boot_multiple RB_MULTIPLE -m boot_mute RB_MUTE -g boot_gdb RB_GDB -h boot_serial RB_SERIAL -p boot_pause RB_PAUSE -P boot_probe RB_PROBE -s boot_single RB_SINGLE -v boot_verbose RB_VERBOSE そして、次のフラグは、プライマリコンソールを決定します: フラグ Kernel フラグ Kernel コンソール プライマリコンソール none 0 Video Video -h RB_SERIAL Serial Serial -D RB_MULTIPLE Serial, Video Video -Dh RB_SERIAL | RB_MULTIPLE Serial, Video Serial loader.efi は、キーボードが接続されているなら、ビデオコンソールを使用し、 そうでなければ、シリアルコンソールを使用するプローブ -P 機能を実装してい ません。 ステージングスロップ (staging slop) カーネルは、メモリを確認するためにファームウェアメモリマップテーブルを解 析しなければなりません。これを行うためにメモリを割り付けなければならない ので、loader.efi は、カーネルがメモリアロケータをブートストラップするため に (カーネル、モジュール、とメタデータ) をロードするすべての後に、 ``slop'' と呼ばれる追加のメモリが利用可能であることを保証します。 デフォルトで、amd64 は、8MB を予約します。staging_slop コマンドは、slop サイズを調整するために許可します。単一の引数、バイト単位の slop のサイ ズ、を取ります。 amd64 ノーコピー (Nocopy) loader.efi は、カーネルを 4GB 未満の 2MB に整列されたメモリにロードしま す。UEFI ファームウェアは、実行時に使用するために任意のメモリを予約するの で、固定アドレスにロードすることはできません。FreeBSD 13.1 より前に、カー ネルは、正確に 2MB でロードする古い BIOS ブートプロトコルを保持していま す。そのようなカーネルは、起動する前に、ロードされた位置から 2MB にコピー しなければなりません。copy_staging コマンドは、古いカーネルのために、この コピーを有効にするために使用されます。次の 1 つを指定する単一の引数を取り ます。 disable ステージング領域の 2M へのコピーを強制的に無効にします。 enable ステージング領域の 2M へのコピーを強制的に有効にします。 auto 非 2M 物理ベースからのブートストラップのカーネルのケーパビリティ に基づいて振る舞いを選択します。カーネルは、シンボル kernphys を エクスポートすることによって、このケーパビリティを報告します。 arm64 ローダは、始まりから `nocopy' モードで動作しているので、そのプラッ トフォームには copy_staging コマンドはありません。riscv、32 ビット arm と arm64 は、常に 2MB に整列された位置にロードされるので、copy_staging を提 供しません。 注意. i386 と amd64 の BIOS ローダは、物理アドレス 2M から開始する ステージング領域を置き、低位 1G に対して同一のマッピングでページン グを有効にします。loader.efi の最初のポートは、ローダ/カーネルハン ドオフプロトコルとカーネルページテーブルのブートストラップの変更を 避けるために、カーネルに制御を渡すための同じスキームに従います。 このアプローチは、UEFI ファームウェアが独自のニーズのために任意のメ モリを解放するので、UEFI 仕様と互換性がなく、実際問題として、多くの ボードで問題が発生します。loader.efi のようなアプリケーションは、 ブートインタフェースを使用して明示的に割り付けられたメモリのみを使 用しなければなりません。また、元の方法は、UEFI 実行時インタフェース データを破壊する可能性があます。 最終的に、loader.efi とカーネルは、この問題を回避するために改善され ました。 amd64 の障害 x86 保護モードで実行されるので、loader.efi の amd64 バージョンは、プログ ラマのミスとメモリの破損のために CPU 障害の影響を受けやすくなっています。 このような障害のデバッグを容易にするために、amd64 loader.efi は、障害の発 生時の CPU 状態の詳細な報告を提供することができます。 grab_faults コマンドは、IDT の障害のハンドラを直接インストールし、UEFI デ バッグインタフェース EFI_DEBUG_SUPPORT_PROTOCOL.RegisterExceptionCallback() の使用を回避しま す。そのインタフェースは、UEFI 環境の高度なデバッガで利用可能なままです。 ungrab_faults コマンドは、障害ハンドラのアンインストールを試み、TSS と IDT CPU テーブルをインストール前の状態に戻します。fault コマンドは、ud2 プロセッサ命令を実行することによって、テスト目的のために loader.efi 環境 に障害を生成します。 関連ファイル /boot/loader.efi システム内の UEFI カーネルローダの位置。 EFI システムパーティション loader.efi は、次の位置の 1 つの ESP (EFI System Partition) にインストー ルされます: efi/boot/bootXXX.efi EFI ローダのためのデフォルトの位置 (`XXX' を置き 換える値については、uefi(8) を参照してください)。 efi/freebsd/loader.efi FreeBSD EFI ローダのために特別に予約された位置。 ESP マウントポイントのデフォルトの位置は、hier(7) に文書化されています。 使用例 ESP で loader.efi を更新する 次の例は、ESP で新しい loader.efi をインストールする方法を表示していま す。 最初に、タイプ ``efi'' のパーティションを探します: # gpart list | grep -Ew '(Name|efi)' 1. Name: nvd0p1 type: efi 2. Name: nvd0p2 3. Name: nvd0p3 4. Name: nvd0p4 1. Name: nvd0 このシステムの ESP の名前は、nvd0p1 です。 次に、ESP をマウントし、FreeBSD EFI ローダのために予約された特別な場所に loader.efi をコピーし、終了するとアンマウントします: # mount_msdosfs /dev/nvd0p1 /boot/efi # cp /boot/loader.efi /boot/efi/efi/freebsd/loader.efi # umount /boot/efi 関連項目 loader(8), uefi(8) バグ ConOut 変数が設定されていないシステムは、標準に準拠しておらず、予期しない 結果になるかもしれません。 x86 でないシリアルコンソールの処理は、さらに混乱を招き、文書化も不十分で す。 シリアルポートの速度が設定されていないとき、9600 が使用されます。そうでな ければは、速度がデフォルトから変更されていないので、通常、結果は、115200 になります。 FreeBSD 13.2 September 4, 2022 FreeBSD 13.2