2015-08-26 23 views
8

我在学习UEFI这个词的时候正在研究引导程序。我可以理解一些关于UEFI的内容。但是,在什么模式(Real,Protected,Long)下使用UEFI启动系统?如果正常的引导加载程序无法与UEFI配合使用,那么在处理UEFI时,引导加载程序的替代方法是什么?我是否需要其他编程来创建一个,而不是程序集?UEFI如何工作?

回答

2

这里有一个good answer这个问题:

等现代64位机器上有新的EFI固件。这些不会从光盘的扇区#0加载引导程序。它们由EFI Boot Manager加载并运行EFI引导加载程序引导。这些程序在保护模式下运行。这是EFI引导过程。

EFI固件通常在退出处理器复位的几条指令内切换到保护模式。在EFI固件初始化的所谓“SEC阶段”中,尽早切换到保护模式。从技术上讲,32位和更大的x86处理器甚至不以真实模式开始,而是通俗地称为非现实模式。 (CS寄存器的初始段描述符没有描述传统的实模式映射,并且导致这种“虚幻”)。

因此,可以说这些EFI系统根本不会进入真实模式,当本地引导到EFI引导加载程序(即,当它们不使用兼容性支持模块时),因为它们从非真实模式直接切换到保护模式并从此保持在保护模式。

+0

UEFI没有保护模式! UEFI以64位长模式工作!有些平台可能使用32位平面模式。这个术语起初是错误的,这就是为什么它会让很多人感到困惑。早些时候,所有不是x86模式的都称为保护模式。但这不完全正确。 – Alex

9

UEFI固件在64位平台上运行64位长模式,在32位平台上运行在平板模式下;与BIOS不同,UEFI具有独立于CPU的独立架构以及自己的设备驱动程序。 UEFI可以挂载分区并读取某些文件系统。

当配备UEFI x86的计算机,接口搜索标记有标记为EFI系统分区(ESP)的特定全局唯一标识符(GUID)分区的系统存储器。顺便说一句Windows不会挂载这个分区,并且你不能在操作系统中看到它。但是有一个技巧,你只需将VBR中的分区类型(使用HexWorkshop)更改为普通的FAT32代码,并将其装载到操作系统中。

此分区包含为EFI体系结构编译的应用程序。一般来说,您不必处理汇编器来编写UEFI应用程序/加载器,它只是一个常规的C代码。默认情况下它位于“EFI/BOOT/BOOTX64.EFI”。当手动或自动选择引导加载程序时,UEFI将其读入内存并控制引导过程。

1

当你问“在什么模式下(真正的,受保护的,长的)系统是否启动了UEFI?”,你是什么意思?处理器开始以类似于过去80386模式的模式执行。但你真的在乎吗?当你的操作系统加载代码被赋予控制权时,你不关心处理器的模式吗?而且你关心哪些服务提供给你的OS加载器代码。

环境在UEFI规范中定义。 Latest Versions of the UEFI Specifications

至于你使用哪种语言,程序集很适合开始。稍微使用C或其他高级语言可能更容易。

其他背景:

有很多具体条款,我们并不总是小心使用正确的。

当处理器退出复位时执行的代码是系统固件,它会对系统中各种硬件进行大量初始化。

在UEFI论坛存在之前的x86 PC系统上,系统固件被称为BIOS。当时的BIOS执行其所有初始化代码,然后从软盘或硬盘驱动器加载一些代码并跳入代码。 BIOS还在硬件和操作系统之间提供了一些接口,以帮助将操作系统与硬件差异隔离。尽管没有标准化。唯一的标准是使用BIOS接口的操作系统和应用程序级别的软件。

如果操作系统和应用程序正确运行,则BIOS被认为是正确的。但是你只能通过缺乏失败证明正确性。因此,新的操作系统或应用程序可以在一个正确的系统上工作,但会在不同的正确系统上失败

今天我们试图提供一些这些接口的实际标准化。它们由UEFI论坛定义。今天我可以证明我的系统是正确的,符合UEFI规范。

当人们说诸如UEFI之类的东西时,通常指的是系统上安装的实际系统固件,它在OS开始执行之前执行。但是我们中的很多人仍然像我们泼字母汤一样折腾这些术语。

引导装载程序实际上是在存储系统固件加载和系统固件给出了硬件引导装载程序的控制OS拥有的代码。可以说系统固件的末尾是UEFI Boot Loader。或者你可以说BDS使用系统策略来查找操作系统。而你仍然可以找到不同意这个词的人。