BIOS与UEFI以及模拟环境

主板

主板:矩形电路板,上面安装了主要电路系统,bios芯片,i/o控制芯片,扩展插槽,键和面板控制开关接口
芯片组(Chipset):是主板的核心组成部分,几乎决定了这块主板的功能,进而影响到整个 电脑系统性能的发挥。按照在主板上的排列位置的不同,通常分为 北桥芯片和 南桥芯片。北桥芯片提供对 CPU的类型和主频、内存的类型和最大容量、 ISA/ PCI/ AGP插槽、 ECC纠错等支持。南桥芯片则提供对 KBC(键盘控制器)、 RTC(实时时钟控制器)、USB( 通用串行总线)、Ultra DMA/33(66)EIDE数据传输方式和 ACPI(高级能源管理)等的支持。其中北桥芯片起着主导性的作用,也称为主桥(Host Bridge)。
主板的平面是一块PCB(印刷电路板),一般采用 四层板或六层板。相对而言,为节省成本,低档主板多为四层板:主信号层、接地层、电源层、次信号层,而六层板则增加了 辅助电源层和中信号层,因此,六层PCB的主板抗 电磁干扰能力更强,主板也更加稳定。
在电路板下面,是4层有致的电路布线;在上面,则为分工明确的各个部件:插槽、芯片、电阻、电容等。当 主机加电时,电流会在瞬间通过 CPU、 南北桥芯片、 内存插槽、 AGP插槽、 PCI插槽、IDE接口以及主板边缘的 串口、并口、 PS/2接口等。随后,主板会根据 BIOS( 基本输入输出系统)来识别硬件,并进入操作系统发挥出支撑系统平台工作的功能。

北桥芯片主要负责实现与CPU、内存、 AGP接口之间的数据传输,同时还通过特定的数据通道和南桥芯片相连接。北桥芯片的封装模式最初使用 BGA封装模式,到Intel的北桥芯片已经转变为 FC-PGA封装模式,不过为AMD 处理器设计的 主板北桥芯片依然还使用传统的BGA封装模式。南桥芯片相比北桥芯片来讲,南桥芯片主要负责和 IDE设备、PCI设备、声音设备、 网络设备以及其他的 I/O设备的沟通,南桥芯片到为止还只能见到传统的BGA封装模式一种。

南桥芯片的发展方向主要是集成更多的功能,例如网卡、RAID、IEEE 1394、甚至WI-FI无线网络等等。
由于已经发布的AMD K8核心的CPU将内存控制器集成在了CPU内部,于是支持K8芯片组的北桥芯片变得简化多了,甚至还能采用单芯片芯片组结构。这也许将是一种大趋势,北桥芯片的功能会逐渐单一化,为了简化主板结构、提高主板的集成度,也许以后主流的芯片组很有可能变成南北桥合一的单芯片形式(事实上SIS老早就发布了不少单芯片芯片组)
BIOS与UEFI以及模拟环境_第1张图片
BIOS与UEFI以及模拟环境_第2张图片

BIOS

BIOS,是Basic Input Output System的词头缩写。”如果直译为中文,那就叫做“基本输入输出系统”
固件也是一个程序,是存储在BIOS硬件芯片上的程序,bios芯片相当于一个ROM芯片。
基本功能:
1、POST自检和硬件自检程序:通过读取CMOS存储中的硬件信息,识别硬件配置,并对硬件自检和初始化。
2、操作系统启动程序:硬件自检成功后(这时硬盘已经被识别),执行跳转到操作系统引导设备的引导分区(引导程序存储在ROM中),将引导程序读入内存,若成功读入,则进入启相应设备上的操作系统启动过程
3、CMOS设置程序:在电脑开机自检中,按下进入CMOS设置的快捷键,则进入CMOS设置。设置结束后,若进行保存操作,则更新后的硬件信息会存入CMOS中并重新进行自检,否则继续完成本次自检后续的过程
4、硬件I/O和中断服务:软件在一些对硬件底层的操作中,需要中断服务或硬件I/O操作,这时就需要BIOS充当软件和硬件之间“临时搭桥”的作用。

