问题

UEFI 引导与 BIOS 引导在原理上有什么区别?

回答
咱们聊聊电脑启动那点事儿,之前电脑启动主要靠 BIOS,现在新电脑基本都换成了 UEFI。这俩名字听起来有点玄乎,但说白了,它们都是电脑刚开机时,负责“唤醒”硬件、加载操作系统的那套程序。它们最大的区别,就像是老式电话和智能手机,功能和工作方式都有天翻地覆的变化。

BIOS(Basic Input/Output System) 老爷子的回忆

你可以把 BIOS 想象成一个经验丰富的老工匠,他掌握着一套固定的、传统的流程来启动一台机器。

原理核心: BIOS 主要存放在主板上的一个 ROM(ReadOnly Memory)芯片里。当电脑通电后,CPU 会直接去读取这个 ROM 芯片里的指令。
启动过程:
1. 加电自检 (POST PowerOn SelfTest): 这是 BIOS 最重要的第一步。BIOS 会检查 CPU、内存、显卡、键盘等基本硬件是否正常工作。如果有问题,它会发出蜂鸣声或者在屏幕上显示错误代码。
2. 查找启动设备: BIOS 会按照预设的顺序(比如先硬盘,再光驱,再U盘)去查找哪个设备上有操作系统。
3. 加载引导程序 (Bootloader): 一旦找到启动设备,BIOS 会读取该设备上的第一个扇区(MBR Master Boot Record)。MBR 里包含了启动分区信息和一小段代码,这个代码就是“引导程序”。BIOS 的任务就是把这段引导程序的代码加载到内存中,然后把控制权交给它。
4. 引导程序接管: 引导程序再根据自己的逻辑,找到操作系统内核,加载到内存,然后让操作系统开始运行。
技术限制:
16位模式: BIOS 运行在 CPU 的16位实模式下。这意味着它一次只能处理16位的数据,速度相对较慢,能访问的内存空间也有限(最大只能直接寻址1MB)。
MBR 限制: BIOS 依赖 MBR。MBR 的结构决定了它只能支持最大2TB的硬盘,并且主引导记录的位置固定,容易被病毒破坏。它一次只能加载一个引导程序。
硬件识别有限: BIOS 对硬件的识别和初始化相对基础,很多高级特性无法发挥。
用户界面简陋: BIOS 的设置界面通常是基于文本的,操作起来比较麻烦,选项也有限。

UEFI(Unified Extensible Firmware Interface) 新时代的先行者

UEFI 则像是一个训练有素的现代工程师,他不仅流程更精细,而且功能更加强大和灵活。

原理核心: UEFI 是一种全新的固件接口规范,它不再是简单地运行在 ROM 芯片里的一段固定代码。UEFI 固件可以存储在主板上的闪存芯片中,它更像是一个微型操作系统。
启动过程:
1. 初始化和硬件检测: UEFI 在启动时会执行一系列的初始化操作,比 BIOS 更全面,能更高效地识别和配置硬件。
2. 查找 EFI 引导应用程序: UEFI 不依赖 MBR。它会查找存储在硬盘上的 EFI 系统分区 (ESP EFI System Partition)。ESP 是一个 FAT32 格式的分区,里面存放着各种 EFI 应用程序,包括操作系统的引导程序。
3. 加载引导程序: UEFI 会根据预设的启动项,从 ESP 中找到对应的引导程序(例如 Windows 的 `bootmgfw.efi`),并直接将其加载到内存中执行。
4. 图形化用户界面: 许多 UEFI 固件提供了图形化的设置界面,支持鼠标操作,比 BIOS 直观易用得多。
5. 更高级的功能: UEFI 提供了丰富的驱动程序模型,可以支持更广泛的硬件。它还可以运行一些简单的应用程序,比如文件浏览器,甚至网络浏览器。
技术优势:
32位或64位模式: UEFI 可以运行在 CPU 的32位或64位模式下,能够访问更多的内存,处理速度更快。
GPT 支持: UEFI 支持 GUID 分区表 (GPT)。GPT 没有 MBR 的2TB硬盘限制,可以支持非常大的硬盘(理论上可以支持数万亿GB的硬盘),并且可以创建更多的分区。
安全启动 (Secure Boot): UEFI 支持安全启动功能。这使得操作系统在启动时会验证固件、操作系统引导程序以及驱动程序的数字签名,防止恶意软件在启动过程中劫持系统。
模块化设计: UEFI 是一个模块化的接口,可以根据需要加载不同的驱动程序和服务。这使得固件更加灵活,也更容易进行扩展和更新。
网络功能: 一些 UEFI 固件支持网络启动(PXE Boot)以及更广泛的网络功能,方便远程管理和部署。
更快的启动速度: 由于更高效的初始化和启动加载机制,UEFI 通常能带来更快的电脑启动速度。

