GRUB是否切换到保护模式?

时间:2011-01-27 21:10:08

标签: linux linux-kernel cpu grub protected-mode

我想问一下,在启动过程中是否将GRUB切换到保护模式,或者它是Linux内核。而且我想问一下 - 内核本身(vmlinuz)是ELF还是纯二进制格式?感谢。

3 个答案:

答案 0 :(得分:14)

GRUB 让您进入保护模式。

GRUB Multiboot Specification (version 0.6.96) Section 3.2告诉你这个

  

“CR0”

     

必须清除位31(PG)。必须设置位0(PE)。其他位都是未定义的。

并且CR0 Register mapping告诉您系统应该处于保护模式。


Linux不是多引导内核,并且不依赖于某些引导加载程序来切换PM,它遵循Linux Boot Protocol。但是linux自己做了保护模式切换,并且不依赖于bootloader

检查:http://lxr.linux.no/#linux+v2.6.39/arch/x86/boot/main.c

然后调用go_to_protected_mode();然后调用protected_mode_jump ()然后执行CR0内容(设置位0)

(另一位表示禁用了分页)

修改

我能弄清楚的是GRUB can detect linux boot protocol(GRUB2和遗产也应该)并在内存中加载linux,但不会切换到保护模式。请查看此链接:http://www.gnu.org/software/grub/manual/grub.html#GNU_002fLinux和此链接页面的第16部分。

答案 1 :(得分: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

答案 2 :(得分:0)

我建议这里的答案是GRUB加载程序在加载内核之前切换到“虚幻模式”(这解释了为什么此时未设置CR0位0)。 启用了完整的32位寻址,为[0,4Gigs>设置了平面GDT,启用了A20行,但是未启用分页,因此Linux内核(或任何其他内核)仍然必须这样做并进行切换回到保护模式。

https://en.wikipedia.org/wiki/Unreal_mode