CMOS,本义上是Complementary Metal Oxide Semiconductor的词头缩写。”直译为“互补金属氧化物半导体”,是一种半导体技术,属于数字电路的范畴。但是为了避免再乱造新词造成混乱,人们干脆将采用该技术的制程和生产出的元件或芯片也叫CMOS。
计算机领域的CMOS
在计算机领域,CMOS常指保存计算机基本启动信息(如日期、时间、启动设置等)的芯片。有时人们会把CMOS和BIOS混称,其实CMOS是主板上的一块可读写的并行或串行FLASH芯片,是用来保存BIOS的硬件配置和用户对某些参数的设定。
一是用于计算机信息保存,CMOS作为可擦写芯片使用,在这个领域,用户通常不会关心CMOS的硬件问题,而只关心写在CMOS上的信息,也就是BIOS的设置问题,其中提到最多的就是系统故障时拿掉主板上的电池,进行CMOS放电操作,从而还原BIOS设置。
既然它只是个RAM(不是昂贵的NvRAM非易失性存储器,也没必要用NvRAM),那么就得给它一直供着电,否则掉电后数据就丢了。但是我们的电脑不能总开着机一直耗电玩,所以就必须得有一个后备电源准备着随时在电脑电源关闭后“接班”为CMOS芯片供电,好吧,放个3V锂电池就行了,所以主板上那个电池是为CMOS芯片在电脑电源关闭后继续供电的东西。
BIOS 与CMOS
BIOS是个程序,实现一系列功能,该程序存储在芯片中,这个芯片叫做BIOS芯片;而CMOS也是个芯片,是个RAM,里面存的是电脑硬件配置信息和电脑其他有关的东西,电脑启动了就由电脑电源为其供电,电脑关闭则由一个后备电池供电保证数据不丢失。
那么CMOS既然是RAM,里面的东西就能够进行修改,用什么软件对CMOS修改呢?需要用CMOS设置程序,而这个设置程序又在哪里?好,请返回去看BIOS的第三条功能——CMOS设置程序,所以CMOS的设置程序是BIOS本身的一个功能,于是干脆就把它简单称作“BIOS设置”或者叫“CMOS设置”。
大众的bios版本:
NOR Flash是非易失性存储器(NvRAM)的一种标准,其实它基本和上面那几个ROM标准诞生在同一时期,但是应用在BIOS芯片上则是最后的,NOR Flash由于是NvRAM的标准,可以在普通情况下任意擦除或写入,所以不再需要加编程电压。此外,NvRAM还可以实现大容量的存储,对于BIOS的后继UEFI是优点之一。还有NvRAM在擦除时是以一个块(Block)为单位进行整体擦除的,块是由芯片厂商人为规定的字节数,肯定不会是一个字节,因此擦除速度会很快,写入仍然按照一字节为单位,而且写入和擦除是分步进行的,只有确定全部块都擦除完毕才会进行写入操作,这些特点使得NOR Flash成为目前最大众的BIOS芯片。

为什么BIOS程序更新后,需要重新运行CMOS设置程序设置CMOS参数?原来在升级BIOS程序过程中,原有BIOS内容已经被逐渐清掉,所以这时CMOS虽然还有硬件配置数据,但已经是无用的垃圾数据。所以就需要重新运行CMOS程序设置电脑参数并保存,则CMOS的硬件信息就和BIOS中的CMOS设置一致了,再次启动发现一致则继续完成后续过程,直到将引导交给OS,OK,本次BIOS更新成功完成

总结如下:BIOS是一个程序,存在BIOS芯片中,而CMOS是一个集成在南桥的芯片,存的是电脑硬件配置信息,若想更改并保存起来,就需要用BIOS程序中的CMOS设置程序对其进行设置。

BIOS程序可以分为若干模块,主要有Boot Block引导模块、CMOS设置模块、扩展配置数据(ESCD)模块、DMI收集硬件数据模块,其中引导模块直接负责执行BIOS程序本身入口、计算机基本硬件的检测和初始化,ESCD用于BIOS与OS交换硬件配置数据,DMI则充当了硬件管理工具和系统层之间接口的角色,通过DMI,用户可以直观地获得硬件的任何信息,CMOS设置模块就是实现对硬件信息进行设置,并保存在CMOS中,是除了启动初始化以外BIOS程序最常用的功能。

BIOS本身是汇编语言代码,是在16位实模式下调用INT 13H中断执行的,由于x86-64是一个高度兼容的指令集,也为了迁就BIOS的16位实模式的运行环境,所以即使现在的CPU都已是64位,如果还是在BIOS启动(基本见于09年以前的主板),在开机时仍然都是在16位实模式下执行的。16位实模式直接能访问的内存只有1MB,就算你安了4G、8G或者16G还是32G内存,到了BIOS上一律只先认前1MB。在这1MB内存中,前640K称为基本内存,后面384K内存留给开机必要硬件和各类BIOS本身使用,了解了这些,下面谈一下BIOS启动计算机的具体过程。

