MCPLive > 杂志文章 > 跨越BIOS的三重门

跨越BIOS的三重门

2009-12-03Lanwellon《微型计算机》2009年11月上

一说到BIOS,很多人脑海里面都会浮现出那些专业的名词、复杂的代码。其实这个电脑里面的“基本输入输出系统”,并没有大家想象中那般神秘、那么高不可攀。今天我们要做的事情就是带着大家一起去揭开它那神秘的面纱,看看BIOS都有哪些功用,它是如何构成,又是如何来维持系统底层运作的呢?

抽丝剥茧:BIOS的基本功能

很多人都知道BIOS是工作在计算机底层的的基本输入输出系统,它是英文Basic Input/
Output System的首字母缩写。从本质上来讲,狭义的BIOS就是指加载在电脑硬件系统上的基本的软件程式码,如果我们按照功能来划分,BIOS有5大功能:

1 .开机自我测试:检查中央处理器 (CPU) 及各控制器的状态是否正常;
2.初始化动作:针对内存、主板芯片组、显卡及周边装置做初始化动作;
3.记录系统设定值:提供各元件的基本设定,如显示器、键盘、处理器、内存等;
4.提供常驻程式库:提供操作系统或应用程式呼叫的中断常驻程式,如INT 10H等;
5.加载操作系统:从储存装置中加载操作系统到随机存取内存。

通俗来讲,我们可以将BIOS看作是专门与硬件沟通的微型操作系统,通常使用与CPU相容的组合语言来编写(机械语言+高级语言)。但在笔者看来,BIOS既是英文的首字母缩写,同时也具有希腊文字“βιοζ”(生命)的寓意。

追根溯源:BIOS诞生与EFI横空出世

真正的BIOS技术起源于IBM PC/AT机器的流行,以及第一台由康柏公司研制生产的“克隆”
PC。在启动的过程中,BIOS担负著初始化硬件、检测硬件功能以及引导操作系统的责任。在早期,BIOS还需要提供一套运行时的服务程序给操作系统或者应用软件来使用。

可以说,BIOS是整台计算机核心的灵魂,所以必须找到一个合适的容器来妥善保管;否则一旦魂飞魄散,那整台计算机也就失去了工作的能力。由于特殊的工作要求,BIOS中的微代码程序必须存放在一个断电后能够不丢失信息的只读存储器中,当系统加电或者被重置时,处理器的第一条指令会将地址定位到BIOS存储器中,让初始化程序开始执行。


已经上市的EFI主板的开机界面

英特尔公司在2000年的时候开发出可扩展固件接口(Extensible Firmware Interface),这是一种与BIOS功能上类似,但是编程语言更加高级的开发与控制界面,后被称为EFI规范;由于BIOS在计算机用户的印象中根深蒂固,所以很多时候大家又将EFI称为“EFI BIOS”。为了推广EFI,业界很多著名公司走到一起并成立了统一可扩展固件接口论坛(UEFI Forum),之后英特尔将EFI 2.1规范分享给业界,用以制定新的国际标准UEFI规范,其目前新的版本为2.1b。根据英特尔公司的预测,今后几年将有超过半数的计算机主板使用EFI来编写底层的操作语言。EFI不同于传统的使用16位编译的BIOS程序,它是基于32位程序的,因此与我们平常使用的操作系统更为接近,可以提供更友好的操作项目与菜单。

沧海桑田:BIOS容器的变化

对于熟悉硬件的朋友们来讲,一说到BIOS除了前面提到的软件代码,我们还会联想到主板或者是显卡上的芯片—从某种意义上来讲,软件代码是Firmware(固件),而“硬件BIOS”则是存放
Firmware的芯片。之前较早期的BIOS芯片是不能够被修改的,也就是一次固化成型;而后使用的是可以用紫外线擦除的EEPROM,发展到现在通常使用的是可以反复擦写的Flash材料。


LPC总线封装的BIOS芯片

