欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

和老BIOS说永别 EFI BIOS技术解析

程序员文章站 2022-04-06 15:12:43
和老BIOS说永别 EFI BIOS技术解析BIOS最后的璀璨  BIOS,几乎和PC有着同样的寿命,当年康柏第一台“克隆”PC诞生的时候,它为了简化启动的设置,引入了固化程序的概念,在启动时负责将PC初始化,然后再将控制权... 09-04-21...
bios最后的璀璨
  bios,几乎和pc有着同样的寿命,当年康柏第一台“克隆”pc诞生的时候,它为了简化启动的设置,引入了固化程序的概念,在启动时负责将pc初始化,然后再将控制权交给磁盘上的操作系统。而今天,“康柏”这个品牌已经消失,而bios却作为无心插柳柳成荫之作,延续至今。
  bios伴随了我们十几年,在这么长的日子里,硬件升了一代又一代,电脑换了一台又一台,唯一不变的,就是bios。bios默默伴随着我们这帮从刚学会打abcd的毛头孩子长大成人,当我们都变了,它却还是它最初的模样。
风华已去,佳人已老,bios在十几年的守护中,一步步逐渐落后于硬件的发展,趋于落寞,垂垂老暮。bios在pc启动时,将pc初始化,然后控制权交给磁盘上的操作系统,在后面的阶段,用户的感觉是在通过操作系统直接和硬件对话,可实际上,操作系统想要与硬件进行沟通,仍然必须通过bios。
和老BIOS说永别 EFI BIOS技术解析
我们熟悉的bios操作界面
  bios的全称是basic input/output system,中文名是基本输入输出系统。bios即是操作系统和计算机硬件之间通讯的桥梁,更是充当翻译的角色,从dos时代起,微软的操作系统一直都是建立在“中断”这个概念上的,程序的切换依靠中断,系统的开关依靠中断,甚至我们按下了机箱上“reset”键强制重启电脑,也还是中断在后台的作用。为了延续整套的16位中断系统,无论是cpu开发还是软件升级,都得考虑中断模式。
  在x86系列处理器进入32位时代后,由于兼容性的原因,新的处理器保留了16位的运行方式,此后多次处理器的升级换代都保留了这种运行方式。甚至在含64位扩展技术的至强系列处理器中,处理器加电启动时仍然会切换到16位的实模式下运行。bios程序以16位汇编代码、寄存器参数调用方式、静态链接以及1mb以下内存固定编址的形式存在了十几年,虽然各大bios厂商近年来努力得对其进行改进,加入了许多新元素到产品中,如acpi、usb支持等,但bios的根本性质没有得到任何改变,16位的运行工作环境是其最为致命的缺点。
  现有的bios不但在工作方式存在令人不满之处,在工作能力上,也令人颇有微词。bios发展到现在,用来存放bios程序的芯片最大不过2mb,换成实际字节就是256kb,面对这个数值,即使你想为bios编写一些新的功能,bios芯片中也不会有足够的空间让你写入。这也是bios这十几年来一直停滞不前的原因之一。
  所以bios经过了这些年的辉煌期,已经逐渐脱离了时代的发展,成为了pc功能和性能进一步提升的瓶颈,只有寻求bios的接任者。而bios,必将在璀璨光环的环绕中,落下帷幕,成为历史的记录。
efi接过接力棒
  efi的英文全称是extensible firmware interface,中文名是可扩展固件接口,早在2006年的上半年,intel曾经在idf上进行过efi的演示。要使用efi系统,必须主板和操作系统都支持efi功能,目前支持efi功能的操作系统有mac os x、vista和server 2003。