简单对比一下:

| 特性 | BIOS | UEFI |
| : | : | : |
| 固件类型 | 传统的固件接口 | 现代的固件接口规范 |
| 运行模式 | 16位实模式 | 32位或64位模式 |
| 存储介质 | ROM 芯片 | 闪存芯片,可更新 |
| 硬盘分区 | MBR (最多2TB硬盘,4个主分区) | GPT (支持超大容量硬盘,更多分区) |
| 引导方式 | MBR > 引导程序 | ESP (GPT分区) > EFI引导程序 |
| 启动速度 | 相对较慢 | 更快 |
| 安全性 | 无安全启动功能 | 支持安全启动 (Secure Boot) |
| 用户界面 | 文本模式,操作不便 | 图形界面,支持鼠标,直观易用 |
| 硬件识别 | 基础 | 更全面,支持更多新硬件和特性 |
| 网络功能 | 有限,主要支持 PXE 启动 | 更广泛,支持网络启动和更多网络应用 |

总结来说, BIOS 是一个古老且功能有限的启动方案,就像是老式的手摇电话,只能完成最基本的通信任务。而 UEFI 则是现代化的、功能强大的启动方案,就像是智能手机,不仅能打电话,还能上网、玩游戏、安装各种应用,提供更安全、更快捷、更丰富的用户体验。所以现在新电脑都换成 UEFI,也是顺应技术发展的必然选择。

网友意见

user avatar

作为UEFI/BIOS圈的业内人士,我十分惊讶的看到,UEFI和BIOS的概念在很大程度上还是模糊不清的。甚至 @木头龙 这样的硬件圈资深知友也让我来介绍一下。我刚好借此此题来系统总结UEFI和BIOS的区别,和未来PC启动固件的走向。

就本题而言,我可以负责任的说,UEFI和传统BIOS在启动引导过程原理上没有本质区别!为什么这么说呢?那为什么还要发明UEFI?UEFI将要向何处去?这些问题如同人类宗教起源的灵魂三问“我是谁,从哪里来,将向哪里去一样“,会将看问题的深度提高到另一个层次。幸运的是,这些问题相对灵魂三问来讲,有确定的答案,今天我就带大家一起来探索一下。如果对这些问题不感兴趣的同学,读到这里也就可以结束了。

UEFI和BIOS启动过程有什么不同吗?

有些同学说起UEFI和传统的BIOS区别,会如数家珍般的罗列MBR、PEI、DXE、UEFI分区啊这些东西,实际上这些全部是软件层面的抽象,本身并没有奇特的东西。传统BIOS也可以做出改变支持PEI/DXE和UEFI分区等等,UEFI固件也可以支持支持传统BIOS的环境,两者并没有功能上本质的区别。

实际上PC的启动固件的引导流程从IBM PC机诞生第一天起,就没有本质改变过。如果我们透过SEC、PEI、DXE和BDS等等复杂的术语看幕后隐藏的本质,就会发现无论传统BIOS还是UEFI,阳光之下没有什么新鲜的东西,启动本身无外乎三个步骤:

