CN101650647A - 一种efi平台的兼容方法 - Google Patents
一种efi平台的兼容方法 Download PDFInfo
- Publication number
- CN101650647A CN101650647A CN200810048770A CN200810048770A CN101650647A CN 101650647 A CN101650647 A CN 101650647A CN 200810048770 A CN200810048770 A CN 200810048770A CN 200810048770 A CN200810048770 A CN 200810048770A CN 101650647 A CN101650647 A CN 101650647A
- Authority
- CN
- China
- Prior art keywords
- efi
- bios
- operating system
- compatible
- support module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Abstract
一种在EFI平台上兼容操作系统的方法,设置兼容性支持模块并挂接到EFI平台,实现16位BIOS模块以及独立的EFI与16位BIOS模块之间的交互层。实现两者之间的互相通信,交互层可以从16位BIOS模块中收集信息提供给EFI,同时也从EFI收集信息提供给16位BIOS模块。计算机设备加电启动后由EFI控制,兼容性支持模块提供16位实环境以便安装、启动基于16位BIOS的操作系统,并在该操作系统运行期间提供支持。运用本发明在将来设有EFI的计算机上即能够启动新型操作系统(例如微软即将要推出的LONGHORN),也能够启动现有的各种传统操作系统。本发明移植性好,启动速度快,能够对操作系统提供更好的支持,使操作系统启动的速度更快,运行更加稳定。
Description
技术领域
本发明属于计算机技术领域,尤其是一种在EFI平台的兼容方法。
背景技术
目前现有的计算机技术里,要让计算机硬件能启动操作系统,必须由BIOS(基本输入/输出系统)提供支持,其内容集成在微机主板上的一个ROM芯片上,主要保存着有关微机系统最重要的基本输入输出程序、系统信息设置、开机上电自检程序和系统启动自举程序等。而在计算机技术突飞猛进的今天,现有BIOS系统已经大大制约了计算机产业的发展,所以现有BIOS系统被替代是历史发展的必然。
2004年英特尔公司首度大幅改造个人计算机BIOS后,即提出以新EFI规范和标准替代现有BIOS的设想,并已经得到微软、惠普、安迈儿等几乎所有世界一流软硬件厂商的支持,所以,该标准作为新公开的IT(InformationTechnologies)行业标准,成为未来的工业标准已经是业内共识。EFI的英文全称为Extensible Firmware Interface,中文名称为可扩展固件接口。EFI是用于所有PC(个人计算机)和现行智能设备的固件标准接口,它可以用于PC在开机前进行诊断和操作,同时能够用于简单的启动操作系统和配置硬件环境,并可用于各种设备和系统初始化及配置。它具有类似于DOS(Disk Operating System)功能,但又远比DOS功能要强大得多。它支持网络,支持最新IPV6标准,同时支持从外部存储设备,比如说软盘,光盘,USB,硬盘等设备上面来加载BIOS的模块和驱动程序,或者从这些设备上面来执行一些shell命令,从而摆脱了BIOS容量和功能的限制,没有重新烧制BIOS的风险和麻烦。它是位于PC机硬件(或者其它外设)和操作系统(如:Windows,Linux)之间的固件接口(即连接硬件系统和系统软件之间的底层的软固件)。EFI不仅可以具有传统PC中BIOS(Basic Input Output System)所有的功能,而且它的功能更强大。英特尔公司已经利用EFI建立一个可以取代BIOS开机前软件的框架,计算机厂商可以自由撰写开机前软件的模块,并填入这个框架,这种模块功能很像Windows的驱动程序,本发明简称此软件框架为EFI平台。
然而,在EFI技术被广泛运用之前,还需要一段过渡阶段,其中最亟待解决的技术问题就是怎样在32位的EFI环境中使用现有的操作系统,例如DOS,WINDOS 9X/NT/2000/2003/XP,LINUX等,本发明称之为传统操作系统。这些基于16位BIOS的操作系统无法直接在设置EFI的PC上使用。现有技术所运用的16位BIOS、基于16位BIOS的OpROMs(Optional ROM,可选只读存储器,如存储在主板,显卡,网卡等只读存储器上的程序)、加电自检内存管理器均可以“传统”简单标示。注意“传统BIOS”区别于“传统16位形式的BIOS程序”。而微软公司即将推出的基于32位EFI的LONGHORN操作系统,本发明称之为新型操作系统,并取代用户数量庞大的传统操作系统将是一段长期过程。因为将来EFI不仅用于个人计算机、还会用于嵌入式系统,甚至广泛应用于所有家电或手执设备(例如手机),因此完整的EFI平台的兼容方案不仅应对提供传统操作系统兼容,还要提供传统OpROMs兼容。提供EFI平台的兼容方案是目前本领域尚未解决的难题。
发明内容
本发明目的是针对现有技术存在的问题,提供一种EFI平台的兼容方法。
为实现上述目的,本发明提供一种EFI平台的兼容方法,设置兼容性支持模块并挂接到EFI平台,兼容性支持模块构建16位实环境并提供与传统16位BIOS运行期间一致的功能,以便支持基于16位BIOS的OpROMs、安装或启动基于16位BIOS的操作系统、和在基于16位BIOS的操作系统安装或运行期间提供支持。
兼容性支持模块的工作流程有以下基本步骤,
(1)进行兼容性支持模块内部初始化的步骤;
(2)进行兼容性模块与EFI的交互步骤;
(3)激活并调用基于16位BIOS的OpROMs的步骤。
同时,所述兼容性支持模块还包括以下部分,
与EFI的接口部分,用于兼容性支持模块与EFI的联系;
内部初始化程序部分,用于兼容性支持模块的内部初始化;
OpROMs处理功能块,用于激活并且调用基于16位BIOS的OpROMs;
形实切换功能块,用于兼容性支持模块与EFI的交互;
BIOS运行期间支持部分,用于实现与传统16位BIOS运行期间一致的功能;
来自EFI的数据发送到与EFI的接口部分后转发到兼容性支持模块的其它部分,并通过与EFI的接口部分调用内部初始化程序部分进行初始化;来自EFI的数据中需要OpRoms的数据传送到OpRoms处理功能块处理;与EFI的接口部分和OpRoms处理功能块调用Bios运行期间支持部分进行支持;当Bios运行期间支持部分需要用到32位EFI环境时调用形实切换功能块,来进入到32位环境获取数据或服务。
而且,形实切换功能块提供两种机制,把控制权从32位EFI环境转到16位实环境然后返回32位EFI环境的切换机制;把控制权从16位实环境转到32位EFI环境然后返回到16位实环境的反切换机制。
而且,通过兼容性支持模块启动操作系统时,提供从基于16位BIOS的OpROMs启动操作系统的选择。
而且,所述兼容性支持模块的85~95%代码采用C语言编写。
而且,兼容性支持模块编译过程中生成用于支持远程源代码调试的PDB文件。
而且,所述兼容性支持模块中与EFI的接口部分遵循英特尔的EFI规范,与基于16位BIOS的操作系统联系的部分遵循传统16位BIOS的规范。
本发明提供了一个兼容性支持模块,能够在EFI平台兼容传统操作系统和传统OpROMs。其功能主要是在将来设有EFI的计算机上既能够启动新型操作系统(例如微软即将要推出的LONGHORN),也能够启动现有的各种传统操作系统。本发明移植性好,能够对操作系统提供更好的支持,使操作系统的启动速度更快,运行更加稳定。并且能够广泛适用于设有EFI的个人计算机、嵌入式系统,甚至于所有设有EFI的家电或手执设备。
附图说明
图1兼容性支持模块组成示意图;
图2本发明实施例BIOS启动设备选择示意图;
图3切换与反切换机制示意图;
图4本发明实施例启动传统操作系统示意图;
图5本发明实施例启动新型操作系统示意图;
图6本发明实施例的兼容性支持模块各部分关系图。
具体实施方式
为了在EFI环境下兼容现有操作系统,设置兼容性支持模块并挂接到EFI平台,兼容性支持模块构建16位实环境并提供与传统16位BIOS运行期间一致的功能,以便支持基于16位BIOS的OpROM、安装或启动基于16位BIOS的操作系统、和在基于16位BIOS的操作系统安装或运行期间提供支持。在本发明中,兼容性支持模块简称为CSM。因为传统操作系统基于16位BIOS,而EFI(可扩展固件接口)系统是32位EFI环境,所以,在已设有EFI系统的计算机,在传统操作系统下无法启动。本发明构建出16位实环境,转换由从EFI中得到的各种32位数据,使之成为16位数据,激活和调用基于16位BIOS的OpROMs信息,提供传统操作系统所需各种服务。本发明设置兼容性支持模块并挂接到EFI平台,计算机设备加电启动后由EFI控制,兼容性支持模块提供16位实环境以便安装、启动基于16位BIOS的操作系统。EFI作为连接硬件系统和系统软件之间的底层的软固件,担负操作系统与硬件之间联系的责任,因此除安装和启动这两种情况外,兼容性支持模块还需在传统操作系统运行期间提供支持。总体来说,兼容性支持模块的任务就是从32位EFI环境转换到16位实环境,并提供与传统16位BIOS运行期间一致的功能。对于BIOS的运行期间来说,安装或者启动操作系统也是BIOS运行期间的内容,不单纯指操作系统的运行期间。所述即能够拥有EFI的优势,比如快速的启动、更好的平台适应性、更好的稳定性、更容易的开发和降低开发的成本,同时也与传统16位BIOS运行期间一致的功能,既包括与传统16位BIOS运行期间一样的功能,也可包括更多的扩展功能,比如能够较为快速的启动系统。
所谓兼容性支持模块挂接到EFI平台,即指兼容性支持模块是EFI中的一个部分,一个模块。具体实施时,EFI其它部分可以直接采用遵循EFI规范的软硬件厂商提供的开源代码,兼容性支持模块则根据本发明提供的组成部分和工作流程由本领域技术人员编写即可,本发明所要求的技术方案保护范围并不包括EFI其它部分的具体构成。在具体实施过程中,兼容性支持模块可以与EFI的其它部分整体固化。但在本发明中,为了简便说明兼容性支持模块与EFI其它部分的交互,所称EFI没有包含兼容性支持模块。为了实现从32位EFI环境转换倒16位实环境,并提供传统16位BIOS运行期间一致的功能,本发明的兼容性支持模块工作流程有以下基本步骤:(1)进行兼容性支持模块内部初始化的步骤;(2)进行兼容性模块与EFI的交互步骤;(3)激活并调用基于16位BIOS的OpROMs的步骤。上述基本步骤完成后,16位实环境已构建完毕,若任务为启动传统操作系统,则进入启动传统操作系统步骤,启动基于16位BIOS的操作系统。在EFI CSM构建的16位实模式环境下安装基于16位BIOS的操作系统,与启动基于16BIOS的操作系统过程基本类似,只是操作系统所调用的BIOS服务不一样,因此本发明将主要以启动传统操作系统作为实施例进行说明,安装过程不予赘述。兼容传统OpROMs则只需进行到步骤(3)。
开机运行EFI到Shell(EFI的命令行执行外壳,与DOS或者LINUX的命令行执行外壳有点类似)阶段后,开始加载并初始化兼容性支持模块,执行上述各步骤。值得注意的是,因为需要分次转换各类传统OpROM信息,步骤(2)反复运用从32位EFI环境转到16位实环境然后返回EFI的切换机制。为了应对可能出现的异常情况,本发明提供了与之相反的反切换机制,即把控制权从16位实环境转到32位EFI环境然后返回到16位实环境。
为了能够在EFI环境下兼容现有传统操作系统,本发明提供的兼容性支持模块包括以下部分,
(a)与EFI的接口部分,通过这些接口,把CSM和EFI有机的联系在一起,在控制权完全交到基于16位BIOS的操作系统之前,CSM的操作离不开该部分的支持。
为了实行兼容性支持模块与EFI其它部分的交互,首先必须能建立兼容性支持模块与EFI其它部分的联系,本发明通过在CSM中设立与EFI的接口部分来实现这种联系。如图1所示,英特尔公司为了使BIOS厂商能够更好的遵循EFI规范并实现兼容性支持,已经在EFI里面包含了用来帮助BIOS厂商实现兼容性支持的EFI驱动。这些驱动包括把EFI从32位保护模式切换到16位实模式的驱动,BIOS启动设备选择驱动,为传统BIOS内存区域管理提供支持的EFI驱动,为传统BIOS可编程控制器8259提供支持的EFI驱动,为传统BIOS提供磁盘信息的EFI驱动,为工业标准结构的高级电源管理提供支持的EFI驱动。这些驱动为BIOS厂商将要实现的CSM提供了接口,BIOS厂商把自己的CSM编译成64K或者128K的二进制文件,英特尔公司提供的这些EFI驱动,负责把以上二进制文件的内容映像到1M以下的内存区域。本发明具体实施时,EFI通过CSM中与EFI的接口部分(即CSM向EFI提供的接口),连接上述EFI向CSM提供的接口,将CSM与EFI联系到一起。
由于本发明提供的CSM处在EFI环境中,需要与EFI进行交互,所以兼容性支持模块中与EFI的接口部分必须遵循EFI的规范,这些规范可以在英特尔公司的网站找到。同时,由于CSM需要给操作系统提供16位实环境,因此CSM中与基于16位BIOS的操作系统的联接部分必须参照传统BIOS的规范。传统BIOS规范详情可参考IBMPersonal System/2 and Personal Computer BIOS InterfaceTechnical Reference.Second edition.IBM Corporation,IBM No.S68X-2341-00,1988。该联接部分提供与传统BIOS运行期间一致的16位形式的接口。由于本发明CSM的实现目的,该接口是由CSM中的所有部分实现的,特殊的是,与EFI的接口部分为间接实现,因此不算与基于16位BIOS的操作系统联系的部分,它遵循的是EFI的规范。虽然本发明CSM并没有提供与传统16位BIOS完全相同的内容,并没有POST部分,但是遵循的规范仍然是一致的。
(b)内部初始化程序部分,用于内部的一些初始化,以便本身能够正常的工作。
(c)OpROMs处理功能块,传统的OpROMs虽然已由EFI映像到内存,但是仍然需要CSM程序来启动并且调用OpROMs上面的程序。
(d)形实切换功能块,具体实施时,由EFI的32位模式切换CSM的16位实模式程序,可采用英特尔公司的形实切换驱动,但是,由BIOS厂商提供由16位实模式切换到32位EFI环境的程序。
(e)BIOS运行期间支持部分,实现与传统BIOS运行期间一样的功能,向操作系统提供中断服务,内存管理信息,电源管理接口,桌面管理接口,系统管理BIOS,是操作系统正常安装,启动,运行的关键。
参见附图6,本发明还提供了实施例的各部分关系,以供实施参考:来自EFI的数据发送到与EFI的接口部分后转发到兼容性支持模块的其它部分,并通过与EFI的接口部分调用内部初始化程序部分进行初始化;来自EFI的数据中需要OpRoms的数据传送到OpRoms处理功能块处理;与EFI的接口部分和OpRoms处理功能块调用Bios运行期间支持部分进行支持;当Bios运行期间支持部分需要用到32位EFI环境时调用形实切换功能块,来进入到32位环境获取数据或服务。
因为16位实环境与32位EFI环境交错混杂,本发明的实现需要一定技巧。在具体实施过程中,采用模块化设计方式,绝大部分使用C语言编程,只有少部分汇编程序,扩展性更大,功能性更强。本发明实施例将实现兼容性支持的代码分为几个代码块:为兼容性提供支持的EFI环境下32位程序(此部分由英特尔公司提供),提供16位实环境的16位程序(本发明称为LEGACY16),在32位和16位之间切换的程序,兼容性支持SMM(System Management Mode,系统管理模式)程序。由于上述启动传统操作系统的四个步骤都需要由EFI平台引导开始,为了说明EFI与兼容性支持模块之间的互动,EFI环境里面为兼容性提供支持的程序被称为32位CSM,而EFI的其它代码被统称为EFI或者32位EFI,本发明实现的16位兼容性程序称为16位CSM。
由于从传统16位BIOS转换到32位EFI会是一个长期的过程,而基于16位的硬件和硬件上面固化的程序(主要是传统的OpROMs和传统操作系统)不能识别EFI。出于提供一种兼容可能性的目的,英特尔公司已经在EFI架构内提供部分为兼容性提供支持的32位EFI的驱动代码,也提出CSM的设计思路,但是,这种思路很抽象,没能解决兼容性的难题。而本发明则提出了完整的兼容方案,完善了兼容切换机制,实现了兼容传统操作系统的目的。为了便于实施,本发明说明英特尔公司为兼容性提供支持的32位EFI驱动内容,及其与兼容性16位BIOS程序、兼容性16位系统管理模式程序之间的关系,参见图1:为32位EFI提供兼容性支持驱动的主体是为传统内存区域管理提供支持的EFI驱动、为传统BIOS可编程控制器8259提供支持的EFI驱动、为传统BIOS提供磁盘信息的EFI驱动和为工业标准架构的高级电源管理接口提供支持的EFI驱动,由于为BIOS启动设备选择提供支持的EFI驱动(该驱动是为传统BIOS启动提供支持的EFI驱动中的)和EFI形实切换驱动抽象出的传统BIOS协议(该协议是为EFI启动提供支持的BIOS驱动中的),初始化后提供的为传统BIOS提供支持的EFI驱动。具体实施过程中,需要编写兼容性16位的系统管理模式程序和兼容性16位的BIOS程序。为传统BIOS提供支持的EFI驱动与兼容性16位的系统管理模式程序进行交互,并为兼容性16位的系统管理模式程序提供支持,为兼容性提供支持的32位的EFI驱动与兼容性16位的BIOS程序进行交互,并为兼容性16位的BIOS程序提供支持。根据传统操作系统协议编写的兼容性16位BIOS程序最终提供了16位实环境,为传统操作的启动和运行提供支持。兼容性16位的系统管理模式程序和兼容性16位的BIOS程序都是面向传统操作系统提供16位BIOS接口,可以称之为传统16位形式的BIOS程序。为了方便实施,本发明还在附图1中标记了兼容性支持模块各部分的性质来源:标记A表示是EFI框架下的普通程序,B表示与具体硬件平台有关的程序,C表示兼容性16位BIOS,D表示由独立BIOS厂商提供的程序。
本发明提供进一步分析程序代码与兼容性支持模块各部分的关系以便实施:
本发明实施例主要提供了兼容性16位的BIOS程序代码和兼容性16位的系统管理模式程序代码。兼容性16位的BIOS程序支持除了为OpROMs和传统的硬件提供中断服务函数以外,还提供所有的运行期间支持,是正常启动,安装和运行传统操作系统所必须的。因此兼容性16位的BIOS程序代码包括与EFI的接口部分、内部初始化程序部分,传统OpROMs处理功能块,形实切换功能块,传统BIOS运行期间支持部分。具体实施时,形实切换功能块中从32位EFI环境切换到16位实模式可以直接利用属于为兼容性提供支持的32位的EFI驱动,从16位实模式环境返回32位EFI环境属于兼容性16位的BIOS程序,这一过程本发明称之为“切换”;从16位实模式到32位EFI环境属于兼容性16位的BIOS程序,返回属于为兼容性提供支持的32位的EFI驱动,这一过程我们称之为“反切换”。兼容性16位的系统管理模式程序是可选择的,用户的需求或者传统的部分属性也有可能迫使它成为一个需要的代码块,用于提供特殊情况下传统操作系统的系统管理所需的额外支持。兼容性16位的系统管理模式程序是与芯片组和/或平台相关的。下面是可能需要兼容性16位的系统管理模式程序的一些例子:为支持INT 15 D042的系统配置数据;为鼠标和键盘提供旧型USB支持;用USB启动设备信息更新BBS(Bios Boot Specification,BIOS启动规范)。
结合代码,本发明提供了具体实施例的启动传统操作系统过程和启动新型操作系统过程:
参见图4,本发明实施例在EFI平台启动基于16位BIOS的操作系统有以下步骤,
(11)由内部初始化程序部分进行初始化步骤。当进入到BDS(BIOS BootDevice Selection,BIOS启动设备选择)阶段后,依据使用者意愿,可选择从CSM或shell启动。对于选择从EFI启动到Shell后,使用者仍然可以通过Shell命令装载并初始化兼容性支持模块。对于直接选择从CSm启动,则EFI系统直接装载并初始化兼容性支持模块。装载并初始化之后,EFI系统将找到32位CSM的入口点,并执行里面的程序。32位的CSM程序首先检查是否加载了16位的CSM,如果没有,则不能启动传统的操作系统。具体操作为:初始化基于16位BIOS的加电自检内存管理器,把兼容性支持模块映像到内存,并从这个内存区域里面以特定的标识搜索兼容性支持模块与EFI的联系表格,从表格里面得到16位兼容性支持模块的入口地址,切换到16位实模式,并转到16位兼容性支持模块的入口执行。本发明实施例中内部初始化程序部分由英特尔的EFI驱动完成。
从控制权角度看:16位的CSM程序向32位的CSM程序提供16位BIOS程序的入口点等信息,32位的CSM程序得到这些信息,在进行了一些其本身的内部初始化以后,切换到16位实模式,并把控制权交给16位的CSM程序。16位的CSM程序执行一些初始化步骤以后,把控制权交还给32位的CSM程序。
(12)与EFI的交互步骤。这个步骤需要几次用到由形实切换功能块实现的切换和反切换机制(如图3所示)。通过这个步骤,CSM从EFI得到高级电源管理接口的数据,得到内存管理信息的数据,系统管理BIOS的数据,磁盘信息的数据,多处理器数据,PCI(周边组件扩展接口)中断路由表的数据,BBS(Bios启动规范)的相关数据来完成CSM内部的初始化,同时,CSM向EFI提供由OEM(Original Equipment Manufacturer,原始设备制造商)提供的16位或者32位的程序和/或数据,来实现BIOS的个性化和/或某些额外的功能。
从控制权角度看:32位的CSM程序加载显卡驱动,并把相关信息传递给16位的CSM,然后把控制权交给16位的CSM程序。
(13)通过OpROMs处理功能块启动并调用基于16位BIOS的OpROMs信息的步骤。某些OpROM可能会接管某些中断,比如显卡上的OpROM可能就会接管INT 10H,某些带启动功能的OpROM可能会接管INT 19H和INT 18H;其它PCI只读存储器(如网卡)的初始化过程与显卡的过程类似,也是由32位的CSM程序把OpROM里面的内容映像到内存,并把相关信息传递给16位的CSM,把硬件设备按传统16位实模式的方式初始化,切换到16位实模式。
从控制权角度看:由16位的CSM程序进行进一步的初始化工作,启动并调用OpROM里面的程序,然后把控制权交还给32位的CSM程序。
(14)所有上述操作完成以后,进行传统操作系统启动步骤。16位的CSM将进行一些操作系统启动之前的准备工作,最后32位的CSM程序把控制权交给16位的CSM程序,由16位的CSM程序来完成最终的传统方式的启动工作,启动成功后控制权将交给操作系统,不再返回EFI环境。在操作系统的运行期间,16位的CSM继续通过BIOS运行期间支持部分对操作系统提供运行期间支持。
参见图5,启动新型操作系统则兼容性支持模块为:EFI启动到Shell后,装载并初始化兼容性支持模块,找到32位CSM的入口点,并执行里面的程序。接着就开始新型操作系统的启动。新型操作系统的启动不涉及到16位的CSM程序,整个启动过程都是由英特尔提供的EFI驱动来完成的,与本发明的技术目的无关,放在此处与传统操作系统的启动做为对比。
为了实现启动,首先需要构建出兼容性支持模块的工作模式,因为EFI已经完成了与传统BIOS的POST(Power On Self Test,加电自检)相类似的功能,本发明主要实现的是传统16位BIOS程序的运行期间支持部分,内容如下:与EFI的接口代码;内部初始化代码;从EFI得到高级电源管理接口数据并提供给操作系统的代码;从EFI得到内存管理数据并提供给操作系统的代码;从EFI得到PCI中断路由表的数据,并用传统的中断请求资源来更新硬件信息的代码;从EFI得到启动设备列表的代码;形实切换代码;启动和调用传统OpROMs的代码;进一步初始化硬件的代码;中断环境的构建和中断服务函数代码;装载一个传统操作系统的代码。其中装载一个传统的操作系统的代码即操作系统启动程序,该程序的执行步骤为:从EFI得到数据,并且把这些数据转化为为传统16位形式BIOS提供支持的模块所需要的数据结构形式;更新标准的BDA(BIOSData Area,BIOS数据区域,内存里面的开辟一个区域,断电以后数据消失)、EBDA(Extended BIOS Data Area,扩展BIOS数据区域,内存里面的开辟一个区域,断电以后数据消失)、和CMOS(Complementary Metal-Oxide-SemiconductorTransistor,互补型金属氧化物半导体,一般在主板上,有专门的CMOS电池供电,断电以后数据不会消失)里面的数据;用传统的资源(IRQs)来更新硬件配置信息。本发明的操作系统启动功能块提供由16位BIOS的OpROMs启动操作系统的选择,这种情况通常是应用在PC以外所安装的EFI设备上。为了选择具体的启动设备启动操作系统,EFI驱动会产生一个启动设备的列表,以便更新BDS(BIOS Boot Device Selection,BIOS启动设备选择)数据,CSM从EFI得到BDS的数据,从而使用户能够自由选择启动设备。
本发明的传统16位形式的BIOS程序用于提供16位实环境,可看作是提供了一个与传统操作系统相对应的BIOS,并去掉加电自检和BIOS设置部分。这个“BIOS”包含以下内容:运行期间支持程序;INT 18h,用于处理启动失败时的中断服务函数;INT 19h,用于传统操作系统引导的中断服务函数;一小段处理为兼容性提供支持的EFI驱动和传统16位形式的BIOS程序接口的程序。具体实施时过程中,传统16位形式的BIOS程序可由本领域技术人员自行参考技术手册进行设计,实现与现有BIOS提供商提供的BIOS相似的功能。为了使兼容性支持模块对每一类平台都通用(如桌面,服务器,移动平台),本发明的传统16位形式的BIOS程序与芯片组和具体硬件平台无关,它通过传统的硬件接口控制硬件,把芯片组的编程留给EFI和/或为兼容性提供支持的EFI驱动来做。这样可以使代码的可重用性最大化,减少代码的BUG。本发明具体实施时,Legacy16代码被编译为一个64K或者128K的无格式的二进制文件,然后这个二进制文件配合为兼容性提供支持的EFI驱动,一起编译为一个FV(Firmware Volume)档。在运行的时候,16位代码将被装载到内存。
为了将从EFI得到的数据转化为兼容的16位数据结构,即为兼容性提供支持的EFI驱动和传统16位形式的BIOS程序之间的通讯,本发明采用形实切换功能块,具体实施时可以采用数据表格和函数形式。兼容性16位表格,该表由EFI建立,然后将传统OpROMs信息传递给16位实环境构建功能块。传统16位形式的BIOS程序的函数提供为兼容性提供支持的EFI驱动需要的指定信息。本发明具体实施例提供的传统16位形式的BIOS程序的函数举例如下:LEGACY16InitializeYourself(),用来允许LEGACY16做一些初始化的工作;LEGACY16PrepareToBoot(),允许LEGACY16在启动一个传统的操作系统之前再做一些清理或者其它的工作,为操作系统的最终成功启动做最后的准备工作;LEGACY16GetTableAddress(),请求LEGACY16内存区域里面分配指定大小的一个内存块,为兼容性提供支持的EFI驱动就会把数据拷贝到内存块里面去。操作系统启动之前,需要BIOS做一些初始化工作,在操作系统启动以后,还需要BIOS提供一些运行期间的支持,因为在操作系统的运行过程中,它还需要调用BIOS的一些中断服务或者从BIOS得到一些参数信息等。传统16位形式的BIOS程序实现的传统操作系统运行期间支持功能块满足上述需求。中断服务是最重要的一部分,包括INT 0x08(系统时钟中断)、INT 0x09(键盘中断)、INT 0x10(显示服务)、INT 0x11(返回系统配置信息)、INT 0x12(返回基本内存的大小)等,按照中断服务手册编写即可。其它支持还有ACPI支持和APM支持等。ACPI是一个高级电源管理的接口,它会告诉操作系统如何管理和节省电源。某些传统操作系统,如WINDOWS XP,LINUX等会在启动的时候在内存中搜索ACPI表,如果没有找到则不能启动。操作系统在运行的时候,随时都可能需要调用ACPI表里面的数据来管理设备的电源。这个特性对于一些移动设备,比如笔记本电脑来说,是非常重要和有意义的。最常见的一种情况就是如果在规定的时间内,用户没有移动鼠标或键盘,WINDOWS就进入省电模式,当用户移动鼠标或敲击键盘的时候,计算机又从省电模式中恢复过来。APM是一个比较老的标准,但是某些操作系统却需要它,比如说Windows95,Windows98等就需要用它来对设备进行电源管理。因为在Windows95,Windows98开始推广时,ACPI的标准尚未普及。
参见图3,本发明模式切换程序用来提供一个把控制权从32位EFI环境转到16位实环境然后返回EFI的切换机制;为了应对可能出现的异常情况,本发明提供了与之相反的反切换机制。具体的说,模式切换程序进行从传统BIOS的16位实模式环境或者传统OpROMs的16位实模式环境到32位EFI环境的切换,需要进行以下步骤:处理任何PIC(Programmable Interrupt Controller,可编程中断控制器)和APIC(Advanced Programmable Interrupt Controller,高级可编程中断控制器)的重编程序,并且装载新的GDT(Global Description Table,全局描述符)和IDT(Interrupt Description Table,中断描述符)表;执行请求的动作;保存32位EFI环境的寄存器状态;恢复16位的中断环境并且返回16位实模式环境。切换机制的步骤与之相反,此属英特尔公司提供的内容,在此不予赘述。
为了能够从磁盘以外的设备启动传统操作系统,操作系统启动功能块提供基于16位BIOS的OpROMs启动操作系统的选择。关于BDS(BIOS Boot DeviceSelection,BIOS启动设备选择)在前文已有阐述,现提供传统BDS流程,参见图2:判断是否需要传统的服务(传统的OpROMs的情况、启动各个传统操作系统的情况、是否存在一个可启动的操作系统情况),如果不需要就选择普通EFI启动路径来启动EFI系统或者新型的操作系统;如果需要的话,就选择从传统路径来启动传统的操作系统,首先加载对传统路径提供支持的驱动,然后加载传统BIOS程序(指EFI之前的BIOS,一般是用汇编语言编写的16位程序);判断是否需要传统的视频可选只读存储器,如果需要的话,就载入传统视频可选只读存储器,否则直接进入下一步;判断是否需要用其它的传统可选只读存储器,如果需要的话,则加载传统可选只读存储器,否则直接进入下一步;判断是否启动传统操作系统,如果不需要的话,就进入普通EFI启动,如果需要,则进入下一步;生成系统管理BIOS数据结构,生成传统设备的结构,生成BBS(bios启动规范)和INT15 E820数据结构(INT 15是一个复杂的中断,主要用来向操作系统提供多种系统服务,一些传统操作系统调用INT15的E820功能查询内存大小和分配情况),生成高级电源管理接口;装载兼容性系统管理模式程序,然后尝试启动传统操作系统;如果启动成功,则将控制权交给操作系统,传统16位形式的BIOS对其运行期间提供支持,保障操作系统的稳定运行。如果启动失败,则存储启动表信息,重新寻找可以使用的可启动设备;如果仍然无法正常使用,将有,就从下一个可启动设备来启动操作系统,否则重启系统。
为了提高实用性,本发明提供更进一步的技术方案:目前的BIOS均采用汇编语言编程,本发明实施例的兼容性支持模块中的85~95%的代码均采用C语言进行编写,移植性好,便于调试。本发明实施时,兼容性支持模块编译过程中生成用于支持远程源代码调试的PDB文件,PDB文件是微软公司支持调试的一个文件格式,在pdb文件里面记录了源代码的行号,标识等信息。
Claims (8)
1.一种EFI平台的兼容方法,其特征是:设置兼容性支持模块并挂接到EFI平台,兼容性支持模块构建16位实环境并提供与传统16位BIOS运行期间一致的功能以便支持基于16位BIOS的OpROMs、安装或启动基于16位BIOS的操作系统、和/或在基于16位BIOS的操作系统安装或运行期间提供支持。
2.如权利要求1所述兼容方法,其特征是:兼容性支持模块的工作流程有以下基本步骤,
(1)进行兼容性支持模块内部初始化的步骤;
(2)进行兼容性模块与EFI的交互步骤;
(3)激活并调用基于16位BIOS的OpROMs的步骤。
3.如权利要求1或2所述兼容方法,其特征是:所述兼容性支持模块包括以下部分,
与EFI的接口部分,用于兼容性支持模块与EFI的联系;
内部初始化程序部分,用于兼容性支持模块的内部初始化;
OpROMs处理功能块,用于激活并且调用基于16位BIOS的OpROMs;
形实切换功能块,用于兼容性支持模块与EFI的交互;
BIOS运行期间支持部分,用于实现与传统16位BIOS运行期间一致的功能;
来自EFI的数据发送到与EFI的接口部分后转发到兼容性支持模块的其它部分,并通过与EFI的接口部分调用内部初始化程序部分进行初始化;来自EFI的数据中需要OpRoms的数据传送到OpRoms处理功能块处理;与EFI的接口部分和OpRoms处理功能块调用Bios运行期间支持部分进行支持;当Bios运行期间支持部分需要用到32位EFI环境时调用形实切换功能块,来进入到32位环境获取数据或服务。
4.如权利要求3所述的兼容方法,其特征是:形实切换功能块提供两种机制,把控制权从32位EFI环境转到16位实环境然后返回32位EFI环境的切换机制;把控制权从16位实环境转到32位EFI环境然后返回到16位实环境的反切换机制。
5.如权利要求1或2所述的兼容方法,其特征是:通过兼容性支持模块启动操作系统时,提供从基于16位BIOS的OpROMs启动操作系统的选择。
6.如权利要求1或2所述的兼容方法,其特征是:所述兼容性支持模块的85~95%代码采用C语言编写。
7.如权利要求1或2所述的兼容方法,其特征是:兼容性支持模块编译过程中生成用于支持远程源代码调试的PDB文件。
8.如权利要求1或2所述的兼容方法,其特征是:所述兼容性支持模块中与EFI的接口部分遵循Intel的EFI规范,与基于16位BIOS的操作系统联系的部分遵循传统16位BIOS的规范。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810048770A CN101650647A (zh) | 2008-08-12 | 2008-08-12 | 一种efi平台的兼容方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810048770A CN101650647A (zh) | 2008-08-12 | 2008-08-12 | 一种efi平台的兼容方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101650647A true CN101650647A (zh) | 2010-02-17 |
Family
ID=41672890
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810048770A Pending CN101650647A (zh) | 2008-08-12 | 2008-08-12 | 一种efi平台的兼容方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101650647A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799478A (zh) * | 2011-05-24 | 2012-11-28 | 联想(北京)有限公司 | 一种计算机及计算机启动方法 |
CN103235755A (zh) * | 2013-04-16 | 2013-08-07 | 合肥联宝信息技术有限公司 | 一种bios远程网络调试方法 |
CN103677873A (zh) * | 2012-09-10 | 2014-03-26 | 联想(北京)有限公司 | 操作系统安装方法、操作系统切换方法及电子设备 |
CN104572163A (zh) * | 2014-03-21 | 2015-04-29 | 中电科技(北京)有限公司 | 一种基于龙芯台式计算机的uefi固件实现方法 |
CN106909848A (zh) * | 2015-12-22 | 2017-06-30 | 中电科技(北京)有限公司 | 一种基于bios扩展的计算机安全增强系统及其方法 |
CN106933558A (zh) * | 2015-12-31 | 2017-07-07 | 研祥智能科技股份有限公司 | 一种电源控制方法及装置 |
CN107479482A (zh) * | 2017-08-21 | 2017-12-15 | 上海博泰悦臻网络技术服务有限公司 | 一种应用于汽车电子的操作系统和实现方法 |
CN110134443A (zh) * | 2018-02-08 | 2019-08-16 | 联想企业解决方案(新加坡)有限公司 | 在计算设备中执行附件的选项rom的方法和设备 |
CN114756288A (zh) * | 2022-03-30 | 2022-07-15 | 联想(北京)有限公司 | 一种处理方法以及电子设备 |
CN116954760A (zh) * | 2023-09-20 | 2023-10-27 | 无锡宏创盛安科技有限公司 | 一种uefi智能启动的方法 |
-
2008
- 2008-08-12 CN CN200810048770A patent/CN101650647A/zh active Pending
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102799478A (zh) * | 2011-05-24 | 2012-11-28 | 联想(北京)有限公司 | 一种计算机及计算机启动方法 |
CN102799478B (zh) * | 2011-05-24 | 2015-04-29 | 联想(北京)有限公司 | 一种计算机及计算机启动方法 |
CN103677873A (zh) * | 2012-09-10 | 2014-03-26 | 联想(北京)有限公司 | 操作系统安装方法、操作系统切换方法及电子设备 |
CN103235755A (zh) * | 2013-04-16 | 2013-08-07 | 合肥联宝信息技术有限公司 | 一种bios远程网络调试方法 |
CN104572163A (zh) * | 2014-03-21 | 2015-04-29 | 中电科技(北京)有限公司 | 一种基于龙芯台式计算机的uefi固件实现方法 |
CN106909848A (zh) * | 2015-12-22 | 2017-06-30 | 中电科技(北京)有限公司 | 一种基于bios扩展的计算机安全增强系统及其方法 |
CN106933558A (zh) * | 2015-12-31 | 2017-07-07 | 研祥智能科技股份有限公司 | 一种电源控制方法及装置 |
CN107479482A (zh) * | 2017-08-21 | 2017-12-15 | 上海博泰悦臻网络技术服务有限公司 | 一种应用于汽车电子的操作系统和实现方法 |
CN107479482B (zh) * | 2017-08-21 | 2023-02-28 | 上海博泰悦臻网络技术服务有限公司 | 一种应用于汽车电子的操作系统和实现方法 |
CN110134443A (zh) * | 2018-02-08 | 2019-08-16 | 联想企业解决方案(新加坡)有限公司 | 在计算设备中执行附件的选项rom的方法和设备 |
CN114756288A (zh) * | 2022-03-30 | 2022-07-15 | 联想(北京)有限公司 | 一种处理方法以及电子设备 |
CN116954760A (zh) * | 2023-09-20 | 2023-10-27 | 无锡宏创盛安科技有限公司 | 一种uefi智能启动的方法 |
CN116954760B (zh) * | 2023-09-20 | 2023-12-15 | 无锡宏创盛安科技有限公司 | 一种uefi智能启动的方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101650647A (zh) | 一种efi平台的兼容方法 | |
US7107441B2 (en) | Pre-boot interpreted namespace parsing for flexible heterogeneous configuration and code consolidation | |
EP2442205B1 (en) | Method and apparatus for managing power from a sequestered partition of a processing system | |
US6356965B1 (en) | Hotkey for network service boot | |
CN101763279B (zh) | 一种BootLoader架构设计方法 | |
CN101814035B (zh) | 允许快速平台重启的方法和系统 | |
CN102200916B (zh) | 电子设备、可配置的部件及该部件的配置信息存储方法 | |
US7647509B2 (en) | Method and apparatus for managing power in a processing system with multiple partitions | |
JP2017224272A (ja) | ハードウェア障害回復システム | |
CN104572161B (zh) | 一种基于龙芯便携式计算机的uefi固件实现方法 | |
US20120254831A1 (en) | Supporting hardware configuration changes in a uefi firmware component | |
CN102135893A (zh) | 将操作系统集成到bios芯片及启动服务器上操作系统的方法 | |
CN103748569A (zh) | Usb设备的无驱动操作的系统和方法 | |
CN100353320C (zh) | 引导过程 | |
CN101021797A (zh) | 一种用于嵌入式系统的软件修复和升级方法 | |
CN102693144B (zh) | 一种Android移动终端的电容屏固件升级的方法 | |
CN103761088A (zh) | 一种适用于arm架构移动设备的多操作系统切换方法 | |
CN104572061A (zh) | 一种基于龙芯服务器的uefi固件实现方法 | |
KR20130022095A (ko) | 정보처리 시스템에서 운영체제 전환방법 | |
US7080244B2 (en) | System and method for configuring hardware devices using a menu for platforms with EFI and legacy option-ROMs | |
US20190004818A1 (en) | Method of UEFI Shell for Supporting Power Saving Mode and Computer System thereof | |
CN104572162A (zh) | 一种基于龙芯手持式计算机的uefi固件实现方法 | |
CN104572163A (zh) | 一种基于龙芯台式计算机的uefi固件实现方法 | |
CN101201746A (zh) | 基本输出入系统设定方法 | |
KR20130068630A (ko) | 임베디드 디바이스의 초기화 방법 및 장치 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20100217 |