liuliuab1 发表于 2014-12-10 23:19:02

UEFI──BIOS 的替代接口标准

UEFI──BIOS 的替代接口标准
      新型 UEFI,全称 “统一的可扩展固件接口” (Unified Extensible Firmware Interface), 是一种详细描述类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上。

       可扩展固件接口(Extensible Firmware Interface,EFI)是 Intel 为 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近 20 多年历史的 BIOS 的继任者。

       UEFI 是由 EFI 1.10 为基础发展起来的,它的所有者已不再是 Intel,而是一个称作 Unified EFI Form 的国际组织。

作用:
       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 启动不再是调用 Int 19,而是直接利用 protocol/device Path;
       6. 对于第三方的开发,前者基本上做不到,除非参与 BIOS 的设计,但是还要受到 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,主要功能是启动操作系统并退出和关闭 EFI 应用。
       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 在技术上的良好过渡。

版权声明:
本文由 德云社区 整理,原文来自网络。

liuliuab1 发表于 2014-12-10 23:24:14

本帖最后由 liuliuab1 于 2014-12-12 01:00 编辑

UEFI, BIOS, 字节码, 接口, 贴标机

liuliuab1 发表于 2014-12-10 23:24:27

本帖最后由 liuliuab1 于 2014-12-12 01:00 编辑

UEFI, BIOS, 字节码, 接口, 贴标机
页: [1]
查看完整版本: UEFI──BIOS 的替代接口标准