1.Rom Stage:在这个阶段没有内存,需要在ROM上运行代码。这时因为没有内存,没有C语言运行需要的栈空间,开始往往是汇编语言,直接在ROM空间上运行。在找到个临时空间(Cache空间用作RAM,Cache As Ram, CAR)后,C语言终于可以粉墨登场了,后期用C语言初始化内存和为这个目的需要做的一切服务。

2. Ram Stage: 在经过 ROM阶段的困难情况后,我们终于有了可以大展拳脚的内存,很多额外需要大内存的东西可以开始运行了。在这时我们开始进行初始化芯片组、CPU、主板模块等等核心过程。

3. Find something to boot Stage: 终于要进入正题了,需要启动,我们找到启动设备。就要枚举设备,发现启动设备,并把启动设备之前需要依赖的节点统统打通。然后开始移交工作,Windows或者Linux的时代开始。

这就是传统BIOS和UEFI的启动过程,在剥去了术语后,主干的三个步骤从来没有变化过。熟悉嵌入式系统开发的同学会发现,大多数嵌入式系统启动也大致是这些个步骤,从某种意义上讲,PC启动过程并没有什么特殊的。

传统BIOS尽管开始全部用汇编语言完成,但后期也部分引入了C语言,这些步骤完全是一样的。什么MBR分区啊,UEFI分区都是枝节问题,都是技术上可以做到的,没有什么是UEFI可以做,传统BIOS不可以做到的。那么问题来了,为什么UEFI会替代传统BIOS,UEFI展现了什么独特的魅力吗?要理解这一点,我们先要看看PC启动固件到底问什么必须。

为什么需要BIOS和UEFI?

与大多数人基本的概念不同,在某种意义上来说,X86体系比ARM体系更加开放。X86是很多小伙伴一起玩,以生态圈的概念提供产品,并对自己那部分负责;而ARM体系虽然也依赖生态圈,但最终有个大Boss统合整个生态链,提供最后产品并对该产品负总责。

X86生态圈玩家众多,有OS 厂商(OSV)定期发布操作系统,如Windows,Ubuntu;芯片厂商提供CPU,如Intel, AMD;主板厂商(OEM)提供电脑主板;独立硬件供应商(IHV)生产扩展板卡如显卡等等PCIE扩展卡,再如内存厂家推出一代一代不同的内存条等等。

DIY玩家可以自由选择搭配合适/兼容的产品搭配出自己心仪的机器,休闲上网用户花2000多元就可以搭配出一套可用的电脑,而游戏玩家则可能花费上万元才能满足游戏配置需求。还有些品牌机厂商如Dell和联想等,他们提供整套最终产品给用户。但他们实际上是在所有小伙伴的零件基础上拼凑出个产品,技术不强,话语权弱,并不能统一整个产业链。用户津津乐道的反而是用的什么CPU,安装的什么操作系统,用的那种显卡等等。Windows死机、蓝屏和缓慢等等时候,用户往往会抱怨微软和Intel,而不是品牌厂商。

ARM体系由最后品牌厂商统合整个产品,它负责打通整个产业链,并对其中所有部分负责,话语权极强,同时对技术也相对较强。用户面对的具体品牌的产品,而不是碎片化的各个部分。强势的如Apple,硬件软件一起抓,完全组成闭环的链条。稍差也如华为等安卓手机,要负责安卓系统在自己手机移植部分(BSP),客户出了问题并不会找谷歌,而会去找华为。

在X86生态圈十分强势的微软,自己负责操作系统开发,跳过品牌直接服务最终用户,甚至不经允许直接升级操作系统,闹出不少风波。强势也带来了副作用,它要直接面对数千数万种千奇百怪的硬件产品,如何才能用一个软件安装包服务于这么多种设备呢?必须要一个软件抽象层封装这些硬件差别!

