以下关于UEFI内容来之百度百科。
UEFI
新型,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。
可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的 BIOS 的继任者。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织。
中文名
统一可扩展固件接口
外文名
Unified Extensible Firmware Interface
简 称
UEFI
所有者
Unified EFI Form
1
2
3
用途
BIOS即Basic Input/Output System,翻成中文是“基本输入/输出系统”,是一种所谓的“”,负责在开机时做硬件启动和检测等工作,并且担任操作系统控制硬件时的中介角色。
因为硬件发展迅速,传统式(Legacy)BIOS 成为进步的包袱,现在已发展出最新的UEFI(Unified Extensible Firmware Interface)可扩展固件接口,相比传统 BIOS 的来说,未来将是一个“没有特定 BIOS”的电脑时代。
与legacy BIOS 相比,UEFI最大的几个区别在于:
1. 编码99%都是由C语言完成;
2. 一改之前的中断、硬件端口操作的方法,而采用了Driver/protocol的新方式;
3. 将不支持X86实模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了);
4. 输出也不再是单纯的二进制code,改为Removable Binary Drivers;
5. OS启动不再是调用Int19,而是直接利用protocol/device Path;
6. 对于第三方的开发,前者基本上做不到,除非参与的设计,但是还要受到ROM的大小限制,而后者就便利多了。
7.弥补BIOS对新硬件的支持不足的问题。
结构
UEFI使用,它在逻辑上可分为硬件控制和OS软件管理两部分:操作系统—可扩展接口—固件—硬件。
根据UEFI概念图的结构,可把uEFI概念划为两部分:uEFI的实体 (uEFI Image)跟平台初始化框架。
uEFI的实体-uEFI Image
(图中蓝框围起部分)
启动队列
根据uEFI规范定义,uEFI Image包含三种:uEFI Applications, OS Loaders and uEFI Drivers。
uEFI Applications是硬件初始化完,操作系统启动之前的核心应用,比如:启动管理、BIOS设置、uEFI Shell、诊断程式、调度和供应程式、调试应用...等等
OS Loaders是特殊的uEFI Application,主要功能是启动操作系统并退出和关闭uEFI应用。
uEFI Drivers是提供设备间,每个设备独立运行提供设备版本号和相应的参数以及设备间关联,不再需要基于操作系统的支持。
平台初始化框架
uEFI框架主要包含两部分,一是PEI(EFI预初始化),另一部分是驱动执行环境 (DXE)。
PEI主要是用来检测启动模式、加载初始化模块、检测和加载驱动执行环境核心。
DXE是设备初始化的主要环节,它提供了和协议接口环境界面。
优点
纠错特性
与BIOS显著不同的是,UEFI是用模块化、C语言风格的参数堆栈传递方式、的形式构建系统,它比BIOS更易于实现,容错和纠错特性也更强,从而缩短了系统研发的时间。更加重要的是,它运行于32位或64位模式,突破了传统16位代码的寻址能力,达到处理器的最大寻址,此举克服了BIOS代码运行缓慢的弊端。
兼容性
与BIOS不同的是,UEFI体系的并不是由直接运行在CPU上的代码组成的,而是用EFI Byte Code(EFI)编写而成的。Java是以“Byte Code”形式存在的,正是这种没有一步到位的中间性机制,使Java可以在多种平台上运行。UEFI也借鉴了类似的做法。EFI Byte Code是一组用于UEFI驱动的虚拟机器指令,必须在UEFI驱动运行环境下被解释运行,由此保证了充分的向下兼容性。
一个带有UEFI驱动的扩展设备既可以安装在使用的系统中,也可以安装在支持UEFI的新PC系统中,它的UEFI驱动不必重新编写,这样就无须考虑系统升级后的兼容性问题。基于解释引擎的执行机制,还大大降低了UEFI驱动编写的复杂门槛,所有的PC部件提供商都可以参与。
鼠标操作
UEFI内置图形驱动功能,可以提供一个高分辨率的彩***形环境,用户进入后能用鼠标点击调整配置,一切就像操作Windows系统下的应用软件一样简单。
可扩展性
UEFI将使用,它在逻辑上分为硬件控制与OS(操作系统)软件管理两部分,硬件控制为所有UEFI版本所共有,而OS软件管理其实是一个可编程的开放接口。借助这个接口,主板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过UEFI加以实现,主板或厂商可以将它们作为自身产品的一大卖点。UEFI也提供了强大的联网功能,其他用户可以对你的进行可靠的远程故障诊断,而这一切并不需要进入操作系统。
图形界面
目前UEFI主要由这几部分构成:UEFI初始化模块、UEFI驱动执行环境、UEFI驱动程序、兼容性支持模块、UEFI高层应用和GUID组成。
UEFI初始化模块和驱动执行环境通常被集成在一个中,就好比如今的BIOS固化程序一样。UEFI初始化程序在系统开机的时候最先得到执行,它负责最初的CPU、北桥、南桥及的初始化工作,当这部分设备就绪后,紧接着它就载入UEFI驱动执行环境(Driver Execution Environment,简称DXE)。当DXE被载入时,系统就可以加载硬件设备的UEFI驱动程序了。DXE使用了枚举的方式加载各种总线及,UEFI可以放置于系统的任何位置,只要保证它可以按顺序被正确枚举。借助这一点,我们可以把众多设备的驱动放置在磁盘的UEFI专用分区中,当系统正确加载这个磁盘后,这些驱动就可以被读取并应用了。在这个特性的作用下,即使新设备再多,UEFI也可以轻松地一一支持,由此克服了传统BIOS捉襟见肘的情形。UEFI能支持并轻松联网,原因就在于此。
值得注意的是,一种突破传统MBR()结构限制的GUID(全局唯一标志符)磁盘分区系统将在UEFI规范中被引入。MBR结构磁盘只允许存在4个,而这种新结构却不受限制,分区类型也改由GUID来表示。在众多的分区类型中,UEFI用来存放驱动和应用程序。很多朋友或许对这一点感到担心:当UEFI系统分区遭到破坏时怎么办?而容易受病毒侵扰更是UEFI被人诟病的一大致命缺陷。事实上,系统引导所依赖的UEFI驱动通常不会存放在UEFI系统分区中,当该分区的驱动程序遭到破坏,我们可以使用简单方法加以恢复,根本不用担心。
X86处理器能够取得成功,与它良好的兼容性是分不开的。为了让不具备UEFI引导功能的操作系统提供类似于传统BIOS的,UEFI还特意提供了一个兼容性支持模块,这就保证了UEFI在技术上的良好过渡。
uEFI启动项
启动项2GPT
GUID磁碟分割表(GUIDPartition Table,缩写:GPT)是一个实体硬盘的的结构布局的标准。它是()标准(被用于替代个人计算机的)的一部分,被用于替代BIOS系统中的一32bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表。对于那些扇区为512字节的磁盘,分区表不支持容量大于2.2(2.2 × 10^12)的,然而,一些硬盘制造商(诸如希捷和西部数据)注意到了这个局限性,并且将他们的容量较大的磁盘升级到了4KB的,这意味着MBR的有效容量上限提升到了16 TB。 这个看似“正确的”解决方案,在临时地降低了人们对改进磁盘分配表的需求的同时,也给市场带来了关于在有较大的块(block)的设备上从BIOS启动时,如何最佳的划分磁盘分区的困惑。GPT分配64bits给逻辑块地址,因而使得最大分区大小在2^64-1个扇区成为了可能。对于每个扇区大小为512字节的磁盘,那意味着可以有9.4ZB(9.4 x 10^21字节)或18 E 个512字节(9,444,732,965,739,290,426,880字节 或 18,446,744,073,709,551,615(2^64-1)个扇区 x 512(=2^9)字节每扇区)。
截止至2010年,大多数操作系统对GPT均有所支持,尽管包括Mac OS X和Windows在内的一些仅支持在EFI基础上自GPT分区启动,见#操作系统支持。
GPT分区表的结构。此例中,每个逻辑块(LBA)为512字节,每个分区的记录为128字节。负数的LBA地址表示从最后的块开始倒数,1表示最后一个块。
特点
在MBR硬盘中,分区信息直接存储于(MBR)中(主引导记录中还存储着系统的)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。
跟现代的MBR一样,GPT也使用逻辑区块位址(LBA)取代了早期的寻址方式。传统MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。64位操作系统使用16,384字节(或32)作为GPT分区表,接下来的LBA 34是硬盘上第一个分区的开始。
曾经警告说:“不要假定所有设备的块大小都是512字节。”一些现代的存储设备如可能使用1024字节的块,一些(MO)可能使用2048字节的扇区(但是磁光盘通常是不进行分区的)。一些硬盘生产商在计划生产4096字节一个扇区的硬盘,但截至2010年初,这种新硬盘使用对操作系统伪装成512字节一个扇区。
使用英特尔架构的也使用GPT。
为了减少分区表损坏的风险,GPT在硬盘最后保存了一份分区表的副本。
传统MBR (LBA 0)
在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如就是使用这种方式启动Windows。
分区表头 (LBA 1)
分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)
分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。
分区表项 (LBA 2–33)
GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。