The Wayback Machine - https://web.archive.org/web/20221025113656/https://baike.sogou.com/kexue/d10208.htm

BIOS

编辑
一对20世纪80年代后期用于戴尔310计算机的AMD BIOS芯片

BIOS(/ˈbaɪɒs/ by-OSS;基本输入/输出系统(Basic Input/Output System)的缩写,也称为系统基本输入输出系统(System BIOS)、只读存储器基本输入输出系统(ROM BIOS)或PC基本输入输出系统(PC BIOS)是一种非易失性固件,用于在启动过程(开机启动)中执行硬件初始化,并为操作系统和程序提供运行时服务。[1] BIOS固件预装在PC的系统板上,是开机时运行的第一个软件。这个名字源于1975计算机程序控制/管理(CP/M)操作系统中使用的BIOS。[2][3] 原本属于IBM PC的BIOS已经被寻求创建兼容系统的公司进行了逆向工程改造。原始系统的接口作为事实上的标准。

现代PC中的BIOS初始化和测试系统硬件组件,并从大容量存储设备加载启动加载程序,然后初始化操作系统。在DOS时代,BIOS为键盘、显示器和其他输入/输出(I/O)设备提供了硬件抽象层,使应用程序和操作系统的接口标准化。最近的操作系统在加载后不使用BIOS,而是直接访问硬件组件。

大多数BIOS的实现都是专门设计用于特定的计算机或主板型号,通过与组成互补系统芯片组的各种设备进行接口。最初,BIOS固件存储在电脑主板上的(ROM)芯片中。在现代计算机系统中,BIOS的内容存储在闪存中,因此无需从主板上取下芯片就可以重写。这允许最终用户对BIOS固件进行简单的更新,这样就可以添加新功能或修复错误,但这也为计算机感染BIOS木马创造了可能性。此外,失败的BIOS升级可能会永久阻塞主板,除非系统为此提供某种形式的备份。

统一可扩展固件接口(UEFI)是传统PCBIOS的继承,旨在解决其技术缺陷。[4]

1 历史编辑

BIOS这个术语是由Gary Kildall创建的,[5][6] 1975年首次出现在CP/M操作系统中,[2][3][7][8][9][6] 描述了在启动期间直接与硬件接口的CP/M的机器特定部分。[3] (一台CP/M机器通常在其ROM中只有一个简单的启动加载程序。)

微软操作系统(MS-DOS)、PC操作系统(PC-DOS)或DR-DOS的版本包含一个分别名为“IO.SYS”、 "IBMBIO.SYS"或"DRBIOS.SYS"的文件。这个文件被称为“DOS BIOS”(也称为“DOSI/O系统”),包含操作系统中较低级别的特定于硬件的部分。它与底层的硬件专用但独立于操作系统的“系统BIOS”一起(驻留在ROM中),代表“CP/MBIOS”的模拟。

随着PS/2机器的引入,IBM将系统BIOS分为实模式部分和保护模式部分。实模式部分旨在提供与现有操作系统(如DOS)的向后兼容性,因此被命名为“CBIOS”(兼容BIOS),而“ABIOS”(用于高级BIOS)则提供了专门适用于多任务操作系统(如OS/2)的新接口。

2 用户界面编辑

原IBMPC和XT的BIOS没有交互用户界面。当开机自检(POST)没有进行到成功初始化视频显示适配器的程度时,错误代码或消息显示在屏幕上,或者会产生一系列编码的声音来发出错误信号。IBMPC和XT上的选项由主板和扩展卡上的开关和跳线设置。大约从20世纪90年代中期开始,BIOSROM通常包括一个“BIOS配置实用程序”(BCU[10])或“BIOS设置实用程序”,在系统启动时由一个特定的键序列访问。该程序允许用户通过键盘控制的交互式菜单系统,设置以前使用DIP开关设置的类型的系统配置选项。在过渡期间,与IBM兼容的PCs‍——包括将IBM AT‍——配置设置在电池支持的运行内存(RAM)中,并使用磁盘上而不是ROM中的可启动配置程序来设置该内存中包含的配置选项。磁盘由计算机提供,如果丢失,则系统设置无法更改。这同样适用于带有EISA总线的计算机,其配置程序被称为EISA配置实用程序(ECU)。

现代兼容Wintel的计算机提供了一个与20世纪90年代后期驻留在ROM中的基本上不变的设置程序;用户可以使用键盘和视频显示器配置硬件选项。此外,当启动时出现错误时,现代BIOS通常会显示用户友好的错误消息,通常以TUI样式显示为弹出框,并提供进入BIOS设置实用程序或忽略错误,并在可能的情况下继续。现代的Wintel机器可以将BIOS配置设置存储在闪存中,而不是电池支持的RAM,闪存可能与保存BIOS本身的闪存相同。

3 操作编辑

3.1 系统启动

早期英特尔处理器从物理地址000FFFF0h开始。后来的处理器系统提供了从系统ROM开始运行BIOS的逻辑。 [11]

如果系统刚刚启动或按下重置按钮(“冷启动”),则运行完全开机自检(POST)。如果按下Ctrl+Alt+Delete(“热启动”),存储在由BIOS测试的非易失性BIOS存储器(“CMOS”)中的特殊标志值允许绕过冗长的开机自检和存储器检测。

开机自检识别并初始化系统设备,如中央处理器(CPU)、RAM、中断和直接存取存储器控制器以及芯片组、视频显示卡、键盘、硬盘驱动器、光盘驱动器和其他基本硬件的其他部分。

早期的IBM PC在开机自检中有一个例程,可以通过键盘端口将程序下载到RAM中并运行它。 [12][13] 该功能旨在用于工厂测试或诊断。

3.2 启动过程

完成选项ROM扫描并调用所有检测到的具有有效校验和的ROM模块后,或者在不扫描选项ROM的BIOS版本开机自检后,BIOS立即调用INT 19h开始启动处理。开机后,加载的程序也可以调用INT 19h来重新启动系统,但必须小心禁用中断和其他可能干扰BIOS重新启动过程的异步硬件进程,否则系统在重新启动时可能会挂起或崩溃。

当调用INT 19h时,BIOS会尝试在“启动设备”上定位启动加载程序软件,例如硬盘、软盘、CD或DVD。它加载并执行它找到的第一个启动软件,让它控制PC。[14]

BIOS使用设置在电可擦只读存储器(EEPROM)、RAM启动设备(CMOS RAM),或者在最早的PC中的指拨开关(DIP switches)的启动设备。BIOS通过尝试加载第一个扇区(启动扇区)来检查每个设备,以确定其是否可启动。如果无法读取扇区,BIOS将转到下一个设备。如果扇区读取成功,在接受启动扇区并考虑设备可启动之前,一些BiOS还将检查扇区最后两个字节(512字节长)中的启动扇区签名0x55 0xAA。

找到可启动设备后,BIOS将控制权转移到已加载的扇区。除了可能检查最后两个字节中的启动扇区签名之外,BIOS不解释启动扇区的内容。分区表和BIOS参数块等数据结构的解释由启动扇区本身的启动程序或通过启动过程加载的其他程序完成。

诸如网络适配器之类的非磁盘设备尝试通过由其选项ROM或集成到主板BIOSROM中的等效程序来启动。因此,选项ROM也可能影响或取代主板BIOSROM定义的启动过程。

启动优先级

用户可以选择由BIOS实现的启动优先级。例如,大多数计算机都有一个可启动的硬盘,但通常有一个具有更高启动优先级的可移动媒体驱动器,因此用户可以启动一个可移动磁盘。

在大多数现代BIOS中,启动优先级顺序可以由用户配置。在旧的BIOS中,只有有限的启动优先级选项可以选择;最早的BIOS实施了固定优先级方案,首先是软盘驱动器,其次是固定磁盘(即硬盘),通常不支持其他启动设备,但这些规则会通过安装的选项ROMs进行修改。早期电脑中的BIOS通常也只能从第一个软盘驱动器或第一个硬盘驱动器启动,即使安装了两个驱动器。

在使用El Torito光盘介质启动标准的条件下,光驱实际上模拟了一个3.5英寸高密度软盘到BIOS,用于启动目的。读取CD-ROM或DVD-ROM的“第一扇区”并不是像在软盘或硬盘上那样简单定义的操作。此外,介质的复杂性使得很难在一个扇区中编写有用的启动程序。可启动虚拟软盘可以包含软件,该软件以其本机格式提供对光学介质的访问。

启动失败

在原来的IBM PC机和XT上,如果找不到可启动磁盘,则通过调用INT 18h启动ROM BASIC。由于ROM中使用BASIC的程序很少,克隆PC制造商将其排除在外;然后,无法从磁盘启动的计算机将显示“No ROM BASIC”并停止(响应INT 18h)。

后来的计算机会显示一条信息,如“找不到可启动磁盘”;有些会提示插入磁盘并按下键重试启动过程。当启动过程失败时,现代的BIOS可能什么也不显示,或者可能自动进入BIOS配置实用程序。

3.3 启动环境

启动程序的环境非常简单:CPU处于真实模式,通用寄存器和段寄存器未定义,但CS、SS、SP和DL除外。CS始终为零,IP初始值为0x7C00。因为启动程序总是在这个固定地址加载,所以不需要重新定位启动程序。DL可以包含启动设备的驱动器号,与INT 13h一起使用。SS:SP指的是一个有效的堆栈,这个堆栈应该足够大以支持硬件中断,但是SS和SP是未定义的。(为了服务中断,必须建好堆栈并且启用中断,以便系统计时器timer-tick中断(BIOS总是至少使用该中断来维持一天中的时间计数,并且在开机自检期间初始化该中断)处于活动状态,并且保证键盘能够工作。即使没有调用BIOS键盘服务,键盘也能工作;接收击键并将其放入由BIOS维护的15个字符的预键入缓冲区中。)启动程序必须建立自己的堆栈,因为由BIOS建立的堆栈大小是未知的,其位置也是可变的;虽然启动程序可以通过检查SS:SP来检查默认堆栈,但是无条件地建立新堆栈更容易也更短。

启动时,所有BIOS服务都可用,地址0x00400以下的内存包含中断矢量表。BIOS POST已根据需要初始化系统定时器、中断控制器、直接记忆器存取(DMA)控制器和其他主板/芯片组硬件,以使所有BIOS服务进入就绪状态。系统动态随机存储内存(DRAM)已经为传统内存和扩展内存(但扩展内存不是必要的)中的所有系统动态随机存储内存刷新,并且正在运行。对应于BIOS中断的中断向量已被设置为指向BIOS中的适当入口点,由BIOS初始化的设备的硬件中断向量已被设置为指向BIOS提供的中断,其他的一些中断,包括BIOS为要挂钩的程序生成的中断,已被设置为立即返回的默认虚拟中断。BIOS在地址0x 00400–0x 004 ff中保留一个系统内存块,在开机自检期间初始化各种参数。启动程序可以使用地址0x00500及以上的所有内存;它甚至可能会覆盖自己。

4 扩展(选项ROMs)编辑

外围卡,如一些硬盘驱动器控制器和一些视频显示适配器,都有自己的BIOS扩展选项ROM,为BIOS提供额外的功能。这些扩展中的代码在BIOS从大容量存储启动系统之前运行。这些ROM通常测试和初始化硬件,添加新的BIOS服务,并用它们自己版本的这些服务来扩充或替换现有的BIOS服务。例如,一个SCSI控制器通常有一个BIOS扩展ROM,它增加了对通过该控制器连接的硬盘的支持。有些视频卡有扩展ROM,用自己的视频服务取代主板BIOS的视频服务。BIOS扩展ROM获得了对机器的完全控制,因此它们实际上可以做任何事情,并且它们可能永远不会将控制权归还给调用它们的BIOS。扩展ROM原则上可以包含整个操作系统或应用程序,或者它可以实现完全不同的启动过程,例如从网络启动。通过移除或插入包含BIOS扩展ROM的适配器卡(或ROM芯片),可以完全改变与IBM公司兼容的计算机系统的操作。

主板BIOS通常包含代码来访问启动系统所需的硬件组件,如键盘、显示器和存储器。此外,诸如SCSI、RAID、网络接口卡和视频卡等插件适配器卡通常包含它们自己的BIOS(例如视频BIOS),补充或替换给定组件的系统BIOS代码。甚至内置在主板上的设备也可以这样运行;他们的选项ROM可以作为单独的代码存储在主BIOS闪存芯片上,并且可以与主BIOS同时升级,也可以与主BIOS分开升级。

如果主BIOS不支持外接卡,并且在加载操作系统之前需要通过BIOS服务初始化或访问外接卡,则外接卡需要选项ROM(通常这意味着在启动过程中需要ROM)。即使不需要,选项ROM也可以允许适配器卡在启动开始后无需从存储设备加载驱动程序软件就可以使用——使用选项ROM,无需花费时间加载驱动程序,驱动程序不占用内存或硬盘空间,ROM上的驱动程序软件始终与设备在一起,因此两者不会意外分离。另外,如果ROM在卡上,外围硬件和由ROM提供的驱动程序软件都一起安装,而不需要额外安装软件。ROM在一些早期PC系统(特别是包括IBM PCjr)上的另一个优势是ROM比主系统随机存取存储器(RAM)更快。(在现代系统中,情况正好相反,BIOS ROM代码通常被复制(“隐藏”)到RAM中,这样它会运行得更快。)

有许多方法和实用程序可以检查各种主板BIOS和扩展ROM的内容,如Microsoft DEBUG或Unix dd。

4.1 启动程序

如果扩展ROM希望以合作的方式改变系统启动的方式(例如从网络设备或BIOS没有驱动程序代码的小型计算机系统接口(SCSI)适配器),它可以使用BIOS启动规范(BBS)应用编程接口(API)来注册它这样做的能力。一旦扩展ROM使用BBS API,用户可以从BIOS的用户界面中选择可用的启动选项。这就是为什么大多数兼容BBS的PCBIOS的实现不允许用户进入BIOS的用户界面,直到扩展ROM完成执行并向BBSAPI注册的原因。该规范可从ACPICA网站下载。官方名称是BIOS启动规范(1.01版,1996年1月11日)。[15]

此外,如果扩展ROM希望单方面改变系统启动的方式,它可以简单地挂接INT 19h或通常从中断19h调用的其他中断,例如INT 13h,即BIOS磁盘服务,以拦截BIOS启动过程。然后,它可以用自己的一个启动过程替换BIOS启动过程,或者它可以只通过将自己的启动操作插入其中,通过阻止BIOS检测某些设备为可启动的,或者两者兼有来修改启动顺序。在发布BIOS启动规范之前,这是扩展ROM为主板的本机BIOS不支持启动的设备实现启动功能的唯一方法。

4.2 初始化

在主板BIOS完成开机自检后,大多数BIOS版本搜索选项ROM模块,也称为BIOS扩展ROM,并执行它们。主板BIOS扫描“上部内存区域”中的扩展ROM(地址0xA000及以上的x86实模式地址空间部分),并按顺序运行找到的每个ROM。为了发现内存映射的ISA选项ROM,一个BIOS实现在两个KiB边界上扫描0x0C0000到0x0F0000的实模式地址空间,寻找一个两字节ROM签名:0x55后跟0xAA。在有效的扩展ROM中,这个签名后面跟一个字节,表示扩展ROM在实际存储器中占用的512字节块的数量,下一个字节是选项ROM的入口点(也称为“入口偏移量”)。计算指定数量的512字节块的校验和,如果ROM具有有效的校验和,则BIOS将控制权转移到入口地址,在正常BIOS扩展ROM中,入口地址应该是扩展初始化例程的开始。

此时,扩展ROM代码接管工作,通常测试和初始化它控制的硬件,并注册中断向量供启动后应用程序使用。它可以使用BIOS服务(包括那些由先前初始化的选项ROM提供的服务)来提供用户配置界面、显示诊断信息或做它需要的任何其他操作。选项ROM可能不会返回到BIOS,从而完全抢占了BIOS的启动顺序。

选项ROM通常应该在完成初始化过程后返回到BIOS。一旦(如果)选项ROM返回,BIOS继续搜索更多的选项ROM,找到时调用每个选项ROM,直到存储器空间中的整个选项ROM区域被扫描。

4.3 物理位置

选项ROMs通常位于适配器卡上。然而,原来的PC机,也许还有PC机XT,在主板上有一个备用的ROM插槽(IBM称之为“系统板”),可以插入一个选项ROM,包含BASIC解释器的四个ROM(ROMs)也可以被移除,并用可以是选项ROM(option ROMs)的定制ROM(custom ROMs)代替。IBM PCjr在电脑中的独特之处在于,它的前面有两个ROM盒式磁带插槽。这些插槽中的盒式磁带映射到用于选项ROM的上部存储区域的同一区域,并且盒式磁带可以包含可供BIOS识别的选项ROM模块。盒式磁带还可以包含其他类型的ROM模块,如基本程序,它们的处理方式不同。一个PCjr盒可以包含几个不同类型的ROM模块,可能一起存储在一个ROM芯片中。

5 操作系统服务编辑

BIOSROM是根据特定制造商的硬件定制的,允许以标准化的方式向程序(包括操作系统)提供低级服务(例如读取击键或将数据扇区写入软盘)。例如,一台IBM PC可能有单色或彩色显示适配器(使用不同的显示内存地址和硬件),但是可以调用一个标准的BIOS系统调用,以文本模式或图形模式在屏幕上的指定位置显示字符。

BIOS提供一个小的基本输入/输出功能库来操作外围设备(如键盘、基本文本和图形显示功能等)。当使用微软磁盘操作系统(MS-DOS)时,应用程序(或MS-DOS)可以通过执行INT 13h中断指令来访问磁盘功能,或通过执行许多其他已记录的BIOS中断调用之一来访问视频显示、键盘、磁带和其他设备功能来访问BIOS服务。

旨在取代这一基本固件功能的操作系统和执行软件为应用软件提供了替代软件接口。应用程序也可以为自己提供这些服务。甚至早在20世纪80年代的MS-DOS下,程序员就发现使用BIOS视频服务进行图形显示非常缓慢。为了提高屏幕输出速度,许多程序绕过BIOS,直接对视频显示硬件进行编程。其他图形程序员,特别是但不仅限于演示场景中的程序员,注意到PC显示适配器的技术能力不受IBM公司BIOS的支持,如果不绕开它就无法利用。由于兼容AT的BIOS以英特尔实模式运行,在286及更高版本处理器上以受保护模式运行的操作系统需要与受保护模式操作兼容的硬件设备驱动程序来替代BIOS服务。

在运行现代操作系统的现代个人计算机中,BIOS仅在系统软件的启动和初始加载期间使用。在显示操作系统的第一个图形屏幕之前,通常通过BIOS处理输入和输出。启动菜单(如Windows的文本菜单)允许用户选择要启动的操作系统、启动到安全模式或使用最后已知良好的配置,通过BIOS显示,并通过BIOS接收键盘输入。

大多数现代电脑仍然可以启动和运行传统的操作系统,如MS-DOS或DR-DOS,它们的控制台和磁盘I/O严重依赖于BIOS,前提是系统有BIOS或BIOS兼容的固件,而基于UEFI的电脑不一定如此。

5.1 处理器微码更新

自P6微体系结构以来,英特尔处理器已经可重新编程微码。[16][17] BIOS可以包含处理器微码的补丁,用于修复初始处理器微码中的错误;重新编程不是持久的,因此每次系统启动时都会加载微码更新。如果没有可重编程微码,将需要昂贵的处理器交换;[18] 例如,奔腾FDIV错误对英特尔来说是一个昂贵的失败,因为它要求召回产品,因为原始奔腾处理器的缺陷微码不能被重新编程。

5.2 识别

一些BIOS包含软件许可描述表(SLIC),这是原始设备制造商(OEM)在BIOS中放置的数字签名,例如Dell。SLIC被插入到ACPI表中,并且不包含活动代码。[19][20]

分发Microsoft Windows和微软应用软件OEM版本的计算机制造商可以使用SLIC来授权验证OEM Windows安装盘和包含Windows软件的系统恢复盘的许可。具有SLIC的系统可以用OEM产品密钥预激活,并且它们可以通过在BIOS中的SLIC验证一个XML格式的OEM证书,作为一种自激活的方式(参见系统锁定预安装,SLP)。如果用户重新安装Windows,他们需要同时拥有OEM密钥(SLP或COA)和SLIC的数字证书才能绕过激活。[19] 如果用户使用OEM提供的预定制映像执行恢复,则可以实现此功能。高级用户可以从OEM映像中复制必要的证书文件,解码SLP产品密钥,然后手动执行SLP激活。非正版Windows发行版的破解通常会编辑SLIC或模拟SLIC,以绕过窗口激活。

5.3 超频

一些BIOS实现允许超频,在这种操作中,为了保证性能,CPU被调整到比其制造商评级更高的时钟速率。然而,超频可能会严重损害冷却不足的计算机的系统可靠性,并且通常会缩短组件寿命。超频如果执行不当,也可能导致部件过热过快,以至于机械地自我损坏。[21]

5.4 现代用法

一些操作系统,例如MS-DOS,依赖BIOS来执行电脑内的大部分输入/输出任务。[22]

因为BIOS仍然以16位实际模式运行,所以直接调用BIOS服务对于受保护模式的操作系统来说效率低下。现代多任务操作系统在最初加载后不会使用BIOS服务,因此BIOS的主要部分的重要性大大降低。

后来的BIOS实现采用了更复杂的功能,如纳入高级配置和电源接口(ACPI)等接口;这些功能包括电源管理、热插拔和热管理。与此同时,自2010年以来,BIOS技术正处于向UEFI过渡的过程中。[4]

6 配置编辑

6.1 设置实用程序

历史上,IBMPC和XT中的BIOS没有内置的用户界面。早期 PC(XT类)中的BIOS版本不可由软件配置;相反,用户通过主板上的DIP开关设置选项。后来的计算机,包括所有与IBM兼容的80286CPU,都有一个电池支持的非易失性BIOS存储器(CMOSRAM芯片)来保存BIOS设置。[23] 这些设置,例如视频适配器类型、内存大小和硬盘参数,只能通过从磁盘运行配置程序来配置,而不能内置到ROM中。在IBM的自动测试机上插入一张特殊的“参考软盘”可以配置诸如内存大小之类的设置。

早期的BIOS版本没有密码或启动设备选择选项。BIOS是硬编码的,可以从第一个软驱启动,如果失败,也可以从第一个硬盘启动。早期先进技术机器(AT-class machines;AT是Advanced Technology的缩写)中的访问控制是通过物理钥匙锁开关实现的(如果电脑机箱可以打开,这不难实现)。任何能打开电脑的人都可以启动它。

后来,386类计算机开始将BIOS设置实用程序与BIOS代码一起集成到ROM中;如果按下某个键或组合键,这些计算机通常会启动到BIOS设置实用程序,否则会执行BIOS POST和启动过程。

在标准PC上授予BIOS设置实用程序

现代的BIOS设置实用程序有一个基于菜单的用户界面(UI),当电脑启动时,按键盘上的某个键即可访问该界面。通常密钥在早期启动时会被短时间显示,例如“按F1进入CMOS设置”。实际密钥取决于特定的硬件。BIOS设置实用程序中的功能通常包括:

  • 配置硬件组件,包括设置它们的各种操作模式和频率(例如,选择存储控制器对操作系统的可见性,或对CPU进行超频)
  • 设置系统时钟
  • 启用或禁用系统组件
  • 选择哪些设备是潜在的启动设备,以及尝试从这些设备启动的顺序
  • 设置不同的密码,例如用于安全访问BIOS用户界面功能本身并防止恶意用户从未经授权的便携式存储设备启动系统的密码、用于启动系统的密码或限制对其访问并保持分配的硬盘驱动器密码,即使硬盘驱动器被移动到另一台计算机

6.2 硬件监控

现代的BIOS设置屏幕通常有一个PC健康状态或硬件监控标签,它直接与主板的硬件监控芯片接口。[24] 这使得监控CPU和机箱温度、电源单元提供的电压以及监控和控制连接到主板的风扇速度成为可能。

一旦系统启动,硬件监控和计算机风扇控制通常由硬件监控芯片本身直接完成,硬件监控芯片本身可以是一个单独的芯片,通过内部整合电路(I2C)或系统管理总线 (SMBus),或作为超级I/O解决方案的一部分,通过低引脚数(LPC)接口。[25] 有些操作系统,如带有envsys的NetBSD和带有sysctl硬件传感器的OpenBSD,具有与硬件监视器集成接口的功能,通常不与BIOS进行任何交互。

但是,在某些情况下,BIOS供应商还通过ACPI提供硬件监控的基本信息,在这种情况下,操作系统可能使用ACPI来执行硬件监控;例如,在一些具有人工智能增强功能的华硕主板上就可以做到这一点。[26]

6.3 重编程序

20世纪80年代后期戴尔310的BIOS更换套件。 包括两个芯片,一个用于芯片的塑料支架和一个芯片拉拔器。

在现代电脑中,BIOS存储在可重写存储器中,允许内容被替换和修改。这种对内容的重写有时被称为闪存,这是基于一种在技术上被称为“程序存储器”和通俗地称为“闪存”的EEPROM的常用用法。它可以通过一个特殊的程序来完成,通常由系统制造商提供,或者在开机自检时,通过硬盘或u盘中的BIOS映像来完成。包含这些内容的文件有时被称为“BIOS映像”。为了升级到较新的版本以修复错误或提供改进的性能或支持较新的硬件,可能需要重新绑定,或者需要重新绑定操作来修复损坏的BIOS。

7 硬件编辑

图为American Megatrends BIOS 686.此BIOS芯片安装在插座中的PLCC封装中。

原始的IBM PC BIOS(和盒式磁带BASIC)存储在主板插槽中的屏蔽编程ROM芯片上。用户可以替换但不能更改ROM。为了允许更新,许多兼容的计算机使用可重新编程的存储设备,如EPROM和后来的闪存设备。据BIOS制造商微固件公司总裁Robert Braver称,闪存BIOS芯片在1995年左右变得普遍,因为电可擦除可编程ROM(Ee PROM)芯片比标准的紫外可擦除可编程只读存储器(EPROM)芯片更便宜、更容易编程。闪存芯片在电路中被编程(和重新编程),而EPROM芯片需要从主板上移除进行重新编程。[27] BIOS版本得到升级,以利用新版本的硬件,并纠正以前版本的BIOS中的错误。[28]

从IBM开始,PC支持通过BIOS设置的硬件时钟。它有一个世纪位,允许手动改变2000年发生时的世纪。1995年创建的大多数BIOS修订版和1997年几乎所有的BIOS修订版都支持2000年,方法是在时钟经过1999年12月31日午夜时自动设置世纪位。[29]

第一批闪存芯片被连接到ISA总线上。从1997年开始,BIOS闪存转移到LPC总线,这是ISA的一个功能性替代,采用了称为“固件中心”(FWH)的新标准实施。2006年,第一批支持串行外设接口(SPI)的系统出现,BIOS闪存再次移动。

随着代码增加新功能,BIOS的大小以及ROM、可编程ROM或其他存储介质的容量随着时间的推移而增加;BIOS版本现在的大小高达16兆字节。相比之下,最初的IBMPCBIOS包含在一个8 KiB掩码ROM中。一些现代主板包括更大的NAND闪存集成电路,能够存储整个紧凑的操作系统,例如一些Linux发行版。例如,一些华硕主板包括嵌入其与非门闪存集成电路的Splashtop操作系统。[30] 然而,在PC的ROM中包含操作系统和BIOS的想法并不新鲜;在20世纪80年代,微软为MS-DOS提供了ROM选项,它被包括在一些PC克隆的ROM中,比如Tandy 1000 HX。

另一种固件芯片是在IBMPC AT上和早期的兼容机上发现的。在AT中,键盘接口由微控制器控制,微控制器有自己的可编程存储器。在IBM AT上,那是一个40针的插座设备,而一些制造商使用的是这种芯片的EPROM版本,类似于EPROM。该控制器还被分配了A20门函数来管理超过1兆字节范围的内存;偶尔需要升级这个“键盘BIOS”来利用可以使用上层内存的软件。

BIOS可能包含内存参考代码(MRC)等组件,负责处理内存计时和相关硬件设置。[31][32]

8 供应商和产品编辑

不同BIOS实现的比较
公司 AwardBIOS AMIBIOS Insyde SeaBIOS
许可证 所有人 所有人 所有人 LGPL v3
维护/开发
32位PCIBIOS调用
AHCI
APM 是 (1.2) 是 (1.2)
BBS
启动菜单
压缩 是 (LHA[33]) 是 (LHA) 是 (RLE) 是 (LZMA)
CMOS
EDD 是 (3.0)
ESCD ?
ROM中的闪存 ? ?
语言 汇编 汇编 汇编 C
LBA 是 (48) 是 (48) 是 (48)
多处理器规范
选项ROM
密码
PMM ? ?
设置屏幕
SMBIOS 是 (2.4)
启动画面 是 (EPA)[34] 是 (PCX) 是 (BMP, JPG)
TPM 未知 未知 未知 Some
USB启动
USB集线器 ? ? ?
USB键盘
USB鼠标

在每种机器类型的《IBM PC技术参考手册》附录中,IBM公司公布了其原始PC、PC XT、PC AT和其他当代电脑型号的BIOS的全部清单。发布BIOS清单的效果是,任何人都可以确切地看到一个确定的BIOS做了什么以及它是如何做的。

1984年5月,Phoenix Software公司发布了它的第一个ROM-BIOS,这使得OEM能够建立基本上100%兼容的克隆,而不必像Compaq公司对便携式计算机所做的那样,自己对IBMPCBIOS进行反向工程,这有助于推动PC兼容行业的增长和非IBM版本的操作系统的销售。[35] 第一个 American Megatrends(AMI)BIOS于1986年发布。

移植到BIOS的新标准通常没有完整的公共文档或任何BIOS列表。因此,要了解许多非IBM公司对BIOS的补充的详细信息,并不像了解核心BIOS服务那样容易。

大多数PC主板供应商从商业第三方(被称为“独立的BIOS供应商”或IBV)获得BIOS“核心”和工具包的许可。主板制造商随后定制该BIOS以适合自己的硬件。因此,更新的BIOSes通常直接从主板制造商处获得。主要的BIOS供应商包括AMI, Insyde Software, Phoenix Technologies和Byosoft。以前的供应商包括Phoenix Technologies在1998年收购的Award Software和Microid Research;Phoenix后来逐步取消了该奖项的品牌名称。通用软件公司(General Software)也于2007年被Phoenix收购,该公司出售基于英特尔处理器的嵌入式系统的BIOS。

开源社区通过libreboot、coreboot和OpenBIOS/开源固件项目,加大了开发专有BIOS及其具有开源副本的未来版本的替代物的力度。AMD为一些芯片组提供了产品规格,谷歌正在赞助该项目。主板制造商Tyan在标准BIOS旁边提供了核心启动,带有主板的Opteron系列。MSI和Gigabyte Technology也相继推出了MSI K9ND MS-9282和MSI K9SD MS-9185。M57SLI-S4模型。

9 安全编辑

在尝试将微码补丁上传到CPU失败后,American Megatrends BIOS显示“Intel CPU uCode Loading Error”

一个可分离的BIOS芯片

EEPROM芯片具有易更新的优点;硬件制造商通常会发布BIOS更新来升级产品、提高兼容性和消除bug。但是,这一优势有一个风险,即不正确执行或中止的BIOS更新可能导致计算机或设备不可用。为了避免这些情况,最近的BiOS使用“启动块”;首先运行并且必须单独更新的一部分BIOS。在将控制权转移给它之前,此代码会验证BIOS的其余部分是否完好无损(使用哈希校验和或其他方法)。如果启动块检测到主BIOS中有任何损坏,它通常会警告用户必须通过从可移动介质(软盘、光盘或u盘)启动来启动恢复过程,以便用户可以再次尝试刷新BIOS。有些主板有备份BIOS(有时称为双BIOS板)来从BIOS损坏中恢复。

至少有四种已知的BIOS攻击病毒,其中两种用于演示目的。第一个在自然环境下发现的是针对中国用户的Mebromi。

第一个BIOS病毒是CIH病毒,也称为“切尔诺贝利病毒”,它能够擦除兼容芯片组上的闪存ROMBIOS内容。CIH于1998年年中出现,并于1999年4月开始活跃。通常,受感染的计算机无法再启动,人们不得不从主板上取下闪存集成电路并对其重新编程。CIH瞄准了当时广泛使用的英特尔i430TX主板芯片组,并利用了当时同样广泛使用的Windows 9x操作系统允许硬件直接访问所有程序的事实。

现代系统不容易受到CIH的攻击,因为使用了各种与英特尔i430TX芯片组以及其他闪存ROM集成电路类型不兼容的芯片组。此外,还有额外的保护措施,防止意外的BIOS重写,其形式为启动块,防止意外覆盖,或者双重和四重BIOS配备的系统,在崩溃时,可以使用备份的BIOS。此外,所有现代操作系统,如 FreeBSD, Linux, macOS, 基于Windows NT的Windows操作系统,如Windows 2000, Windows XP和更新版本,都不允许用户模式程序直接访问硬件。

结果,从2008年开始,CIH基本上变得无害,最坏的情况是通过感染可执行文件和触发杀毒软件来引起麻烦。然而,其他BIOS病毒仍然可能存在;[36] 由于大多数没有Windows Vista/7 UAC系统的Windows家庭用户运行所有具有管理权限的应用程序,一种类似CIH的现代病毒原则上仍然可以在不首先利用漏洞的情况下访问硬件。操作系统OpenBSD阻止所有用户进行这种访问,默认情况下,用于Linux内核的grsecurity补丁也阻止这种直接硬件访问,不同之处在于攻击者需要更困难的内核级攻击或重启机器。

第二种BIOS病毒是John Heasman提出的一种技术,他是英国下一代安全软件的主要安全顾问。2006年,在黑帽安全会议上,他展示了如何提升特权和读取物理内存,使用恶意程序取代存储在闪存中的正常ACPI函数。 [37]

第三种BIOS病毒是一种被称为“持续BIOS感染”的技术。它出现在2009年温哥华的CanSecWest会议和新加坡的SyScan安全会议上。[38] 核心安全技术公司的研究人员Anibal Sacco和Alfredo Ortega演示了如何在BIOS的解压缩程序中插入恶意代码,即使在操作系统启动之前,也能在启动时几乎完全控制电脑。概念验证不利用BIOS实现中的缺陷,只涉及正常的BIOS刷新过程。因此,它需要对机器进行物理访问,或者用户是根用户。尽管有这些要求,Ortega强调了他和Sacco发现的深远意义:“我们可以修补一个驱动程序来删除一个完全工作的木马。我们甚至有一小段代码可以删除或禁用防病毒软件。”[39]

Mebromi是一种木马,它的攻击目标是拥有AwardBIOS、Microsoft Windows系统和来自两家中国公司的杀毒软件的计算机。这两个软件分别是:Rising Antivirus和Jiangmin KV Antivirus。[40][41][42] Mebromi安装了一个感染主启动记录的木马。

在2013年12月接受《60分钟》采访时,美国国家安全局(NSA)信息保证主任 Deborah Plunkett声称,NSA已经发现并挫败了一个外国国家针对美国金融系统的BIOS攻击。[43] 该节目引用匿名消息称这是中国的阴谋。[43] 然而,The Guardian[44], The Atlantic[45], Wired[46]和The Register[47]的后续文章驳斥了NSA的说法。

10 替代品和继任者编辑

从2011年开始,许多新机器上的BIOS将被更复杂的可扩展固件接口(EFI)所取代。EFI是一种规范,它取代了传统BIOS的运行时接口。EFI最初是为Intel Itanium架构编写的,现在可用于x86和x86-64平台;规范开发由行业特殊利益集团统一EFI论坛推动。只有支持GPT的Microsoft Windows版本、Linux内核2.6.1及更高版本,[48]以及基于Intel的Mac上的MacOS支持EFI启动,[49] 截至2014年,新的电脑硬件主要附带UEFI固件。木马安全保护的体系结构还可以防止系统运行用户自己的软件更改,这使得UEFI作为开放硬件社区中的一个BIOS替代物备受争议。

x86世界中“传统BIOS”功能的其他替代方案包括coreboot和libreboot。

一些服务器和工作站使用基于Forth编程语言的独立于平台的开放固件(IEEE-1275);它包含在Sun的SPARC计算机、IBM的RS/6000系列和其他PowerPC系统中,如CHRP主板,以及基于x86的OLPC XO-1。

至少到2015年,苹果公司已经从MacBook Pro上移除了传统的BIOS支持。因此,bless实用程序不再支持传统开关,并打印“本系统不支持传统模式”。这些苹果电脑也不能从光盘或u盘启动。

11 笔记编辑

  1. The signature at offset +0x1FE in boot sectors is 0x55 0xAA, that is 0x55 at offset +0x1FE and 0xAA at offset +0x1FF. Since little-endian representation must be assumed in the context of IBM PC compatible machines, this can be written as 16-bit word 0xAA55 in programs for x86 processors (note the swapped order), whereas it would have to be written as 0x55AA in programs for other CPU architectures using a big-endian representation. Since this has been mixed up numerous times in books and even in original Microsoft reference documents, this article uses the offset-based byte-wise on-disk representation to avoid any possible misinterpretation.

参考文献

  • [1]

    ^"Ref — System BIOS". PCGuide. Archived from the original on 21 December 2014. Retrieved 6 December 2014..

  • [2]

    ^Kildall, Gary Arlen (June 1975), CP/M 1.1 or 1.2 BIOS and BDOS for Lawrence Livermore Laboratories.

  • [3]

    ^Kildall, Gary Arlen (January 1980). "The History of CP/M, THE EVOLUTION OF AN INDUSTRY: ONE PERSON'S VIEWPOINT" (Vol. 5, No. 1, Number 41 ed.). Dr. Dobb's Journal of Computer Calisthenics & Orthodontia. pp. 6–7. Archived from the original on 2016-11-24. Retrieved 2013-06-03..

  • [4]

    ^Bradley, Tony. "R.I.P. BIOS: A UEFI Primer". PCWorld. Archived from the original on 2014-01-27. Retrieved 2014-01-27..

  • [5]

    ^Swaine, Michael (1997-04-01). "Gary Kildall and Collegial Entrepreneurship". Dr. Dobb's Journal. Archived from the original on 2007-01-24. Retrieved 2006-11-20..

  • [6]

    ^"IEEE Milestone in Electrical Engineering and Computing - CP/M - Microcomputer Operating System, 1974" (PDF). Computer History Museum. 2014-04-25. Archived (PDF) from the original on 2019-04-03. Retrieved 2019-04-03..

  • [7]

    ^Shustek, Len (2016-08-02). "In His Own Words: Gary Kildall". Remarkable People. Computer History Museum. Archived from the original on 2016-12-17..

  • [8]

    ^Killian, A. Joseph "Joe" (2001). "Gary Kildall's CP/M: Some early CP/M history - 1976-1977". Thomas "Todd" Fischer, IMSAI. Archived from the original on 2012-12-29. Retrieved 2013-06-03..

  • [9]

    ^Fraley, Bob; Spicer, Dag (2007-01-26). "Oral History of Joseph Killian, Interviewed by: Bob Fraley, Edited by: Dag Spicer, Recorded: January 26, 2007, Mountain View, California, CHM Reference number: X3879.2007," (PDF). Computer History Museum. Archived from the original (PDF) on 14 July 2014. Retrieved 2013-06-03..

  • [10]

    ^"HP BIOS Configuration Utility". Hewlett-Packard. 2013. Archived from the original on 2015-01-12. Retrieved 2015-01-12..

  • [11]

    ^See Intel 64 and IA-32 Architectures Software Developer’s Manual Archived 2012-01-26 at the Wayback Machine, volume 3, section 9.1.2.

  • [12]

    ^page 5-27 IBM Personal Computer Hardware Reference Library Technical Reference, 1984, publication number 6361459.

  • [13]

    ^"IBM 5162 PC XT286 TechRef 68X2537 Technical Reference manual" (PDF). August 1986. p. 35 (System BIOS A-5). Archived (PDF) from the original on 2014-12-11. Retrieved 2014-12-11..

  • [14]

    ^How StuffWorks: What BIOS Does Archived 2008-02-07 at the Wayback Machine..

  • [15]

    ^BIOS Boot Specification (Version 1.01, 11 January 1996) Archived 4月 22, 2012 at the Wayback Machine.

  • [16]

    ^Mueller, Scott (2001-06-08). "Processor Update Feature | Microprocessor Types and Specifications". InformIT. Archived from the original on 2014-04-16. Retrieved 2014-04-15..

  • [17]

    ^"Linux* Processor Microcode Data File". Download Center. Downloadcenter.intel.com. 2009-09-23. Archived from the original on 2014-04-16. Retrieved 2014-04-15..

  • [18]

    ^Scott Mueller, Upgrading and repairing PCs 15th edition, Que Publishing, 2003 ISBN 0-7897-2974-1, pages 109-110.

  • [19]

    ^"How SLP and SLIC Works". guytechie.com. 2010-02-25. Archived from the original on 2015-02-03. Retrieved 2015-02-03..

  • [20]

    ^"Create and add an OEM ACPI SLIC table module to a congatec BIOS" (PDF). congatec.com. 2011-06-16. Archived (PDF) from the original on 2014-08-02. Retrieved 2015-02-03..

  • [21]

    ^Whitson Gordon. "A Beginner's Introduction to Overclocking Your Intel Processor". Lifehacker. Gawker Media. Archived from the original on 7 December 2014. Retrieved 6 December 2014..

  • [22]

    ^Smart Computing Article - What Is The BIOS? Archived 2012-03-10 at the Wayback Machine - Computing Basics July 1994 • Vol.5 Issue 7.

  • [23]

    ^Torres, Gabriel (24 November 2004). "Introduction and Lithium Battery". Replacing the Motherboard Battery. hardwaresecrets.com. Archived from the original on 24 December 2013. Retrieved June 20, 2013..

  • [24]

    ^Constantine A. Murenin (2010-05-21). "11.1. Interfacing from the BIOS". OpenBSD Hardware Sensors — Environmental Monitoring and Fan Control (MMath thesis). University of Waterloo: UWSpace. hdl:10012/5234. Document ID: ab71498b6b1a60ff817b29d56997a418..

  • [25]

    ^Constantine A. Murenin (2007-04-17). "2. Hardware review". Generalised Interfacing with Microprocessor System Hardware Monitors. Proceedings of 2007 IEEE International Conference on Networking, Sensing and Control, 15–17 April 2007. London, United Kingdom: IEEE. pp. 901–906. doi:10.1109/ICNSC.2007.372901. ISBN 1-4244-1076-2. IEEE ICNSC 2007, pp. 901—906..

  • [26]

    ^"aibs — ASUSTeK AI Booster ACPI ATK0110 voltage, temperature and fan sensor". OpenBSD, DragonFly BSD, NetBSD and FreeBSD. 2010..

  • [27]

    ^"Decoding RAM & ROM Archived 2012-04-06 at the Wayback Machine." Smart Computing. June 1997. Volume 8, Issue 6..

  • [28]

    ^"Upgrading Your Flash BIOS For Plug And Play Archived 2012-04-06 at the Wayback Machine." Smart Computing. March 1996. Volume 7, Issue 3..

  • [29]

    ^"Time To Check BIOS Archived 2011-07-16 at the Wayback Machine." Smart Computing. April 1999. Volume 7, Issue 4..

  • [30]

    ^SplashTop's Instant-On Linux Desktop | Geek.com Archived 2008-09-07 at the Wayback Machine.

  • [31]

    ^Posted by Alex Watson, possibly repost from original content on custompc.com [unclear]. "The life and times of the modern motherboard". 2007-11-27. Archived from the original on 24 July 2012. Retrieved 2 February 2013..

  • [32]

    ^David Hilber, Jr. (August 2009). "Considerations for Designing an Embedded Intel Architecture System with System Memory Down ®" (PDF). Intel. Archived (PDF) from the original on 18 October 2012. Retrieved 2 February 2013..

  • [33]

    ^Stiller, Andreas (2001). "Prozessor-Patches". c't (in 德语). Heise (5): 240. Archived from the original on 2015-11-22. Retrieved 2015-11-21..

  • [34]

    ^"Award BIOS logo". 2015-06-15. Archived from the original on 2015-12-21. Retrieved 2015-12-06..

  • [35]

    ^Phoenix Eagerly Waiting to Clone Next-Generation IBM BIOS Archived 2014-01-22 at the Wayback Machine, InfoWorld, March 9, 1987.

  • [36]

    ^New BIOS Virus Withstands HDD Wipes, March 27, 2009. Marcus Yam. Tom's Hardware US.

  • [37]

    ^"Black Hat 2006 Multimedia - Presentation, Audio and Video Archives". www.blackhat.com. Retrieved 2019-04-21..

  • [38]

    ^Sacco, Anibal; Alfredo Ortéga. "Persistent BIOS Infection". Exploiting Stuff. Archived from the original on 2009-08-04. Retrieved 2010-02-06..

  • [39]

    ^Fisher, Dennis. "Researchers unveil persistent BIOS attack methods". Threat Post. Archived from the original on 30 January 2010. Retrieved 2010-02-06..

  • [40]

    ^Giuliani, Marco. "Mebromi: the first BIOS rootkit in the wild". blog. Archived from the original on 2011-09-23. Retrieved 2011-09-19..

  • [41]

    ^"360发布"BMW病毒"技术分析报告". blog. Archived from the original on 2011-09-25. Retrieved 2011-09-19..

  • [42]

    ^Yuan, Liang. "Trojan.Mebromi". Threat Response. Archived from the original on 2011-09-23. Retrieved 2011-09-19..

  • [43]

    ^"How did 60 Minutes get cameras into a spy agency?". CBS News. Archived from the original on 2014-04-22. Retrieved 2014-04-15..

  • [44]

    ^Spencer Ackerman in Washington (2013-12-16). "NSA goes on 60 Minutes: the definitive facts behind CBS's flawed report | World news". theguardian.com. Archived from the original on 2014-01-25. Retrieved 2014-01-27..

  • [45]

    ^Friedersdorf, Conor (16 December 2013). "A Question for 60 Minutes: Why Would China Want to Destroy the Global Economy?". The Atlantic. Retrieved 2019-03-26..

  • [46]

    ^Poulsen, Kevin (16 December 2013). "60 Minutes Puff Piece Claims NSA Saved U.S. From Cyberterrorism". Wired. ISSN 1059-1028. Retrieved 2019-03-26 – via www.wired.com..

  • [47]

    ^tweet_btn(), Simon Sharwood 16 Dec 2013 at 03:13. "NSA alleges 'BIOS plot to destroy PCs'". www.theregister.co.uk. Retrieved 2019-03-26..

  • [48]

    ^"Extensible Firmware Interface (EFI) and Unified EFI (UEFI)". Intel. Archived from the original on 5 January 2010. Retrieved 6 December 2014..

  • [49]

    ^"Windows and GPT FAQ". microsoft.com. Microsoft. Archived from the original on 19 February 2011. Retrieved 6 December 2014..

阅读 4.4w
版本记录
  • 暂无