这就引出了BIOS和UEFI的最主要的功能:初始化硬件提供硬件的软件抽象

  • ARM体系也要初始化具体主板相关硬件如GPIO和内存等,这些一般在BSP中完成。与X86体系不同之处在于这些硬件完全定制化,初始化的时候就预先知道有哪些设备,Solder Down了哪个品牌的哪种内存颗粒,到时候就照方抓药,初始化一大堆寄存器而已。X86系统配置情况在开机时候是不知道的,需要探测(Probe)、Training(内存和PCIe)和枚举(PCIe等等即插即用设备),相对较复杂。
  • BIOS和UEFI提供了整个主板、包括主板上外插的设备的软件抽象。通过探测、Training和枚举,BIOS就有了系统所有硬件的信息。它通过几组详细定义好的接口,把这些信息抽象后传递给操作系统,这些信息包括SMBIOS(专栏稍后介绍)、ACPI表(ACPI与UEFI),内存映射表(E820或者UEFI运行时)等等。通过这层映射,才能做到做到操作系统完全不改而能够适配到所有机型和硬件。

在某种程度上来讲,BIOS和UEFI是将操作系统BSP部分单独封装后下放到主板或者BIOS提供商来完成。这在过去带来了巨大的好处,WinXP、Win7现在还可以运行在更新的电脑硬件上,新的硬件只要自己更改一下就行了,兼容性是ARM体系所不能比拟的。当然割裂的生态圈也带来了用户感受的千差万别,这也受到广泛诟病。各自为政也窒息了创新,带来了同质化。为此,Intel越俎代庖,提出了变形本等等概念;而微软更直接出了Surface,似乎要与过去的小伙伴争食。其实这些都是不得已而为之,今后的发展还需要拭目以待。

arm社区最近为了进入x86的传统优势领域,也开始接受uefi,不过一般只在服务器领域。个别厂商为了支持Windows而在平板等设备支持uefi,某厂商在手机上也要引入uefi。不过这些只是支流,并且他们并不吧自己叫做BIOS,而叫做Bootloader。

UEFI带来的独特价值

看过我的UEFI历史的文章:

就知道UEFI是为了替代传统BIOS而诞生。

这里说个小插曲,很多同学都奇怪专栏为什么有时候说BIOS是指传统BIOS,有时似乎又涵盖UEFI。实际上,业内人士在UEFI诞生之初,会严格区分两者的区别,如果十几年之前有人问我是不是做BIOS的,我会认真的否定:“不,我是做UEFI的,thank you very much!”

如果有人说UEFI BIOS,会被人蔑视:“BIOS就是BIOS,UEFI就是UEFI,怎么能混为一谈呢?”但在现在UEFI已经全面取代传统BIOS,传统BIOS已经几乎绝迹的情况下,业内人士已经放弃吃药,默认BIOS就是指UEFI。现在如果有人在我说出UEFI来露出痴呆的表情时,我会说:“就是BIOS啦,哈哈哈”

传统之强大可见一斑。甚至现在的招聘JD还是说要找“BIOS工程师”。

人们总是习惯性的对新出现的东西持怀疑和否定的态度,UEFI在启动时又还是那三个步骤,那么UEFI一定是提供了某种特别的东西,才能让传统的固件工程师改换门庭。它们究竟是什么呢?

答案就隐藏在上面一节“BIOS、UEFI的目的”中。UEFI扫除了传统BIOS割裂的生态,打通了PC固件之间的鸿沟,并提供统一的接口给操作系统,而不关心操作系统是什么;它能够更好的完成PC固件的终极目的:初始化硬件提供硬件的软件抽象,和启动操作系统。如果说有什么东西帮助UEFI打败了传统BIOS,那这些东西就是:标准接口、开放统一和开源了

