mercuryfall 发表于 2013-5-1 22:05

[扫盲]关于BIOS与UEFI的关系

本帖最后由 iFive 于 2014-9-3 13:11 编辑

题外话:看到讨论很热烈,手痒了,随便写写,轻喷。

关于BIOS:

      BIOS即“Basic Input/Output System”基本输入输出系统,源于IBM,大体上说是具有“担负著初始化硬件,检测硬件功能,以及引导操作系统”这么多的功能,但实际上,它跟UEFI一样,属于Firmware Interface的范畴,也就是作为底层硬件的一个外部接口而存在。
       早期的电脑,BIOS是固化在ROM里面的,而且运行时也是从ROM中读一条运行一条,相当于额外的系统盘。后来随着PC内存增加,BIOS会随着系统启动完全载入到内存中去,这样运行速度就快很多了。但这么做不仅有可能导致兼容性问题,长时间运行也会随着内存的读写错误而导致BIOS出错,这样就彻底死机了。那时候在BIOS里都会有个选项叫做“BIOS SHADOW”,也就是让你选择是否将BIOS映射到内存中去。随着硬件的发展,BIOS的储存方式也从ROM、EPROM、EEPROM逐渐变迁,最近随着BIOS的增大以及Shadow技术的进步,连不支持bit运算的NAND都上阵了。
       但同时BIOS的局限性也逐渐体现,比如,我有一个PCI的网卡,还有一张Raid阵列卡,这些在主板BIOS当中都是没有集成的,就需要在这两个设备中再集成一个ROM,使用BIOS提供的一个叫BBS的API注册到主板BIOS当中去才行,这回导致系统BIOS的启动时间变长,而且在注册完成之前,你是无法对BIOS进行任何操作的,也进不到BIOS的界面。很多人开机时点了“F2”或者“Del”仍然要等很久才能进去就是这个原因。且BIOS是在8086时代就定型了的,导致其所有的部分都必须用16位寻址的方式编写,不兼容32位,更别说64bit了。
       而最重要的缺点有这么两个:1、在其他设备进行BIOS注册的时候,总共只有128K的大小,超了BIOS就管理不了。2、由于BIOS及其全部的扩展都是汇编写的,那么其针对性就非常强。也就是说,我为x86做的一个硬件(比如RAID卡),它放到PowerPC、ARM上都不能用。


再说UEFI:


UEFI的全称是Unified Extensible Firmware Interface,可以看出它的定位就是一个可扩展的Firmware界面。其中Firmware是汇编的,而其余部分是用C做的,这样的好处我们下面再说。
       UEFI的前身是EFI,这是Intel提出的一个方案,其目的据官方说是解决BIOS存在的诸多问题,提供更先进的接口规范。其实说白了就是为“安腾”开发的,因为“安腾”架构基本上同x86不兼容。从前你不支持也就罢了,毕竟是竞争对手的关系,但你Intel自己出的两个东西之间互不兼容,这就说不过去了。EFI采用C编写,模块化结构,然后通过动态链接的形式构建。这样向里面添加设备就很容易,体现出来就是开机自检速度快。同时其他设备也不再用汇编了,无法直接调用CPU指令集,而是用叫做“EFI Byte Code”的伪代码写成,由EFI解释运行。这是一种专用的虚拟机,原理上类似Java。这样你的硬件只要支持EFI就行了,剩下的从EFI到CPU的工作就可以省掉。所有硬件商只要写好硬件到EFI的驱动,就可以兼容所有支持EFI的硬件,而不用管EFI那头是什么东西。很方便,是吧?
但在当时所有用EEPROM的时代,用C写的EFI太大了,芯片装不下只能做到硬盘里,这麻烦就大了。主板厂商不能控制自己的底层接口,硬盘商卖出去的新硬盘直接替换旧机器上的就无论如何都无法开机。换句话说,除了苹果,谁都玩不转。而苹果不玩安腾,所以安腾悲剧了。况且对于大部分只玩x86的厂商,BIOS没啥问题,不就是兼容性差点么,老子又没指望兼容别的平台,用现在的话说就是“关我鸟事”。
之后Intel只能认怂,伙同AMD、Dell、HP、Apple、Microsoft、Phoenix等一堆相关人士成立了统一EFI论坛,也就是“Unified EFI forum”,并在之后放开EFI的控制权,完全交给这个推广组织制定,名称也理所应当的变成了“UEFI”。再之后BIOS开发厂商也只能见风使舵的推出UEFI 固件,变革的时候谁跑得慢谁倒霉,Award跑的最慢,就被Phoenix收购了。


UEFI的特点

