私はLILObootsect.sとGRUBstage1.sを見てきました。
LILOは、特定のハードコードされたセクターから物(または何か)をロードします。インストール時にパッチを適用できる予約済みバイトは使用しません。ドライブ上で一人ではなくパーティション上にいる場合、これはどのように機能するのだろうか?LILOはどのようにしてbootsec.sにディスク上のどこにあるかを伝え、ロードする必要のあるファイルがどこにあるかを適切に調整しますか?
LILOにはBPB用のスペースがないため、ほとんどの場合、extブートローダーです。extには、ブートセクタの直後に予約されている別の512のみがあります。LILOのステージ2は、その小さなスペースに本当に収まるのでしょうか。それとも予約済みのブロックに配置しますか?
一方、GRUBには、stage2が存在する場所用に予約されたdwordがあります。これは、インストール時にパッチを適用できると思います。しかし、それはそれのサイズについては何も述べていません。それを見ると、単一のセクター(mov ax, 0x0201
)を読み取ってからジャンプしているように見えます。stage2ディレクトリを見ると、単一のセクターだけに収まるとは思いません。
LILOとGRUBの両方の構成ファイルには、それらが存在するファイルシステムについては何もありません。彼らはどのようにブートプロセスを続行しますか?ファイルのパスが含まれているということですが、あまり役に立たないと思います。彼らは見つけようとしますか?どうして?既存のOSがある場合、現在のOSがファイルシステムのセットアップとブートローダーファイルをどのように気に入っているかとの競合はありませんか?彼らのstage1がほとんどファイルシステムに愚かであることを考えると。
LILOとGRUBがパーティションブートセクター(事前にパーティション化されたディスク)をセットアップするとき、MBRのパーティションテーブルを読み取り、残りの部分がディスク上のどこにあるかを推測します。これにより、「固定アドレス指定」が機能するようになります。パッチを適用しますか、それとも実際に固定ハードディスクセクターにロードしますか?紛争の質問に戻ります。
ブートローダーを作成しようとしていますが、静的ディスクアドレスを読み取るだけではファイルシステム構造と競合する可能性があるため、十分ではないと感じています。また、ディスク上のどこにいるかを「知る」方法がわからなくなっています。 DS:SIが実際のパーティションテーブルを指していることを信頼できるかどうかはわかりません(LBA 0を使用している場合はどうなりますか?)。MBRパーティションテーブルを読み取り、stage1でdwordにパッチを適用してもうまくいきません。私に。だから私はLILOとGRUBからのインスピレーションを探しています。NASMで書かれていないことは、実際には役に立ちません。:(