2011-06-18 7 views
1

カーネルをロードした後、syslinuxはプロテクトモードに切り替わりますか? syslinuxがカーネルを起動した後のマシンの状態は?カーネルをロードした後、syslinuxはプロテクトモードに切り替わりますか?

+0

Syslinuxは640KB以上のメモリにアクセスする必要があるため、カーネル(およびinitrd)をディスクからロードしているときにプロテクトモードに切り替える必要があります。 –

+0

最終的にはマシンの状態になるでしょう – phoxis

答えて

2

Linuxカーネルを読み込んでいるsyslinuxについて話していると仮定します。

Documentation/x86/boot.txtをご覧ください。

Linuxカーネルには小さなリアルモードセットアップコード(arch/x86/boot/にあります)があります。これはプロテクトモードに移行する前に行う必要があります(ほとんどの場合リアルモードBIOSにいくつかの情報)。ブートローダは、この部分をローメモリ(640k未満)にロードします。

古いカーネルは640k未満の連続した低メモリに収まるほど小さいので、ブートローダはカーネル全体を低メモリにロードし、すべてをリアルモードで実行できます。新しいカーネルはより大きい(通常約4M)ので、高いメモリ(1M以上)にロードする必要があります。これを行うには、ブートローダはカーネルをそこに置くためにプロテクトモードに変更しなければなりません。また、BIOSを呼び出してディスクからより多くのセクタを読み取るようにリアルモードに戻す必要があります。はカーネルセットアップコードにジャンプする前にリアルモード (保護モードにもう一度移行します)。

あなたの質問に答えるには、それは逆です:から保護モードをリアルモードに切り替えます。

プロセッサの状態は、私が上記にリンクしているドキュメントに記載されているとおりです。リアルモードセットアップコード+ 0x20の開始を指すリアルモードCS(CS:IPは第2の512バイトリアルモードセットアップコードセクタ)、残りのセグメントレジスタは、リアルモードセットアップコード(第1のセクタ)の開始を指し示し、いくつかのパラメータは、リアルモードセットアップコードの最初の2つのセクタに見られるヘッダに埋められる。汎用レジスタの内容は重要ではありません。

+0

Linuxカーネルの場合、マシンは保護モードにあり、Linuxブートプロトコルのようにプロセッサの状態がわかります。コンテキストは、一般的なカーネル、つまり家庭で作られたプロトタイプを対象としています。 GRUBの場合と同様に、マルチブート仕様に従います。 – phoxis

関連する問題