目前比较常见的BIOS封装芯片有两种。一种是PLCC封装的具有32个针脚的BIOS芯片,采用
LPC总线(Low Pin Count总线),由于该总线已经比较落后,不论是传输速率还是运行频率已经没有优势,因此正逐步被SPI总线取代。32针BIOS芯片多见于比较早的型号,AWARD BIOS也比较偏好使用该型BIOS。


SPI总线封装的BIOS芯片

第二种便是具有8个针脚的基于SPI总线(Serial Peripheral Interface Bus)的BIOS,是一种串行总线。相比LPC总线的32针BIOS,SPI总线具有更高的传输速率,而且需要的针脚数也大为减少。如果我们要实现EFI BIOS等诸多需要高带宽的应用需求时,就只能使用SPI总线的的BIOS。

刨根问底:BIOS如何来工作?

在下图中大家可以看到BIOS的基本工作时序图,这个过程从电源给主板供电时就开始了。我们按下计算机电源按钮的那一步,实际上是这个过程中的第三步,BIOS会将主板上的开机信号线与地线短接— 将PWRBTN#信号拉低,以此来开启ATX电源。经过一系列的信号传输之后,到第十步
BIOS就会接管整个系统,这个过程由主板上的快闪存储器(Flash Memory)执行,并将芯片以及内存子系统初始化。


典型的Intel平台的开机时序图

接着,BIOS会将自身的微代码从快闪存储器解压到系统的主内存,并在那边开始执行。这些微代码中首先包含的是诊断功能,以保证某些重要的元器件,像是键盘、磁盘以及各种输入输出埠(接口),可以正常运作并正确的初始化。几乎所有的BIOS都会选择性地执行 CMOS 内存的设定程式,也就是BIOS会自动读取使用者自定义的很多材料,如时间、日期、硬盘启动细节等。这里尤其要提到的一点是硬盘启动细节,现在所有的BIOS都可以让用户选择从哪个设备开始引导启动,或者从哪块硬盘上加载操作系统,这对与安装操作系统或者使用多个操作系统的用户来讲非常方便。

软硬搭配:BIOS中的Firmware

讲到这里,大家对BIOS的原理、硬件以及工作方式有了大致的了解。下面我们再来看看BIOS里面的固件,也就是Firmware信息。

从某种意义上来讲,Firmware就是使用编程的语言来诠释硬件的功能。相对于终消费者而言,Firmware的使用意义并不大,而对于硬件设备本身而言,Firmware就是不可或缺的了。规律性的固件升级可以提升硬件效能以及可靠性,而且当电子产品售出之后,用户还可以通过升级Firmware的方法让设备得到更新,例如我们通过刷新DVD刻录机的Firmware让刻录机能够支持更多的盘片,并取得更好的刻录效果;很多蓝光播放机和游戏机通过刷新Firmware来不断改变密钥并预防盗版……对于计算机的主板而言,Firmware的作用无疑是让主板能够支持更多的硬件设备,例如增加CPU的支持等。


CPUID就是处理器厂商对旗下产品的序列标识

除了这些之外,在BIOS中还包括了网络芯片的相关信息(如MAC Address),商用平台主板的
Management Engine(ME)也包含在BIOS中。

当然,不适当地执行或者终止BIOS更新可能导致电脑或者其他电子设备无法正常使用。例如十年前爆发的CIH病毒,就是针对主板BIOS进行攻击,让BIOS失效进而整台计算机也就无法正常运作。为了减少或者避免因BIOS损坏而造成的“怠机”事故,很多主板采用了备份BIOS的办法,也就是常说的“双BIOS主板”。

除了预防主BIOS损坏而增加辅助BIOS之外,现在还有另外一种双BIOS设计,即针对市面上流行的同时支持DDR2与DDR3内存的COMBO主板,其中一枚芯片负责DDR2的引导,而另外一枚则负责引导DDR3内存。

