NetBSD/x68k 1.6 のブートストラップの解説コーナー。
$Id: boot.php,v 1.3 2012/04/03 13:57:01 isaki Exp $

お勉強ちう...。


まずお約束の X680x0 の IPL ブートについて

MC680x0 の起動時の動作についてはどっか他のところ (X680x0 の IPL について とか)を参照して下さい。

X680x0 のブートシーケンスはだいたい次の通りです。 とりあえず IPL-ROM かなんかの機能により、SRAM に設定された 起動デバイスからの起動を試みます。 起動デバイスが FD の場合、FD のセクタ 0 からの 1KB を $002000 に読み込み $002000 に実行を移します。 また起動デバイスが SCSI の場合、指定 SCSI ID の HD のセクタ 0 からの 1KB を $002400 に読み込み $002400 に実行を移します。 というのだけ知ってればいいんじゃないかと思います。 ってこれも受け売りなので実際にはわたしゃ分かってないんですが(汗。


NetBSD/x68k 1.6 の場合

NetBSD/x68k 1.6 の場合、カーネルを読み込むまでのブートローダは 2段階に分かれています。1段目が IPL ROM から呼ばれる部分で こいつは2段目のブートローダを読み込んで実行を移します。 2段目のブートローダは起動するカーネルを選択できたり、 圧縮カーネルの展開などを行なってカーネルを起動します。


1段目のブートローダ

どこのレベルでのお約束ごとか知りませんが、 ディスクの先頭 8KB はブートストラップ用の領域となっており、 8KB 目からファイルシステムが始まります。 BSD 系 UNIX の慣習かしら。

1段目のブートローダはこのブートストラップ用領域におかれており、 その役割は後続の ファイルシステム上にある2段目のブートローダ (/boot) を 読み込んで実行を移すことだけです。 NetBSD/x68k の1段目のブートローダには boot_ustar と boot_ufs の 2種類があり、 boot_ustar はファイルシステムが ustarfs の場合に、 boot_ufs はファイルシステムが ufs の場合に使われるものです。 ファイルシステムが ufs、というのは比較的ノーマルな UNIX の 状態だと思います。一方 ustarfs というのは聞き慣れない ファイルシステムですが、これについては boot_ustar のページで (ちょっとだけ) 解説します。

ブートストラップ用領域は 8KB ありますが IPL ROM は先頭の 1KB しか読み込みません。 ブートローダの大きさが 1KB 以上ある場合は、 IPL ROM によって読み込まれた 1KB 以内のコードで残りの 7KB を 自力で読み込む必要があります。 boot_ustar は 1KB 以内に収まっていますので特にその必要ありませんが boot_ufs はこれを行なっています。

以下それぞれのブートローダの解説です。


2段目のブートローダ

To be written..


井崎のホームページへ戻る
isaki@NetBSD.org / isaki@x68k.net