起動時に CPU を保護モードに切り替えるのは GRUB なのか、それとも Linux カーネルなのかを尋ねたいと思います。また、お聞きしたいのですが、カーネル自体 (vmlinuz) は ELF ですか、それともプレーン バイナリ形式ですか? ありがとう。
3 に答える
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。
http://www.moses.uklinux.net/patches/lki-1.htmlによると、LinuxカーネルはELFバイナリです。ブートローダーではなく、プロテクトモードに切り替わるのはLinuxだと確信しています。このページは同意します:http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/linux_boot_process.html