一、BIOS是什么在之前的文章《》中,我们认识了主板。主板包括很多芯片,今天围绕 BIOS 芯片展开。
BIOS这个词汇最早出现在1975年,全称叫做基本输入输出系统(Basic Input Output System)。自1981年IBM PC机上市,它才真正发扬光大从此一发不可收拾,翻开了波澜起伏的历史。IBM PC 系统大致包括三个部分:硬件、软件和软硬件的中间层 BIOS,硬件的核心采购自Intel,软件操作系统采购自初生的微软,只有 BIOS 是 IBM 自己做出来的。
BIOS 是为电脑中的硬件提供服务的,例如之前提到的 CPU、内存还有后面我们将会提到的硬盘等。它属于只读存储器,包含了系统启动程序、系统启动时必需的硬件设备的驱动程序、基本的硬件接口设备驱动程序。目前,主板中的 BIOS芯片主要由诸多公司提供。
二、BIOS 供应商AMI(American Megatrends Inc.),BIOS 领导者。AMI 公司 1985年成立于美国亚特兰大,创始人为 Pat Sarma 和 Subramonian Shankar。AMI 起初主要生产完整主板,服务定位于高端客户,其第一名客户为 PCs Ltd,即现在的 Dell,是世界上最先推出适用于 Intel 386 处理器主板的公司。
由于主板制造产业逐渐往中国台湾转移,AMI 则将业务聚焦于 OEM、ODM(主要为 BIOS 固件)技术。目前 AMI 在全球拥有近1500名员工,其中 85% 为工程开发相关人员。
AMI 主要产品线有 UEFI BIOS 固件与控制器(EC)、MegaRAC 远程固件管理解决方案、AMI 背板控制器产品系列、诊断实用程序和工程服务。其中,Aptio V 是 AMI 的最新一代 UEFI BIOS 固件,可满足所有平台(X86与非X86)的需求。Aptio 4则从传统 BIOS 演化而来,同样符合 UEFI 规范。在针对 UEFI 的支持服务方面,AMIDiag 目前是市场上唯一可用的硬件诊断解决方案。
Phoenix(Phoenix technologies Ltd.),BIOS 先行者。1979 年 9 月,Phoenix 在美国马萨诸塞州波士顿成立,总部位于加利福尼亚州帕萨迪纳。Phoenix 率先开创了净室设计(也称防火墙技术),通过逆向工程来克隆出了自有BIOS。Phoenix依托自主知识产权进入了发展的黄金期。
1988年,Phoenix 成功 IPO 上市(PTEC),并于 20世纪90年代收购 Quadtel 和 Award 两家实力 BIOS 厂商,逐渐成为当时 BIOS 产业的龙头,产品涵盖了低端到高端的各类市场。
21世纪初,受 PC 市场衰退的影响,BIOS 固件单价下滑,公司采取了一次性授权 BIOS 的方式,以提高公司短期收入。此外,不成熟的并购和市场探索也导致了 Phoenix 经营状况恶化,公司于2006年出现巨亏。2010 年 8 月,美国投资公司 Marlin Equity Partners 以 1.39 亿美元收购了 Phoenix 流通股,Phoenix 宣布退市,同时也逐渐剥离了非 BIOS 业务群。截至 2009 年,公司约有300名员工。
中国市场方面,2000 年,Phoenix 在南京成立了中国分公司菲尼克斯软件(中国),2009 年,由于经营问题,退出中国市场。
Insyde(系微),是BIOS 后起之秀。1998年,Insyde 通过收购美国系腾科技(SystemSoft)成立,并于2003年于中国台湾上市(6231.TWO)。不同于 AMI 和 Phoenix,Insyde 在切入 BIOS 领域之时就着眼于 UEFI,其业务高度集中于 BIOS/BMC 技术,覆盖Intel、AMD、微软等 大厂。受益于中国台湾 PC 市场发展和 Intel 对 UEFI BIOS 的强制推广,Insyde 快速跃居至 BIOS 市场的第二把交椅。
2018年,Insyde旗舰产品 Insyde H2O BIOS 实现营收 7.81亿新台币,占总营收比为 92%;BMC 产品 Supervyse 实现营收 0.58亿新台币,占比 7%;其他业务实现营收 0.10亿新台币,占比 1%。截止至2018年12月31日,Insyde共有员工439人,其中384人为研发技术人员,占比87.5%。
三、BIOS引导过程BIOS系统设置程序
BIOS系统设置程序,就是通常我们在开机时按下Del键进入的程序,习惯上也称为“BIOS设置”,用来配置系统基本情况、CPU特性、硬盘、PCI,板载网卡等硬件的信息。这些信息存放在一块可读写的CMOS芯片中。CMOS(Complementary Metal Oxide Semiconductor,互补金属氧化物半导体)本身只是一块存储器,只具有保存数据的功能,由系统通过一块后备电池供电,因此无论是在关机状态,还是遇到系统掉电情况,CMOS信息都不会丢失。对CMOS中各项参数的设定和修改要通过专门的程序进行,BIOS系统设置程序就这样的程序。
BIOS中断服务程序
BIOS中断服务程序实质上是系统中软件与硬件之间的一个可编程接口,主要用来在程序软件与硬件之间实现衔接。例如,操作系统中对软盘、硬盘、光驱、键盘、显示器等外围设备的管理,都是直接建立在BIOS系统中断服务程序的基础上,可以通过汇编代码调用INT 5、INT 13等中断而直接调用BIOS中断服务程序。
BIOS加电自检务程序
PC按通电源后,系统首先由POST(Power On Self Test,上电自检)程序来对内部各个设备进行检查。通常完整的POST自检将包括对CPU、640K基本内存、 1M以上的扩展内存、ROM、主板、CMOS存贮器、串并口、显示卡、软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。
BIOS系统引导程序
系统在完成 POST自检后,就首先按照CMOS设置中保存的启动顺序搜索硬盘、CD-ROM、网络服务器等有效地启动驱动器,读入操作系统引导记录,然后将系统控制权交给引导记录,并由引导记录来完成系统的顺利启动。
BIOS引导过程
系统BIOS所在的ROM是被设计成CPU可直接寻址的,而且地址范围也是固定的,从F0000H至FFFFFH共64KB。PC按通电源后,电源设备开始向主板和其他设备供电,此时电压还不太稳定,主板上的控制芯片组会向CPU发出并保持一个Reset(重置)信号,让CPU内部自动恢复到初始状态,但CPU在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了(当然从不稳定到稳定的过程只是一瞬间的事情),它便撤去RESET信号(如果是手工按下计算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号)CPU进行重置,IP寄存器的值设成0,CS寄存器的值设成0xFFFF。也就是说CPU马上从地址FFFF0H处开始执行指令,这个地址在系统BIOS空间的地址范围内,CPU就是从这个固定的地址开始执行BIOS程序的。
各厂家的BIOS程序不尽相同,但基本都是完成POST自检及本地设备的枚举和初始化,包括对硬件执行一系列的测试,用来检测现在都有什么设备以及这些设备是否能正常工作,在这个阶段中,会显示一些信息,例如BIOS版本号等;初始化硬件设备,这个阶段在现代基于PCI的体系结构中相当重要,因为它可以保证所有的硬件设备操作不会引起IRQ线与I/O端口的冲突,在本阶段的最后,会显示系统中所安装的所有PCI设备的一个列表等。
BIOS自检和初始化完成后,开始执行BIOS引导程序。由于系统BIOS空间只有64KB大小,把Linux内核放在这个空间里让BIOS引导程序直接引导是不可能的,只能把内核放在硬盘里(或其他设备,如USB或网络上, BIOS根据启动顺序的设置依次查找),然后再从硬盘里引导Linux内核。但是,这时系统还处于实模式中,寻址能力只有1MB,没有硬盘上的文件系统等信息,不会直接的引导整个Linux内核,而是通过先载入一个引导装入程序,然后由这个引导装入程序来引导Linux内核。
引导装入程序通常放在第一块硬盘(或其他设备)的第一个扇区里,这个扇区就是主引导扇区,包括硬盘主引导记录MBR(Master Boot Record)、分区表DPT(Disk Partition Table)及主引导扇区标志“55AA”,共512个字节。系统BIOS引导程序的唯一任务就是把存放在MBR中的引导装入程序载入内存的0x7C00位置(可以通过BIOS中断方式INT 13h读取磁盘指定扇区的内容),然后CPU跳转到这个地址,把控制权交给引导装入程序继续引导系统。Grub(GRand Unified Bootloader)就是这样的一个引导程序。
GRUB引导过程
GRUB(GRand Unified Bootloader)是一个多重启动管理器。它可以在多个操作系统共存时选择启动哪个系统,可以启动的操作系统包括Linux, FreeBSD, Solaris, NetBSD, BeOS, OS/2, Windows 95/98 /NT /2000。它可以载入操作系统的内核和初始化操作系统(如Linux, FreeBSD),或者把启动权交给操作系统(如Windows 98)来完成启动。
GRUB的实质是一个mini os,它拥有shell,支持script,支持特定文件系统等。GRUB由stage1,stage1_5,stage2以及/boot/grub目录下的诸多文件(包括Grub的配置文件与相关文件系统定义文件等)组成。
stage1被编译成了一个512字节的img,写在硬盘的0面0道第1扇,它所做的唯一的事情就是装载第二引导装载程序stage2。
stage1_5写进了MBR后的15个扇区中(因为e2fs_stage1_5大小为7.5k)。硬盘上第一个文件系统分区的开始扇区最小也只能从0柱面,1磁头,1扇区开始。就是说MBR所在0磁头就只用到了1个扇区而已(其它扇区都是未用的,不属于任何分区),按照现在硬盘的规格来说,一般一个柱面磁头都有60 个扇区,所有将stage1_5写进MBR以后的扇区中,不会影响正常的文件系统分区。stage1_5就是文件系统的解释代码,根据/boot分区(或/boot所在分区)的具体文件系统类型而异,如:ext3分区的话就是 e2fs_stage1_5。在stage1_5没有被加载以前,系统无法识别任何文件系统(但是可以通过BIOS中断方式INT 13h读取磁盘指定扇区的内容), 加载stage1_5以后就可以识别/boot所在分区的文件系统了,从而为加载stage2作好了准备。
stage2是grub最核心的部分有100多KB,所以只能放在文件系统中,放在/boot分区里,放在这里的通常还有Linux内核映像文件。加载stage2后grub会根据menulist或用户输入加载Linux内核映像文件,即将内核映像装入地址0x90000的内存中,将内核入口装入到地址0x90200的内存中,然后跳转到内核入口处开始启动内核。
UEFI 的诞生通过上面的图片可以看见 BIOS 的界面很简陋,对于英语不流畅的人不太友好,科技行业的特点就是更新换代很快。UEFI 全称“统一的可扩展固件接口”,相比传统BIOS来说,它更易实现,容错和纠错特性也更强,从而缩短了系统研发的时间。它是一种新型的电脑启动系统,被认为是有传统 BIOS 的继任者。简单点说,它是一种更高级的BIOS。
UEFI基于32或64位模式,突破了传统BIOS16位代码寻址能力。达到了处理器的最大寻址,克服了BIOS代码运行缓慢的毛病。说人话就是:设置UEFI启动,系统启动时间会缩短。
UEFI采用的是图形化界面,可以使用鼠标进行设置。用户进入BIOS使用起来更直观,操作上更为简便。而且还能支持中文.
最重要的是,我们可以在 UEFI 下使用 2.2T 以上的硬盘做启动盘。如果你买了一个3T的硬盘,在传统BIOS下是无法用这个硬盘里的系统启动的,BIOS和UEFI的开机过程大概可以用下图来表示。
现在购买的新主板都是基于UEFI方式的,如果说有什么东西帮助UEFI打败了传统BIOS,那这些东西就是:标准接口、开放统一和开源了。