传统BIOS来自于IBM,之后就进入战国时代,激烈的商战让接口统一成为了不可能做到的事,只有在面对微软这个大用户的时候,才勉强提供了“兼容”的基于软中断的接口。它封闭、神秘和充满各种不清不楚的预设和祖传代码,在调试PCI的ROM时要小心各种rom之间互相踩,各种只有老师傅才知道的神奇“诀窍”。要写个驱动,让它在各个BIOS厂商那里都能跑,简直成为了一件不可能完成的任务。

UEFI[1]由Intel推动,在一开始就将标准公开,拉上了微软这个PC界的霸主,强势统一了江湖。在近20年的深耕下,统一了固件启动阶段基础框架Spec:PI Spec与操作系统的接口Spec:UEFI Spec,并将抽象硬件的原语性Spec: ACPI Spec也拉入这个大家庭,都变成UEFI Forum的一份子。

现在只要符合UEFI driver model的驱动都可以在各个BIOS上运行,打通了各个BIOS厂商之间的栅栏;与此同时,符合UEFI标准的操作系统都可以流畅的在各种主板上运行,无论是Windows,还是Linux各种发行版,甚至是Android。实际上,PC生态圈的繁荣,和UEFI的推广和被广泛接受是分不开的。

值得一提的是UEFI内核的大部分代码是由Intel的中国工程师开发的。在大家一次次电脑的正常运行后面,有他们辛勤工作背影。他们也为固件的开源和国产化做出了自己的贡献。代码已经全部开源一部分时间了,在GitHub[2]

UEFI将要向何处去?

在发展近20年之后,UEFI的代码量十分庞大。在Github上有数百万行!简直和一个操作系统一样,提供各种各样的驱动和lib,包括网络驱动、iscsi这样的大块头,蓝牙和WiFi这些小众驱动。多样的驱动和Lib,提供了极大的灵活性,用户可以拼接出强大的BIOS程序,但与此同时,这些庞大的代码,各种Lib和driver,让理解它十分困难。看准了这个机会,以前偏居一隅的Coreboot在跃跃欲试,走出了ChromeOS的疆域,在IoT市场上开始发力,并希望染指服务器领域。Google又提出LinuxBoot,希望在这个领域能分一杯羹。

简单就是美,如何简化它,如何更好地和开源社区一起愉快的玩耍,是UEFI需要解决的问题。20年之后的现在,UEFI已经变得越来越传统,曾经的屠龙骑士变成了恶龙,业界呼唤新的方案,Intel也不失时机的提出了ModernFW[3]的概念。

在这个变化的时代,挑战趋势就意味着被淘汰,就如以前BIOS的霸主Phoenix一样,作为行业一哥,拒绝变化,终被AMI超越。个人更是要顺势而为,才能事半功倍。未来在哪里,现在就下断言为时尚早,但可以预言的是,未来的PC启动固件,一定会更小,更美,更简单!

后记

最后给大家留个小思考题:为什么Intel、AMD这种芯片厂商会这么关心BIOS标准?它们也不出BIOS啊?

BIOS培训云课堂

这篇文章我会修改后发布在我的专栏中:

并在该文中公布答案,大家也可以在这里积极留言,好的答案会一并摘录。

更多BIOS文章:

欢迎大家关注本专栏和用微信扫描下方二维码加入微信公众号"UEFIBlog",在那里有最新的文章。

参考

  1. ^UEFI 官网 https://uefi.org/
  2. ^EDKII https://github.com/tianocore/edk2
  3. ^ModernFW https://www.phoronix.com/scan.php?page=news_item&px=ModernFW-Exciting

类似的话题

  • 回答
    咱们聊聊电脑启动那点事儿,之前电脑启动主要靠 BIOS,现在新电脑基本都换成了 UEFI。这俩名字听起来有点玄乎,但说白了,它们都是电脑刚开机时,负责“唤醒”硬件、加载操作系统的那套程序。它们最大的区别,就像是老式电话和智能手机,功能和工作方式都有天翻地覆的变化。BIOS(Basic Input/O.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有