现在有很多主板在BIOS损坏之后,可以通过闪盘启动的方式进行修复,用户只需要到网上下载主板对应的BIOS ROM,放在闪盘根目录下,然后接到计算机上即可。

在有些BIOS中,存在一个“启动区块(Bootblock)”—这是一个只读区域,无法被覆写程序所修改。这个区域会在CMOS信息执行前被启动,验证微代码的其它部分是否存在错误。如果通过检查码或者校验码发现有不符合的地方,启动区块就会认为主BIOS已经被损坏,此时可以调用辅助BIOS或者要求用户插入闪盘、软驱等工具来修复或者更新被损坏的部分。
这就是很多主板所谓“修复技术”的由来,虽然在名称上略有差别,但其基本的原理是一致的。

主要的BIOS供应商

以前曾经有过数家BIOS生产企业,但经过几轮兼并或者收购之后,目前存活下来的主要BIOS供货商有两家,分别是AMI和Phoenix-AWARD。


AMI

在消费者卡看来,两家巨头在BIOS界面上都拥有明显的特点。如图所示,左边的是AMI BIOS,右边的则是AWARD BIOS(Phoenix BIOS)。前者使用的BIOS文件为ROM格式,后者使用的则是BIN格式。其实除了界面不同之外,其内部结构也大相径庭(涉于篇幅这里就不再赘述了),我们在使用
BIOS文档进行修改时也需要用到不同的工具。


Phoenix-AWARD

普通用户接触到多的就是重装系统时进入BIOS修改启动顺序了,DIYer常用的零售主板上很多都是按Delete键进入,而笔记本电脑以及品牌整机则会因为不同厂家、不同主板设定为F1或者F2键。

掀起你的盖头来:通过修改软件看BIOS信息

在介绍完BIOS的基础知识之后,再让我们通过修改软件来进一步了解BIOS中所包含的信息。

Bootblock是前面我们介绍的BIOS启动区块,当BIOS受到损坏时,只要Bootblock还是完好的,则一般用户可以自行恢复。反之,当Bootblock也被损坏之后,那就只有返厂或者通过维修点专用的BIOS烧录机来重写BIOS了。

在Microcode部分存储了CPU的CPUID(英特尔平台)。当处理器厂商推出新的处理器型号时,主板厂商通常会发布新的BIOS来支持新产品,这实际上就是在Microcode部分增加CPUID列表的过程。当然,如果因为硬件的限制,如CPU供电规格、针脚数量等发生了变化,那么就无法通过更新CPUID来支持新的产品。

SMBIOS即System Management BIOS,它定义了BIOS中的数据结构,SMBIOS和DMI是由行业指导机构Desktop Management Task Force(DMTF)起草的开放性的技术标准。其中,DMI设计适用于任何的平台和操作系统,DMI实际上充当了管理工具和系统层之间接口的角色,它建立了标准的可管理系统更加方便了电脑厂商和用户对系统的了解。

我们使用BIOS工具AMIBCP打开一个BIOS文件,查看DMI部分,可以看到"System Manufacture"和"System Model Name"字样。

对于品牌机而言,这些位置都已经填上了相应的厂商名称。比如,联想电脑的System
Manufacture这一栏就是lenovo,而方正则是founder。这些字串在安装Windows XP的时候,对于
OEM版本系统的激活,有着重要的意义(即SLP1.0,后面会介绍)。

在这里我们可以清楚地看到,主板BIOS的启动区(BootBlock)、多语言支持、Microcode(微代码)、SMBIOS、DMI Table等各种选项。

上图中MMTool打开的BIOS中,User Def ined部分其实就是用来添加SLP2.0的Pubkey和
Marker信息的。微软从Windows XP 开始引入了SLP(System-Locked Preinstallation)技术,用于OEM产品的辅助激活。

什么是DMI?

DMI即Desktop Management Interface,是BIOS的重要组成部分。DMI的主要组成部分是
Management Information Format(MIF)数据库。这个数据库包括了所有有关电脑系统和配件的信息。通过DMI,用户可以获取序列号、电脑厂商、串口信息以及其它系统配件信息。

