本文共 2074 字,大约阅读时间需要 6 分钟。
主板上电后整个主板和其上的芯片/总线控制器就构成了一幅地图,该地图表示某某设备在哪个地方放着,然后BIOS自检就开始了。需要注意的是,万事开头难,bios是怎么开始运行的呢?它的指令代码如何开始执行的呢?这无须我们关心,是标准强制的,比如bios占据地址总线上发出地址a到b这个区间,然后主板地图建立好(电压稳定)之后,cpu从地址a到b之中的某个特定的位置c开始执行,这个过程十分简单,cpu将从c取指令,将地址c发到地址总线,北桥根据标准将之路由到bios芯片,然后bios芯片将指令通过数据总线发回cpu,cpu执行,这样就开始了执行bios指令,bios基本就是自检,然后跳转到别的地方,至于跳到什么地方,cpu和主板的设计者就不管了,全由bios决定,反正这时候整个板子已经开始工作了,你想跳转到磁盘分区中的代码,你就要先将磁盘中的代码载入内存,这又是一个发送地址到地址总线,取指令执行的过程。 那么bios自检的原理是什么呢?在主板上电且电压稳定之后,其上所有的设备芯片电压都会稳定,并且每一种芯片都会处在reset状态,也就是说这些芯片都遵循各自标准,电路处在一种稳定状态,各个芯片的稳定电路都有自己的标准,比如芯片X的稳定标准为,给它的第1个和第3个引脚发射一个高电平,那么如果从其第5个引脚能得到一个高电平,就说明该芯片正常,然后从其第10到20个引脚会得到一个10位的电平序列,比如是:高-高-低-高-低-高-低-低-高-低,二进制就是1101010010,该二进制数字就是此芯片X的相关信息,再比如检测ram容量,可能就是依次往ram的每一个存储芯片某些引脚发送电平信号序列,然后从其另一些引脚读取该芯片的容量,这样就会在屏幕上最终显示出ram的总大小,正如我们看到的电脑开机时ram容量从0跳变到最大值一样的效果。bios通过类似的方式探测到所有设备的特性。那么bios是如何找到特定设备的呢?前面的文章说过,bios内部要么保存着一张拓扑图要么在开始运行时第一步先初始化一张该拓扑图(具体如何进行初始化,不外乎根据标准针对特定的芯片引脚发送电平序列信号,注意,还是根据标准),该拓扑图记载了主板上各个芯片或者设备总线的地址信息和其它的元信息,有了这个拓扑图,主板地图上的芯片/设备/总线就有了各自的地址了,bios此时是总管,如果把主板当成一座城市的话,bios此时就是城市主管,记录着每家每户的地址信息,然后挨家挨户慰问现在一切安好!这就是自检的过程。 注意,一般而言,主板芯片或者设备总线的地址信息是硬存储在bios芯片内部的,然而大多数的芯片特性却不保存在bios芯片内部,而是在自检的时候从对应地址动态读取到的,读取的方式无非就是根据地址信息得到设备标准,然后根据标准往设备的某些引脚发送一些电平序列,然后得到设备特性信息,这些特性信息被保存在芯片或者设备内存的小芯片中,或者叫设备控制器或者叫设备bios。 LinuxBIOS,现在的Coreboot,它实现了一个开源的bios,并且使用了大量的linux内核源码,它相当于一个高度精简的linux操作系统,除了自检之外,它还能做很多事情,因为控制权在交给其它代码之前一直在linuxbios手中,且它又是基于linux的,因此它完成的功能更多。bios我们平时接触不多,然而却能控制整个计算机,比如计算机有多少内存可用,操作系统是直接求于bios的,如果bios告诉操作系统只有30M的内存,那么操作系统只能使用30M,如果bios告诉操作系统虽然有4G的ram,然后有2.7G都为设备保留,那么你除了抗议之外没有任何办法。如今所谓的IT从业者都关注于顶层的应用,而专注于底层机制的人都可以被视为机修工了,CIH那样的病毒也越来越少了,然而一旦再次出现,我想很少有人能应付。 前面提到过BIOS里面的地址拓扑图,这幅图可以存储在cmos芯片里面,也可以动态检测,这也就构造了两种bios自检的办法,第一种是cmos中已经存储了地址拓扑图,bios直接根据拓扑图中的地址和属性信息来检测设备,比如cmos中有下面一个条目:位于地址A处的是PCI设备,那么bios就根据PCI设备的标准像地址A处发送电平信号,然后读取回复;第二种方式就是探测法,bios从地址0开始,一直探测到最大的地址处,在每一个地址处,虽然bios不知道是什么设备,但是需要每一个设备都要提供一个探测接口,比如这个接口是写入10110,那么bios往每一个地址都写入10110,然后得到的回复即是设备的类型,然后再根据第一种方式进行自检。熟悉LinuxBIOS的可能对此比较熟悉,bios自检完全是基于主板设计的,因此bios的开发技术一直都被主板厂商把持着,一种板子对应一个bios,这就是道理!bios还是把持着一切,主板和应用软件之间有一个接口,那就是bios。
本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271095
转载地址:http://yhkix.baihongyu.com/