Linux系统启动过程(1):BIOS加电自检
引言:PC/AT组成结构逻辑图
关于微机组成部分的基础知识分享,请见上篇文章《简介现代微型计算机的组成结构》
一、概念理解
BIOS (Basic Input Output System : 基本输入输出系统),实际上就是被"固化"在计算机硬件中、直接与硬件打交道的一组程序(内含三个主要程序模块),它为计算机提供最低级、最直接的硬件控制。
BIOS程序一般被存放在主板ROM(只读存储芯片)之中,即使在关机或掉电以后,该程序也不会丢失。
计算机的很多硬件中都有BIOS程序,最常见的比如:主板(也称为系统BIOS)、显示卡以及其它一些设备(例如IDE控制器、SCSI卡或网卡等)中都存在有BIOS程序;但是,计算机的启动过程是在系统BIOS的控制下进行的。所以系统BIOS是我们要介绍的主角。
BIOS与CMO的联系与区别,详见另一篇介绍《电池、CMOS与BIOS的联系与区别》
二、加电自检过程
第一步:CPU RESET
第二步:POST(自检程序)启动
第三步:执行显示卡的BIOS(初始化)
第四步:执行其它控制卡的BIOS(初始化)
第五步:检测CPU与内存
第六步:检测标准的系统硬件与即插即用设备
第七步:显示硬件配置列表信息
第八步:更新ESCD
CPU RESET
现在我们从PC微机冷启动入手,把主机的电源线插入墙壁的电源插座,正常供电的220V、50HZ的市电就输入到微机的主机电源(参考ATX规范),此时交流的市电转换为±5V、±12V、3.3V等规格的直流电。
这是主板供电插头的pin脚定义图,8引脚为PG(Power Good)信号;14引脚为PW-ON(Power-On)信号(与GND(Ground)短接后即可触发电源工作);9、14引脚为待机供电状态,在未按下机箱电源开关之前9、14引脚输出电压均为+5V,其它引脚无输出电压。
当我们按下机箱开机按纽(即闭合)瞬间,主板的南桥(或者I/O芯片)接收到低电位信号,其接着向ATX电源14引脚(绿)发出低电位信号,将POWER(14)+5V高电位拉低,触发ATX电源工作,这时各个引脚输出+12V,-12V.+5V ,-5V,+3.3V电压,向主板和其它各个设备供电,包括8引脚PG(Power Good)信号。流行见下图:
ATX电源8脚发出PG信号通过一个或几个门电路然后分成2路(这时还是PG信号),分别给南桥、北桥;
①当南桥,北桥接收PG信号后,各自输出一个时钟控制信号加给时钟芯片。
②南桥输出的时钟控制信号控制路外围电时钟的产生,北桥控制内存、AGP、CPU时钟的产生。
③当时钟电路正常工作产生各路时钟送给各部分电路,其中南桥接收到时钟信号后,其复位电路工作、产生PCIRST、RSTDRV,两个复位信号,PCIRST信号去复位北桥。
④北桥复位完成后,由北桥产生 CUP复位信号发给CPU,当CPU接收到复位信号,就开始初始化。
⑤ CPU复位完成,即CPU内的各寄存器(通用寄存器、段寄存器、标志寄存器等)均复位以后,发出寻址选中BIOS程序,CPU马上就从地址FFFF0H处开始执行指令,这个地址在系统BIOS的地址范围内,无论是AWARD BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。这就是8引脚PG信号转化成复位信号的全过程。
POST(自检程序)启动
系统BIOS的启动代码处第一个例程是POST程序,它主要任务是检测系统中的一些关键设备是否存在和能否正常工作,如内存和显卡等。由于POST的检测过程在显示卡初始化之前,因此如果在POST自检的过程中发现了一些致命错误,如没有找到内存或者内存有问题时(POST过程只检查640K常规内存),是无法在屏幕上显示出来的,这时系统PIOS可通过喇叭发声来报告错误情况,声音的长短和次数代表了错误的类型。
调用显示卡的BIOS(初始化)
接下来系统BISO将查找显示卡的BIOS程序,存放显示卡BIOS程序的ROM芯片的起始地址通常在C0000H处,系统BIOS找到显卡BIOS之后调用它的初始化代码,由显卡BIOS程序来完成显示卡的初始化。这就是我们开机看到的第一个画面,显示器屏幕顶端会出现显卡BIOS的版本信息、显卡类型、显存容量等信息,不过这个画面几乎是一闪而过的。
调用其它控制卡的BIOS(初始化)
接着系统BIOS会查找其它设备的BIOS程序,按照CMOS RAM中存储的配置信息或主板上配置信息(如CPU的外频和倍频信息、内存数量等)去找相关设备,找到之后同样要调用这些BIOS内部的初始化代码来初始化这些设备。
查找完所有其它设备的BIOS之后,系统BIOS将显示它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。同时屏幕底端左下角会出现主板信息代码,包含BIOS的日期、主板芯片组型号、主板的识别编码及厂商代码等;此时可以按“Del”键进入CMOS设置画面重新设置相关配置信息。
检测CPU与内存
接着系统BIOS将检测CPU的类型和工作频率,并将检测结果显示在屏幕上,这就是我们开机看到的CPU类型和主频。接下来系统BIOS开始测试主机所有的内存容量,并同时在屏幕上显示内存测试的数值,就是大家所熟悉的屏幕上半部份那个飞速翻滚的内存计数器。这个过程我们可以在BIOS设置中选择耗时少的"快速检测"或者耗时多的"全面检测"两种方式;比如,在CMOS中将“Quick Power On Test”设置为“Disabled”,则将检测三次。
检测标准的系统硬件与即插即用设备
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,这些设备包括:硬盘、CD-ROM、软驱、串行接口和并行接口等连接的设备。此时硬盘电源指示灯闪亮,键盘的三个指示灯(Num Lock、Caps Lock、Scroll Lock)再次地一起闪亮。
标准的系统硬件检测完毕后,系统BIOS(内部的支持即插即用的代码)将开始检测和配置系统中安装在PCI扩展槽上(或ISA等)即插即用设备(如显示卡、声卡、视频卡、Modem等和串口、并口等I/O设备)。
每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
显示硬件配置列表信息
到这一步为止,所有硬件都已经检测配置完毕了,系统BIOS会重新清屏并在屏幕上方显示出一个系统配置列表,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
更新ESCD
ESCD(扩展系统配置数据)是系统BIOS用来与操作系统交换硬件配置信息的数据,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。通常ESCD数据只在系统硬件配置发生改变后才会进行更新,所以不是每次启动机器时我们都能够看到"Update ESCD... Success"这样的信息。
所有硬件检查完毕,系统BIOS的启动代码将进行它的最后一项工作,根据CMOS中所设置的引导顺序,加载MBR引导记录,为引导操作系统做准备。…待续!