需要指出的是,SLP仅用于品牌电脑以及笔记本电脑长厂商的OEM主板产品,不会在零售版或批量授权产品中出现。Windows XP采用的激活方式是SLP 1.0版,其原理是检测BIOS中是否存在由OEM硬件厂家设置的特定SLP字串,如果有,则认为软件为OEM合法授权,成为激活状态;否则,则要求用户输入OEM硬件附带的COA号码,并通过网络或电话激活软件。


将字串修改后刷新到主板中,操作系统的系统信息也会显示出相关的信息

由于认证原理简单,很快被熟悉BIOS原理及相关软件操作的人破解,随意在非OEM硬件以及
DIY的兼容机主板上实现一样的效果。普遍流行的做法是使用DMI编辑软件,在BIOS的DMI数据区加入SLP字串,使Windows XP认为OEM授权合法,成为激活状态。


SLP的认证机制

不过在微软的Windows Vista操作系统中,将SLP技术升级到2.0版本。SLP 2.0根据1.0的不足,加强了验证的技术,使其由简单的验证字串,变为验证BIOS中的SLP证书、标志以及硬件相关的特征。SLP 2.0在BIOS的ACPI中扩展出了一个新表—SLIC,用于储存SLP证书公钥(SLP PubKey)以及SLP授权标志(SLP Marker)。

SLP 2.0技术的验证具体过程如下:

1.如果检测到SLP产品密钥(SLP与用的CD-KEY),SLP验证过程启动。
2.Windows确认其包含(导入)的OEM证书是微软签名的。如果检测到OEM证书,则SLP验证继续进行。如果未检测到OEM证书,则SLP验证失败,要求重新进行产品激活。
3.OEM证书将同ACPI_SLIC BIOS表中的OEM公钥做比较。如果OEM证书和BIOS中的OEM公钥匹配,则SLP验证过程继续迚行。如果OEM证书和BIOS中的OEM公钥不匹配,则SLP验证失败,要求进行产品激活。
4.ACPI_SLIC BIOS表中也包含SLP标志。通过OEM公钥验证SLP标志,如通过,SLP验证过程继续。否则,SLP验证失败,要求进行产品激活。
5.SLP标志中包括OEMID字串和OEMTableID字串,与ACPI_RSDT和ACPI_XSDT的OEMID和OEMTableID比较,若其中之一与SLP标志中的字串完全相符,则SLP验证通过。否则,SLP验证失败,要求进行产品激活。

一台电脑的BIOS的SLIC表中是否添加了相关的OEM厂商信息,通过使用一些工具,例如Read&WriteUtility就可以看到。

好了,下面我们就来简单分析一下SLP2.0的结构吧,使用UltraEdit打开SLIC表中的相关内容。

SLIC表格一般是340个字节,其中Pubkey为156个字节,Marker为182个字节,2个空字节用于补全。一般Marker中会包含厂商的名称。Pubkey和Marker都采用RSA加密算法。值得一提的是,近微软要推出的Windows 7操作系统使用了SLP2.1,其原理和SLP2.0大体是相同的。

写在后

随着技术的发展,BIOS也经历了从无到有,从小大大,从简单到复杂的发展变迁。作为计算机底层默默奉献的“底层工作人员”,BIOS也见证了PC硬件一日千里的发展速度。在很多人看来深不可测的BIOS,经过我们的讲解之后各位是否发现其实并不神秘。

在BIOS的研发过程中,工程师们也使用了很多人性化以及模块化的设计,这样经过层层抽丝剥茧之后,大家甚至会觉得BIOS触手可及。在经过简单的研究之后,我们甚至可以自行修改一些简单的项目,例如更改开机LOGO,或者把自己DIY的电脑变成你想要的“品牌机”,DIY的精神就是发挥自己的智慧,充分发挥BIOS的功用,让它尽可能为我们所用。

分享到:

用户评论

用户名:

密码: