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

2024-03-08 04:40

本文主要是介绍java efl_和老BIOS说永别 EFI BIOS技术解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

来源:华强电子网

作者:华仔

浏览:231

时间:2017-05-13 19:28

标签:

摘要:

BIOS最后的璀璨  BIOS,几乎和PC有着同样的寿命,当年康柏第一台“克隆”PC诞生的时候,它为了简化启动的设置,引入了固化程序的概念,在启动时负责将PC初始化,然后再将控制权交给磁盘上的操作系统。而今天,“康柏”这个品牌已经消失,而BIOS却作为无心插柳柳成荫之作,延续至今。  BIOS伴随了我们十几年,在这么长的日子里,硬件升了一代又一代,电脑换了一台又一台,唯一不变的,就是BIOS。BI

BIOS最后的璀璨

BIOS,几乎和PC有着同样的寿命,当年康柏第一台“克隆”PC诞生的时候,它为了简化启动的设置,引入了固化程序的概念,在启动时负责将PC初始化,然后再将控制权交给磁盘上的操作系统。而今天,“康柏”这个品牌已经消失,而BIOS却作为无心插柳柳成荫之作,延续至今。

BIOS伴随了我们十几年,在这么长的日子里,硬件升了一代又一代,电脑换了一台又一台,唯一不变的,就是BIOS。BIOS默默伴随着我们这帮从刚学会打ABCD的毛头孩子长大成人,当我们都变了,它却还是它最初的模样。

风华已去,佳人已老,BIOS在十几年的守护中,一步步逐渐落后于硬件的发展,趋于落寞,垂垂老暮。BIOS在PC启动时,将PC初始化,然后控制权交给磁盘上的操作系统,在后面的阶段,用户的感觉是在通过操作系统直接和硬件对话,可实际上,操作系统想要与硬件进行沟通,仍然必须通过BIOS。

9ffaeacd8e7c45a725c4568ecbd8f0fd.png我们熟悉的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。

7891c7bbed29457c4f31d688d49240d9.png  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 磁盘分区

40381ce2a9a60ac6cfbbc25f2a4240ca.png  在实现中,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协议。

上一页12 下一页 阅读全文

分享到:

fe10e0cc3ff59843d17e5bbd0409075a.png

这篇关于java efl_和老BIOS说永别 EFI BIOS技术解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/786034

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

SpringBoot中配置文件的加载顺序解读

《SpringBoot中配置文件的加载顺序解读》:本文主要介绍SpringBoot中配置文件的加载顺序,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot配置文件的加载顺序1、命令⾏参数2、Java系统属性3、操作系统环境变量5、项目【外部】的ap

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

Golang HashMap实现原理解析

《GolangHashMap实现原理解析》HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持高效的插入、查找和删除操作,:本文主要介绍GolangH... 目录HashMap是一种基于哈希表实现的键值对存储结构,它通过哈希函数将键映射到数组的索引位置,支持