UEFI其实在硬件上跟BIOS的差别并不大,不过就是NAND大了点,CMOS存的变量多了点而已,更多的是软件和规范上的变化。好处还是有不少的:
1、性能更高、支持更多的硬件。比如超过3T的硬盘等。这点其实是废话,新规范总归是要提升性能、适应新产品的。
2、UEFI支持存放在任何位置。而且这个位置是动态可变的,哪里方便就放在哪。比如还是一个raid阵列卡,你就可以把这张卡连同附带硬盘的驱动放在卡的ROM里,当PCI-e的驱动加载完毕之后,会自动加载ROM里的驱动。
3、硬件的兼容性提高,前面提到了,新硬件只要编写从自家硬件到UEFI的部分就行了,剩下的UEFI来做,向前向后的兼容性都能保证,工作量也明显减少。
4、自带图形功能。支持鼠标了(版主注:鼠标功能并非是UEFI的“标配”,Intel的“公版”EFI就没有鼠标功能,PS:上世纪90年代的一种AMI BIOS甚至有类似于Windows 3.1的简陋图形界面和鼠标支持),看上去更华丽了,也为下面“可扩展性”提供了更多功能。
5、处理器兼容性。UEFI支持64位寻址,支持包括安腾、x86、arm在内的所有处理器,而且可以运行在不同模式。比如用64位的UEFI启动32位的Boot Loader(但当前只有mac OS可以做到,win8跟server 2012都不行)。
6、可扩展性。UEFI是支持第三方软件的,并提供了一个UEFI-Shell来输入其他命令。理论上说在UEFI环境下是可以直接听歌、上网、看电影的,但现在没人这么多(部分厂商可以)。另:现在很多厂商都可以在UEFI下直接联网更新固件。

版主修改:无线网卡类的硬件不需要Option ROM自检,已经帮你修改为RAID卡。其他内容也有部分变动。

xixim 发表于 2013-5-2 14:19

支持一下楼主,很好的普及知识贴。

william2001sy 发表于 2013-5-3 01:23

正求这个介绍{:1_481:}

魔瞳 发表于 2013-5-3 10:51

感谢,详细了解了下...

haierccc 发表于 2013-5-4 10:19

本帖最后由 haierccc 于 2013-5-4 10:22 编辑

这个介绍太详细了,赞一个!
如果说EFI是一个虚拟机的话,那么编程的时候调用其功能,和BIOS调用是一样的么?
比如BIOS调用,BIOS代码直接就是CPU代码。而EFI调用,就是经过虚拟机这个中间层转换,那效率是不是下降了。

深度窘迫 发表于 2013-5-6 02:42

感觉还是有很多不解的地方,thinkpad已经支持UEFI,在BIOS里也可以选择调用哪个,但是貌似UEFI对于笔记本目前没什么作用

常遇春 发表于 2013-5-6 21:52

学习了,

waya 发表于 2013-5-11 09:36

Phoenix跑的最慢,就被Award收购了。
这个不是Award被Phoenix收购吗?官网地址http://www.phoenix.com/

fss726 发表于 2013-5-11 10:55

长知识了,谢谢

loesnow 发表于 2013-5-20 11:18

学习了,已经UEFI+SSD(GPT)+HDD(GPT){:7_391:}

freakming 发表于 2013-5-21 01:17

长见识了

FFFF12345 发表于 2013-6-1 20:07

挺好的,学习了。

davictor 发表于 2013-6-3 23:54

联想Y400笔记本,加SSD,UEFI+GPT……但是没有图形BIOS是怎么回事呢,只有跟老式BIOS一样的UI

huadian 发表于 2013-6-22 13:52

拜读了,现在满大街都是UEFI。

mercuryfall 发表于 2013-6-23 00:22

waya 发表于 2013-5-11 09:36 static/image/common/back.gif
Phoenix跑的最慢,就被Award收购了。
这个不是Award被Phoenix收购吗?官网地址http://www.phoenix.com/ ...

抱歉,写的时候脑残了。
确实是Award被收购,合并后叫Phoenix-Award,写的时候不知道怎么就按这个先后顺序敲出来了……

hohoyang 发表于 2013-6-23 10:17

写的不错,学习了。

sai_v 发表于 2013-6-27 16:54

嗯,菜鸟学习了~~

无心快语 发表于 2013-6-27 20:24

楼主解释的简单明了,谢谢啦!

duolazmeng 发表于 2013-6-30 23:23

新人来学习一下

wms3721 发表于 2013-7-1 11:28

收藏起来慢慢看吧
页: [1] 2 3
查看完整版本: [扫盲]关于BIOS与UEFI的关系