BIOS启动计算机的具体过程:
当按下电源开关时,电源就开始向主板和其他设备供电,这时电压还不稳定,在早期的南北桥主板上,由主板北桥向CPU发复位信号,对CPU初始化;稳定电压后复位信号便撤掉。而对于现在的单南桥主板,则由CPU自身调整稳定电压达到初始化的目的,当电压稳定后,CPU便在系统BIOS保留的内存地址处执行跳转BIOS起始处指令,开始执行POST自检
在POST自检中,BIOS只检查系统的必要核心硬件是否有问题,主要是CPU、640K基本内存、显卡是否正常,PS/2键盘控制器、系统时钟是否有错误等等。由于POST检查在显卡初始化以前,因此在这个阶段如发生错误,是无法在屏幕上显示的,不过主板上还有个报警扬声器,
POST自检结束后,BIOS开始调用中断完成各种硬件初始化工作
硬件初始化工作中,主要说明两点,首先经过POST检测后,电脑终于出现了开机启动画面,这就是已经检测到了显卡并完成了初始化。
第二,BIOS只识别到由主引导记录(MBR)初始化的硬盘,之所以说明这点,是因为后续的EFI或UEFI采用了一种新的GUID磁盘分区系统(GPT)格式,这种硬盘在BIOS下是无法识别的。硬件全部初始化完毕后,接下来进入更新ESCD阶段。
在ESCD更新阶段中,BIOS将对存储在CMOS中和操作系统交换的硬件配置数据进行检测,如果系统硬件发生变动,则会更新该数据,否则不更新保持原状不变,ESCD检测或更新结束后,BIOS将完成最后一项工作,就是启动操作系统
最后这一步中,BIOS根据CMOS中用户指定的硬件启动顺序,读取相应设备的启动或引导记录,引导相应设备上的操作系统启动,进入操作系统,此后便由操作系统接替BIOS负责硬件和软件间的相互通信。如果发现所有硬件都没有能引导操作系统的记录,则会在屏幕上显示相应错误信息,并将电脑维持在16位实模式。
虽然BIOS作为电脑加电启动所必不可少的部分,但是从其于1975年诞生之日起近30余年,16位汇编语言代码,1M内存寻址,调用中断一条条执行的理念和方式竟然一点都没有改变
总结:bio作为一个程序,是基于16位编码的,也就是它的寻址能力只有1mb,只能识别1mb的内存,而这1mb的内存,前640k为基本内存,后384k存储的是各种bios程序本身和开机硬件。
首先初始化cpu,使cpu跟据bios存储的指令来进行post自检,就是检测核心硬件是否有问题,在自检结束后,进行硬件初始化,在这之后设置cmos中的数据使之一致,再然后就可以启动操作系统了,让操作系统来管理硬件和软件。

UEFI

