模块化计算机固件及其实现方法
技术领域
本发明涉及一种模块化计算机固件及其实现方法,尤其是一种占用低容量存储空间的模块化计算机固件及其实现方法。
背景技术
固件(Firmware)是一般存储于设备中的EEPROM或FLASH芯片中的程序,通俗的理解就是“固化的软件”。固件担任着一个系统最基础最底层工作的软件。而在硬件设备中,固件就是硬件设备的灵魂,因为一些硬件设备除了固件以外没有其它软件组成,因此固件也就决定着硬件设备的功能及性能。
计算机固件俗称BIOS(Basic Input Output System),中文名称为“基本输入输出系统”,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。
因为硬件发展迅速,传统式(Legacy)BIOS已经不能满足进步的需求,现在已发展出最新的EFI(Extensible Firmware Interface)可扩展固件接口,它只包含接口格式的定义,不含实现,是一个规范,它定义了用于接替(Legacy)Bios的新一代Firmware的结构和对外接口,从而实现了固件的高度可扩展性、可维护性,缩短了固件开发周期。
与BIOS显著不同的是,UEFI是用模块化、集中调度机制、动态链接的形式构建系统,它比BIOS更易于实现,容错和纠错特性也更强,从而缩短了系统研发的时间。更加重要的是,它运行于32位或64位模式,突破了传统16位代码的寻址能力,达到处理器的最大寻址,此举克服了BIOS代码运行缓慢的弊端。
UEFI框架主要包含两部分,一是PEI(EFI预初始化),另一部分是驱动执行环境(DXE)。系统加电后最先被执行的阶段是SEC阶段,即安全性阶段,是CPU被Reset后,从在实模式下的线性地址0xffff0处执行的第一条指令开始,直到将控制权交给PEI阶段所执行的代码。PEI主要是用来检测启动模式、加载主存储器初始化模块、检测和加载驱动执行环境核心。DXE是设备初始化的主要环节,它提供了设备驱动和协议接口环境界面。DXE阶段后是BDS阶段,即启动设备选择阶段,该阶段尝试从可用的启动设备来启动操作系统,BDS阶段是将控制权交给操作系统的最后一个阶段。UEFI固件的文件系统格式为Firmware Volume,简称FV。
现有的模块化计算机固件的实现,需要把所有的模块全部存储在EEPROM或FLASH中,执行期间只能从EEPROM或FLASH中加载模块,这就要求EEPROM或FLASH的空间足够大。但是对于一些嵌入式平台或者其他EEPROM或FLASH空间较小的,又不能动态调整的平台,这种存储限制,是一个比较难以克服的问题。
发明内容
为了解决上述问题,本发明的目的在于提供一种占用内部存储空间低,有利于外围功能扩展,降低调试复杂度,提高开发效率的模块化计算机固件和其实现方法。
本发明提供的一种模块化计算机固件,包括:核心模块,用以构建模块化计算机固件运行机制的必要环境;外围模块,用以实现平台的外围设备驱动和平台增值服务功能;过渡模块,用以调度外围模块;核心模块与过渡模块存储于内部存储器,外围模块存储于外部存储器;核心模块运行完毕,执行过渡模块,过渡模块运行完毕后进入BDS阶段。
可选的,本发明提供的模块化计算机固件,其核心模块包括:DXE阶段之前所需的模块;构建模块化计算机固件基础执行环境的模块;涉及平台基础架构的模块;涉及外部存储器的设备的模块。
可选的,本发明提供的模块化计算机固件,其DXE阶段之前所需的模块包括:SEC阶段核心模块;SEC阶段到DXE阶段的过渡模块。
可选的,本发明提供的模块化计算机固件,其构建模块化计算机固件基础执行环境的模块包括:DEX阶段核心模块;PCD管理模块;运行时环境初始化模块;安全验证模块;运行时BIOS更新模块;固件文件系统卷服务模块;变量容错写模块;变量管理模块;单调计数模块;简单文本输出模块;磁盘输入输出模块;块设备分区管理模块;Unicode字符支持模块;FAT文件系统模块;人机接口数据库模块。
可选的,本发明提供的模块化计算机固件,其涉及平台架构的模块包括:CPU管理模块;定时器模块;中断管理模块;看门狗定时器模块;平台重启模块;节拍器模块;时钟管理模块;南桥初始化模块;PCI主桥驱动模块;PCI总线驱动模块。
可选的,本发明提供的模块化计算机固件,其涉及外部存储器的设备的模块包括:OHC驱动模块,USB总线驱动模块,USB大容量存储设备驱动模块;和/或者IDE总线驱动模块,IDE控制器驱动模块。
可选的,本发明提供的模块化计算机固件,其外围模块包括:涉及BDS的模块;X86指令模拟器模块;OS内核加载模块;显卡驱动模块;USB键盘驱动模块;涉及Setup的模块;图形终端模块;Logo显示模块;EFI Shell模块。
可选的,本发明提供的模块化计算机固件,其过渡模块包括:读取模块,用以读取外部存储器中的外围模块到缓存;控制模块,用以控制缓存中的外围模块的调度过程;驱动连接模块,用以在控制模块执行完毕后,连接驱动到各个设备;BDS启动模块,用以在驱动连接模块执行完毕后,启动BDS阶段程序。
可选的,本发明提供的模块化计算机固件,其读取模块包括:SFS接口模块,用以通过SFS接口打开外围模块文件;缓存模块,用以将打开的外围模块文件读入缓存。
可选的,本发明提供的模块化计算机固件,其控制模块包括:扫描模块,用以扫描外围模块文件中的外围模块信息;加载模块,用以在扫描模块执行完毕后加载外围模块;判断模块,用以判断加载后的外围模块是否属于驱动模块或者涉及BDS的模块;记录模块,用以依据判断模块的判断结果记录不属于驱动模块,或者属于涉及BDS的模块的外围模块的加载信息;执行模块,用以依据判断模块的判断结果执行属于驱动模块但不属于涉及BDS的模块的外围模块。
可选的,本发明提供的模块化计算机固件,其内部存储器为EEPROM或FLASH。
可选的,本发明提供的模块化计算机固件,其外部存储器为U盘或硬盘。
可选的,本发明提供的模块化计算机固件,其核心模块、过渡模块、外围模块在存储器中的存储格式为FV。
本发明还提供了一种实现计算机固件的方法,包括以下步骤:
步骤A:选择计算机固件运行机制必须的模块作为核心模块;
步骤B:将除核心模块外的模块作为外围模块;
步骤C:制作包含调度外围模块方法的过渡模块;
步骤D:编译计算机固件模块,将核心模块与调度模块组织在一起生成内部模块文件,外围模块单独生成外围模块文件;
步骤E:将内部模块文件烧录或者复制至内部存储器,将外围模块文件复制至外部存储器。
可选的,本发明提供的实现计算机固件的方法,其步骤A包括以下步骤:
步骤A1:选择DXE阶段之前的模块归入核心模块;
步骤A2:选择构建模块化固件基础执行环境的模块归入核心模块;
步骤A3:选择与平台的架构相关的模块归入核心模块;
步骤A4:选择同存储外围模块文件的设备相关的驱动模块归入核心模块。
可选的,本发明提供的实现计算机固件的方法,其调度外围模块方法包括以下步骤:
步骤C1:从外部设备读取外围模块的文件;
步骤C2:控制调度外围模块文件中的外围模块;
步骤C3:连接驱动到各个设备;
步骤C4:进入BDS阶段。
可选的,本发明提供的实现计算机固件的方法,其步骤C1包括以下步骤:
步骤C1a:查找SFS接口;
步骤C1b:确认SFS接口的设备支持BlockIo;
步骤C1c:打开SFS接口;
步骤C1d:通过SFS接口打开外围模块的文件;
步骤C1e:读取外围模块文件到缓存。
可选的,本发明提供的实现计算机固件的方法,其步骤C2包括以下步骤:
步骤C2a:扫描外围模块;
步骤C2b:加载未加载过的外围模块,加载失败则结束;
步骤C2c:判断外围模块是否是驱动模块,判断结果为否则记录外围模块加载信息并跳转至步骤C2b;
步骤C2d:判断外围模块是否是涉及BDS的模块,判断结果为是则记录外围模块加载信息并跳转至步骤C2b;
步骤C2e:运行外围模块;
步骤C2f:判断是否还有未加载过的外围模块,判断结果为是则跳转至步骤C2b。
根据本发明,对模块化计算机固件的各个模块进行核心模块、外围模块划分,分别存储至内部存储器和外部存储器,并采用过渡模块进行外围模块的调度,保证了模块化计算机固件核心机制的工作流程的正常执行,节省了计算机系统的内部存储空间,降低了硬件平台设计的成本,并可以扩展实现更多的外围模块,而不必担心空间不足,同时提高了开发效率,在大部分情况下,针对存储在外部存储器中的模块的调试,不需要重新烧写内部存储器,降低了调试复杂程度,节省了时间。
附图说明
图1是模块化计算机固件结构图。
图2是模块化计算机固件工作流程图。
图3是过渡模块结构图。
图4是过渡模块工作流程图。
图5是读取模块结构图。
图6是读取模块工作流程图。
图7是控制模块结构图。
图8是控制模块工作流程图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。
图1是模块化计算机固件结构图。如图1所示,本发明提供的模块化计算机固件包括核心模块,其中包含的模块是用以构建模块化计算机固件运行机制的必要环境;外围模块,其中包含的模块是用以实现平台的外围设备驱动和平台增值服务功能;过渡模块,用以调度外围模块,使外围模块能够正确加载运行。核心模块和过渡模块存储于内部存储器中,可以是Flash或者EEPRROM,外围模块存储于外部存储器中,可以是U盘或者硬盘。上述模块的存储格式可以是FV格式。
要实现上述计算机固件,首先要选择所述计算机固件运行机制必须的模块作为核心模块,其次将除所述核心模块外的模块作为外围模块,接着需要制作包含调度所述外围模块方法的过渡模块,然后对计算机固件模块进行编译,将核心模块与过渡模块组织在一起生成内部模块文件,将外围模块单独生成外围模块文件,最后将内部模块文件烧录至内部存储器,将外围模块文件复制至外部存储器。
在本实施例中,模块化计算级固件的核心模块构成如下表:
表1:模块化计算机固件核心模块列表
上表选择了USB接口的设备作为存储外围模块的设备,因此核心模块包含了OHC驱动模块,USB总线驱动模块,USB大容量存储设备驱动模块,当使用IDE接口的设备作为存储外围模块的设备时,可以将上述USB相关模块替换为IDE总线驱动模块、IDE控制器驱动模块。
核心模块的选择依据可以为:
1)DXE阶段之前所需的模块,例如:SEC阶段核心模块、SEC阶段到DXE阶段的过渡模块。
2)构建模块化计算机固件基础执行环境的模块,例如:DEX阶段核心模块、PCD管理模块、运行时环境初始化模块、安全验证模块、运行时BIOS更新模块、固件文件系统卷服务模块、变量容错写模块、变量管理模块、单调记述模块、简单文本输出模块、磁盘输入输出模块、块设备分区管理模块、Unicode字符支持模块、FAT文件系统模块、人机接口数据库模块。
3)涉及平台基础架构的模块,例如:CPU管理模块、定时器模块、中断管理模块、看门狗定时器模块、平台重启模块、节拍器模块、时钟管理模块、南桥初始化模块、PCI主桥驱动模块、PCI总线驱动模块。
4)涉及外部存储器的设备的模块,例如:在使用USB的外部设备时,可以包括OHC驱动模块,USB总线驱动模块,USB大容量存储设备驱动模块;在使用IDE的设备时,可以包括IDE总线驱动模块,IDE控制器驱动模块。
本实施例中,将其它不属于核心模块的模块归入外围模块,其构成如下表所示:
表2:模块化计算机固件外围模块列表
同样,其中的IDE控制器驱动模块、IDE总线驱动模块在选择IDE设备作为外围模块存储的设备时,可以替换为OHC驱动模块,USB总线驱动模块,USB大容量存储设备驱动模块。
外围模块的选择可以根据实际情况的需要进行选择和扩展。
图2是模块化计算机固件的工作流程图。在计算机上电起动后,按照常规的执行顺序,执行核心模块中的模块,构建出模块化计算机固件运行机制的必要环境,核心模块执行完毕后,接着执行过渡模块,通过过渡模块来调度、执行外围模块,实现平台的外围设备驱动和平台增值服务功能,过渡模块运行完毕后,则使计算机进入BDS阶段。
图3是过渡模块结构图。如图3所示,过渡模块包括读取模块、控制模块、驱动连接模块、BDS启动模块。其执行顺序为:1)读取模块2)控制模块3)驱动连接模块4)BDS启动模块。
图4是过渡模块工作流程图。其工作流程如下:由读取模块从外部设备读取外围模块的文件,由控制模块控制调度外围模块文件中的外围模块,再由驱动连接模块将驱动连接到各个设备,最后由BDS启动模块使计算机进入BDS阶段。
图5是读取模块结构图。读取模块包括SFS接口模块、缓存模块。SFS接口模块负责使用SFS接口打开外围模块文件,缓存模块负责将打开的外围模块文件加载入计算机系统的缓存,例如CPU的Cache。
图6是读取模块工作流程图。如图6所示,读取模块工作流程具体如下:SFS接口模块启动,查找SFS接口,查找不成功则返回失败,查找成功则确认该SFS接口的设备来支持BlockIo,如果该操作不成功则查找下一个SFS接口,如果该操作成功则打开该SFS接口,如果打开该SFS接口不成功则查找下一个SFS接口,如果打开该SFS接口成功,则通过该SFS接口打开外围模块文件,如果打开文件失败则查找下一个SFS接口,如果打开文件成功则启动缓存模块,读取打开的外围模块文件到缓则,并返回成功。
图7是控制模块结构图。如图所示,控制模块包括扫描模块、加载模块、记录模块、执行模块。扫描模块,用以扫描外围模块文件中的外围模块信息。加载模块,用以在扫描模块执行完毕后加载外围模块。判断模块,用以判断加载后的外围模块是否属于驱动模块或者涉及BDS的模块。记录模块,用以依据判断模块的判断结果记录不属于驱动模块,或者属于涉及BDS的模块的外围模块的加载信息。执行模块,用以依据判断模块的判断结果执行属于驱动模块但不属于涉及BDS的模块的外围模块。
图8是控制模块工作流程图。如图8所示,控制模块工作流程如下:启动扫描模块,扫描在缓存中的外围模块文件中所有的外围模块,获取外围模块信息;然后启动加载模块,加载外围模块,如果加载失败,则结束该工作流程,如果加载成功,则启动判断模块;判断模块判断该加载的外围模块是否属于驱动模块,如果不属于驱动模块,则启动记录模块,记录该外围模块的加载信息,并尝试加载下一个外围模块,如果属于驱动模块,则再次判断该外围模块是否属于涉及BDS的模块,如果属于涉及BDS的模块,则标记“成功找到涉及BDS的模块”,然后启动记录模块,记录该外围模块的加载信息,并尝试加载下一个外围模块,如果该外围模块不属于涉及BDS的模块,则启动执行模块,执行该外围模块,执行完毕后尝试加载下一个外围模块。
在不偏离本发明的精神和范围的情况下还可以构成许多有很大差别的实施例。应当理解,除了如所附的权利要求所限定的,本发明不限于在说明书中所述的具体实施例。