首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >GRUB会切换到保护模式吗?

GRUB会切换到保护模式吗?
EN

Stack Overflow用户
提问于 2011-01-27 21:10:08
回答 3查看 5.8K关注 0票数 19

我想问一下,是GRUB在启动时将CPU切换到保护模式,还是Linux内核这样做。我还想问-内核本身(vmlinuz)是ELF还是普通的二进制格式?谢谢。

EN

回答 3

Stack Overflow用户

发布于 2011-06-18 14:21:10

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会自己切换保护模式,而不依赖于引导加载程序

查看: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部分。

票数 16
EN

Stack Overflow用户

发布于 2011-01-27 21:35:01

根据http://www.moses.uklinux.net/patches/lki-1.html的说法,Linux内核是一个ELF二进制文件。我非常确定切换到保护模式的是Linux,而不是引导加载程序。这个页面同意:http://oss.sgi.com/LDP/HOWTO/Kernel-HOWTO/linux_boot_process.html

票数 0
EN

Stack Overflow用户

发布于 2019-09-17 20:22:31

我建议这里的答案是GRUB加载器在加载内核之前切换到“虚实模式”(这就解释了为什么CR0位0在那个时候没有设置)。启用了完整的32位寻址,为[0,4Gigs> ]设置了一个扁平的GDT,启用了A20行,但是没有启用分页,所以Linux内核(或任何其他内核)仍然必须这样做并切换回保护模式。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4821911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档