UEFI全称“统一的可扩展固件接口”,是一种详细描述类型接口的标准。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form的国际组织
与legacy BIOS 相比,UEFI最大的几个区别在于

  1. 编码99%都是由C语言完成;
  2. 一改之前的中断、硬件端口操作的方法,而采用了Driver/protocol的新方式;
  3. 将不支持X86实模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了);
  4. 输出也不再是单纯的二进制code,改为Removable Binary Drivers;
  5. OS启动不再是调用Int19,而是直接利用protocol/device Path;
  6. 对于第三方的开发,前者基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而后者就便利多了。
    7.弥补BIOS对新硬件的支持不足的问题。
    优点
    它运行于32位或64位模式,突破了传统16位代码的寻址能力,达到处理器的最大寻址,此举克服了BIOS代码运行缓慢的弊端。
    一个显著的区别就是EFI BIOS是用模块化,C语言风格的参数堆栈传递方式,动态链接的形式构建的系统,
    1.兼容性
    与BIOS不同的是,UEFI体系的驱动并不是由直接运行在CPU上的代码组成的,而是用EFI Byte Code(EFI字节代码)编写而成的。Java是以“Byte Code”形式存在的,正是这种没有一步到位的中间性机制,使Java可以在多种平台上运行。UEFI也借鉴了类似的做法。EFI Byte Code是一组用于UEFI驱动的虚拟机器指令,必须在UEFI驱动运行环境下被解释运行,由此保证了充分的向下兼容性。
    一个带有UEFI驱动的扩展设备既可以安装在使用安卓的系统中,也可以安装在支持UEFI的新PC系统中,它的UEFI驱动不必重新编写,这样就无须考虑系统升级后的兼容性问题。基于解释引擎的执行机制,还大大降低了UEFI驱动编写的复杂门槛,所有的PC部件提供商都可以参与。
    2.鼠标操作
    UEFI内置图形驱动功能,可以提供一个高分辨率的彩色图形环境,用户进入后能用鼠标点击调整配置,一切就像操作Windows系统下的应用软件一样简单。
    3.可扩展性
    UEFI将使用模块化设计,它在逻辑上分为硬件控制与OS(操作系统)软件管理两部分,硬件控制为所有UEFI版本所共有,而OS软件管理其实是一个可编程的开放接口。借助这个接口,主板厂商可以实现各种丰富的功能。比如我们熟悉的各种备份及诊断功能可通过UEFI加以实现,主板或固件厂商可以将它们作为自身产品的一大卖点。UEFI也提供了强大的联网功能,其他用户可以对你的主机进行可靠的远程故障诊断,而这一切并不需要进入操作系统。
    目前UEFI主要由这几部分构成:UEFI初始化模块、UEFI驱动执行环境、UEFI驱动程序、兼容性支持模块、UEFI高层应用和GUID磁盘分区组成。
    UEFI初始化模块和驱动执行环境通常被集成在一个只读存储器中,就好比如今的BIOS固化程序一样。UEFI初始化程序在系统开机的时候最先得到执行,它负责最初的CPU、北桥、南桥及存储器的初始化工作,当这部分设备就绪后,紧接着它就载入UEFI驱动执行环境(Driver Execution Environment,简称DXE)。当DXE被载入时,系统就可以加载硬件设备的UEFI驱动程序了。DXE使用了枚举的方式加载各种总线及设备驱动,UEFI驱动程序可以放置于系统的任何位置,只要保证它可以按顺序被正确枚举。借助这一点,我们可以把众多设备的驱动放置在磁盘的UEFI专用分区中,当系统正确加载这个磁盘后,这些驱动就可以被读取并应用了。在这个特性的作用下,即使新设备再多,UEFI也可以轻松地一一支持,由此克服了传统BIOS捉襟见肘的情形。UEFI能支持网络设备并轻松联网,原因就在于此。
    值得注意的是,一种突破传统MBR(主引导记录)磁盘分区结构限制的GUID(全局唯一标志符)磁盘分区系统将在UEFI规范中被引入。MBR结构磁盘只允许存在4个主分区,而这种新结构却不受限制,分区类型也改由GUID来表示。在众多的分区类型中,UEFI系统分区用来存放驱动和应用程序。
    主引导记录(MBR,Main Boot Record)是位于磁盘最前边的一段引导(Loader)代码。它负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,它由磁盘操作系统(DOS)在对硬盘进行初始化时产生的。
    OpenSSL是众所周知的SSL和TLS协议的开源实现。核心库实现了基本的加密函数,并提供了各种加密函数实用函数。OpenSSL库广泛用于各种安全性产品开发作为基础密码提供商。

EDKII模拟器平台

EDKII是一个开源的 UEFI bios 的发布框架,它里面包含了各种具有依赖关系的功能模块,描述文件和底层库函数。固件生成工具可以根据开发源码自动构建适用于不同架构平台的固件。UDK2015是EDK II项目的一个稳定版本。
EDKII模拟器平台介绍
 一个仿真平台并不是一个实际的硬件平台,但它旨在证明EDKII核心模块的稳定性和独立于硬件可以开发模块。仿真平台和实际平台之间的差异是其加载器和仿真的硬件设备。
 EDKII提供三种模拟器平台:Nt32, Unix and Duet platforms。本试验中使用的是Nt32。
 Nt32是32位Windows操作系统下提供UEFI运行环境的模拟器。
 SecMain模块[\Build\NT32IA32\DEBUG_VS2013x86\IA32\SecMain.exe]是Nt32平台加载器,是Windows可执行程序。
 Nt32建立了模拟硬件环境,如分配Windows内存为Nt32平台来模拟系统的内存,映射FD(Flash Description Files)文件到Windows的内存区域来模拟Flash设备。
 之后,SecMain程序调用PeiCore[Pre-EFI Initialization]作为实际的平台入口移交给PEI[Pre-EFI Initialization],UEFI的第二个启动阶段]阶段。
也就是说,上者是模拟的运行环境,而vs是使用的工具。

你可能感兴趣的:(信息安全)