和老BIOS说永别 EFI BIOS技术解析
  efi在开机时的作用和bios一样,就是初始化pc,但在细节上却又不一样。bios对pc的初始化,只是按照一定的顺序对硬件通电,简单地检查硬件是否能工作,而efi不但检查硬件的完好性,还会加载硬件在efi中的驱动程序,不用操作系统负责驱动的加载工作。 efi的最革命之处,是颠覆了bios的界面概念,让操作界面和windows一样易于上手。在efi的操作界面中,鼠标成为了替代键盘的输入工具,各功能调节的模块也做的和windows程序一样,可以说,efi就是一个小型化的windows系统。
  对于操作系统来说,如果主板使用的是bios,那么操作系统就必须面对所有的硬件,大到主板显卡,小到鼠标键盘,每次重装系统或者系统升级,都必须手动安装新的驱动,否则硬件很可能无法正常工作。而基于efi的主板则方便很多,因为efi架构使用的驱动基于efi byte code。efi byte code有些类似于java的中间代码,并不由cpu直接执行操作,而是需要efi层进行翻译。对于不同的操作系统来说,efi将硬件层很好地保护了起来,所有操作系统看到的,都只是efi留给efi byte code的程序接口,而efi byte code又直接和windows的api联系,这就意味着无论操作系统是windows还是linux,只要有efi byte code支持,只需要一份驱动程序就能吃遍所有操作系统平台。
  更为神奇的是,efi byte code驱动还能绕过操作系统,直接安装在efi环境中,这样对硬件的控制就由efi层负责,efi向操作系统直接提供硬件操作的接口,不需要操作系统再调用驱动。这种方式的优点是不需要进入操作系统,只需要进入efi界面,更新驱动程序就可以完成,而且不需要对每一个操作系统进行驱动升级,只要efi界面中升级一次,所有上层的操作系统都可以直接调用新的efi接口。
  efi在开机之始就能够驱动所有的硬件,网络当然也不会例外,所以在efi的操作界面中,程序可以直接连接上互联网,向外界求助操作系统的维修信息或者在线升级驱动程序。
更方便的编程方式
  有人会问:既然efi功能那么强大,那它存放在什么地方?是存放在原来的bios芯片中吗?答案当然是no。bios芯片只有256kb,远远不够efi使用。efi是以小型磁盘分区的形式存放在硬盘上的。efi的安装,必须在支持efi功能的主板上,使用光驱引导系统,然后对磁盘进行efi化的处理,这个处理的过程,主要就是划分efi独用的磁盘空间。
  efi的存储空间大约为50mb到100mb,具体视驱动文件多少而定。在这部分空间中,包含以下几个部分:
1. pre-efi初始化模块
2. efi驱动执行环境
3. efi驱动程序
4. 兼容性支持模块(csm)
5. efi高层应用
6. guid 磁盘分区
和老BIOS说永别 EFI BIOS技术解析
  在实现中,efi初始化模块和驱动执行环境通常被集成在一个只读存储器中。pre-efi初始化程序在系统开机的时候最先得到执行,它负责最初的cpu、北桥、南桥、内存和硬盘的初始化工作,紧接着载入efi驱动。当efi驱动程序被载入运行后,系统便具有控制所有硬件的能力。在efi规范中,一种突破传统mbr磁盘分区结构限制的guid磁盘分区系统(gpt)被引入,新结构中,磁盘的分区数不再受限制(在mbr结构下,只能存在4个主分区),并且分区类型将由guid来表示。在众多的分区类型中,efi系统分区可以被efi系统存取,用于存放部分驱动和应用程序。csm是在x86平台efi系统中的一个特殊的模块,它将为不具备efi引导能力的操作系统提供类似于传统bios的系统服务。
  由于efi驱动开发简单,所有的硬件厂商都可以参与,为自家的硬件定制最为合适的驱动。基于efi的驱动模型可以使efi系统接触到所有的硬件功能,不进入操作操作系统就浏览网站不再是天方夜谭,甚至实现起来也非常简单。这对基于传统bios的系统来说是件不可能的任务,在bios中添加几个简单的usb设备支持都曾使很多bios设计师痛苦万分,更何况除了添加对无数网络硬件的支持外,还得凭空构建一个16位模式下的tcp/ip协议。