19

起動時に CPU を保護モードに切り替えるのは GRUB なのか、それとも Linux カーネルなのかを尋ねたいと思います。また、お聞きしたいのですが、カーネル自体 (vmlinuz) は ELF ですか、それともプレーン バイナリ形式ですか? ありがとう。

4

3 に答える 3

16

GRUB保護モードになります。

GRUBマルチブート仕様(バージョン0.6.96)セクション3.2は、これを示しています

'CR0' </ p>

ビット31(PG)をクリアする必要があります。ビット0(PE)を設定する必要があります。他のビットはすべて未定義です。

また、CR0レジスタマッピングは、システムを保護モードにする必要があることを示しています。


Linuxはマルチブートカーネルではなく、PMでの切り替えにブートローダーに依存せず、Linuxブートプロトコルに従います。しかし、Linuxはプロテクトモードスイッチ自体を実行し、ブートローダーに依存しません

チェック: http: //lxr.linux.no/#linux+v2.6.39/arch/x86/boot/main.c

ここではgo_to_protected_mode();、whenを呼び出し、次に、それが処理protected_mode_jump ()を実行しCR0ます(ビット0を設定します)

(もう1つのビットは、ページングが無効になっていることを示しています)

編集

私が理解できるのは、GRUBがLinuxブートプロトコル(GRUB2、およびレガシーも必要)を検出し、Linuxをメモリにロードできるが、プロテクトモードに切り替わらないことです。このリンクをご覧ください:http ://www.gnu.org/software/grub/manual/grub.html#GNU_002fLinuxおよびこのリンクのページのセクション16。

于 2011-06-18T14:21:09.543 に答える
0

http://www.moses.uklinux.net/patches/lki-1.htmlによると、LinuxカーネルはELFバイナリです。ブートローダーではなく、プロテクトモードに切り替わるのはLinuxだと確信しています。このページは同意します:http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/linux_boot_process.html

于 2011-01-27T21:35:01.283 に答える