《用于在预存储器执行环境中链接固件模块的方法和系统的制作方法》由会员分享,可在线阅读,更多相关《用于在预存储器执行环境中链接固件模块的方法和系统的制作方法(9页珍藏版)》请在金锄头文库上搜索。
1、用于在预存储器执行环境中链接固件模块的方法和系统的制作方法专利名称:用于在预存储器执行环境中链接固件模块的方法和系统的制作方法技术领域:本发明一般地涉及计算机系统,更具体而言,涉及计算机系统的基本输入输出系统(BIOS)。背景技术: BIOS包括用于初始化计算机系统的其他组件的可执行程序和数据的集合。一旦打开(或者复位)计算机系统,计算机系统就执行来自诸如(单个或多个)只读存储器(ROM)芯片之类的非易失存储器或等价物的BIOS。在许多计算机系统中,BIOS加载全部或部分操作系统,所述操作系统通常存储在计算机系统的硬盘上。或者,可以从光盘(CD)ROM或软盘加载操作系统。被加载的操作系统随后可
2、以调用BIOS例程或组件。预存储器执行环境中的BIOS(这里也被称为固件)通常是为专用配置或系统设计(这里也称为平台)生成的紧致界(Tightly Bound)目标代码。换言之,不同的平台通常具有不同的BIOS。更具体而言,BIOS通常包括用于提供特定功能或服务的代码(这里也称为固件模块),这些功能或服务同样可以依赖于平台。例如,带PentiumIII处理器的平台与带PentiumIV处理器的平台相比,特定服务的固件模块就可能不同。因此,BIOS厂商通常将开发若干BIOS来支持各种平台,这不合需要地增加了多种BIOS的测试、维护和文档费用。另外,传统的开发过程要求软件开发者将他们的固件模块与主
3、固件可执行代码一起编译并链接。此外,该过程常常要求软件开发者为每个厂商的主固件可执行代码定制固件模块。这个不期望的过程要求开发者为每种固件环境中的正确操作来测试固件模块,这将增加开发的时间和费用。参考附图来描述本发明的非限制和非穷尽的实施例,附图的所有不同视图中除非明确说明,类似的标号都指示类似的组件。图1是图示根据本发明一个实施例的具有模块化BIOS的计算机系统的框图。图2是图示根据本发明一个实施例的模块化BIOS的图。图3是图示根据本发明一个实施例,在模块化BIOS的模块之间的通信链接的图。图4A和4B是图示根据本发明一个实施例的模块化BIOS的基本初始化操作的流程图。图5是图示根据本发明
4、一个实施例的用于跟踪固件模块的分配的数据结构的图。图6是图示根据本发明一个实施例的固件模块的组件的框图。图7A和7B是分别图示根据本发明一个实施例的导入表和导出表的图。图8是图示根据本发明一个实施例的用于链接BIOS中的固件模块的过程的流程图。图9是图示根据本发明一个实施例的模块调用操作的流程图。图10是图示根据本发明一个实施例的菊花链操作的流程图。图11是图示根据本发明一个实施例的过滤器模块的图。具体实施例方式图1根据本发明的一个实施例图示了计算机系统100。计算机系统100包括处理器103、非易失存储器105、主存储器107、设备109-1至109-N以及总线111。此外,计算机系统100
5、包括存储在非易失存储器105中的模块化BIOS120。处理器103可以是常规微处理器,例如但不限于Intel x86或Pentium系列微处理器、Motorola系列微处理器等等。可以以若干方式来实现非易失存储器105。例如,非易失存储器105可以使用包括但不限于以下设备的设备来实现可擦除可编程只读存储器(EPROM)设备、电可擦除可编程只读存储器(EEPROM)设备、闪存设备等等。主存储器107可以使用包括但不限于以下设备的设备来实现动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)等等。设备109-1至109-N是通常在计算机系统中使用的设备,例如但不限于显示器、监视器、键盘、
6、硬盘驱动器、CD ROM驱动器、网络接口卡(NIC)、声卡、打印机、扫描仪、点选设备(例如鼠标、轨迹球、触摸垫)等等。主存储器107、非易失存储器105、处理器103和设备109-1至109-N都耦合到总线111。应认识到计算机系统100是具有不同体系结构的许多可能的计算机系统中的一个示例。例如,结合Intel微处理器利用Microsoft Windows操作系统的计算机系统常常具有多个总线,其中一个可以被认为是外设总线。网络计算机也可以认为是可与本发明一起使用的计算机系统。此外,有时被称为个人数字助理(PDA)的手持式或掌上计算机也可以认为是可与本发明一起使用的计算机系统。典型的计算机系统一
7、般将至少包括处理器103、主存储器107、非易失存储器105和总线111。还将认识到在一个实施例中,计算机系统100由操作系统软件控制,所述操作系统软件包括作为其一部分的文件管理系统,例如盘操作系统。例如,本发明的一个实施例利用Microsoft Windows作为计算机系统100的操作系统。在另一个实施例中,其他操作系统包括但不限于AppleMacintosh操作系统、Microsoft Windows操作系统、Unix操作系统、Palm操作系统以及可根据本发明的教导使用的类似操作系统。一般而言,在计算机系统100中使用的特定操作系统将至少部分基于在计算机系统100中使用的具体体系结构、芯片
8、或芯片组。图2图示了根据本发明的一个实施例驻留于非易失存储器105(图1)中的BIOS120(图1)。在此实施例中,非易失存储器105被分成块201-204,每一个具有64K字节的大小。在此实施例中,块201是引导块。引导块201包括复位向量208、核心210和固件模块212-1至212-M。块202、203和204被用来在执行BIOS120的过程中提供某些非易失存储并存储BIOS120的其他组件。复位向量208是加电或复位之后处理器103(图1)所读取的第一个存储器单元。在一个实施例中,复位向量208使处理器103执行一般被称为POST(加电自测)的指令。在一个实施例中,操作流开始执行核心2
9、10。核心210用作固件模块212-1至212-M的调度器或分配器。核心210还包含用于服务的核心集合的指令。这些核心服务包括但不限于平台变量的定位、引导模式的管理、诸如拷贝和清零存储器之类的通用任务。每个固件模块212-1至212-M包含与用于一个或多个组件的服务相关联的指令,这些组件可以包括在计算机系统100中。根据本发明,每个固件模块都具有公共接口组件来与核心210接口。此外,固件模块可以包括公共接口来与另一个固件模块接口。如以下将进一步描述的,这些特征使得包括核心210和固件模块212-1至212-M的BIOS(即模块化BIOS)可以以这样一种方式与多个平台一起工作,所述方式在某种意义
10、上类似于操作系统和驱动器使得计算机系统可以与多个外设一起工作的方式。图3还图示了核心210和固件模块212-1至212-M之间以及固件模块自身之间的功能互连。在一个实施例中,每个固件模块212-1至212-M包括公共核心/模块接口(未示出)以与核心210接口;并且包括公共模块/模块接口(未示出)以与其他固件模块接口。例如,核心210可以使用公共核心/模块接口来如双向箭头301所示地与固件模块212-1接口,以及与固件模块212-2至212-M接口。此外,固件模块212-1可以使用公共模块/模块接口来如双向箭头303所示地与固件模块212-2接口。虽然未在图3中示出,但是其他固件模块212-3至
11、212-M也可配置有公共模块/模块接口来与另一个固件模块接口。后面结合图6将进一步描述这些组件。图4A图示了根据本发明一个实施例使用模块化BIOS120(图1)而执行的基本初始化过程。在此实施例中,模块化BIOS120在经过生成过程之后已被加载到非易失存储器105(图1)中,该生成过程用来编译并链接引导块201中的核心210和固件模块212-1至212-M(图2)。参考图1、2和4,模块化BIOS120如下来进行本实施例的这个过程。在框402中,计算机系统100被打开或复位。具体而言,当计算机100被打开时,处理器103开始执行BIOS120。在一个实施例中,用户可以操作开关来向计算机系统10
12、0提供电源或使其复位。在许多实施例中,用户还可以通过由在计算机系统100上运行的操作系统所提供的用户界面(例如通过菜单选择)来复位计算机系统100。在框406中,执行复位向量。在本实施例中,一旦加电(或复位)处理器103就开始执行复位向量208,其如前所述是BIOS120的第一指令。在一个实施例中,复位向量208通常提供了POST过程的第一指令。在一些实施例中,在复位期间不执行POST。然后在框410中,初始化固件模块。在一个实施例中,处理器103执行核心201。在此实施例中,核心210确定适合运行的固件模块212-1至212-M的必要配置。每个模块依次检查平台来确定安装BIOS120的平台是
13、否有其所初始化的硬件。下面结合图4B更详细地描述框410。在框414中,初始化存储器。在此实施例中,在处理器初始化固件模块212-1至212-M期间,处理器对一个或多个模块212-1至212-M的执行将初始化主存储器107。在框418中,接收并执行其余的BIOS120。例如,在框414中初始化主存储器之后,处理器103可以获取可能驻留于其他外部存储器设备(例如附加的EEPROM或闪存块引导组件(Flash block boot component)中的附加BIOS组件(及BIOS扩展)。BIOS120随后可以完成初始化或者允许操作系统完成初始化。图4B根据本发明的一个实施例更详细地图示了框41
14、0(图4A)。参考图1、3和4B,如下来进行本实施例的框410。在框424中,检查固件模块212-1至212-M以确定为了使计算机系统100正确工作而要求由核心210来分配固件模块212-1至212-M的顺序。在一个实施例中,核心210包括这样的指令,其检验固件模块212-1至212-M的资源列表(下面结合图6来描述)以确定需要这些固件模块中的哪些。在框428中,调度所需固件模块的执行。在一个实施例中,核心210调度所需固件模块的执行。例如,核心210可以基于在上面的框424中所确定的每个固件模块的要求,来调度固件模块的执行。在一个示例实施例中,核心210可以按以下顺序来调度固件模块中央处理器
15、单元(CPU)I/O(输入/输出)服务、PCI配置访问服务、ICH(I/O控制器中心)组件平台初始化服务、SMBus(系统管理总线)协议访问服务、MCH(存储器控制器中心)组件平台初始化服务等等,这些通常都在初始化过程早期需要。在框432中,分配(即由处理器103来执行)所需的固件模块。在一个实施例中,核心210可以使用处理器103的寄存器来存储位数组,该位数组指示要分配哪些固件模块。下面结合图5来进一步描述此位数组的一个示例实施例。图5图示了根据本发明的一个实施例用于跟踪固件模块分配的数据结构。在本实施例中,该数据结构是可以使用处理器103(图1)的单个64位寄存器来存储的位数组500,用于
16、最多BIOS120中六十四个固件模块。位数组500的每一位被映射到固件模块212-1至212-M中相应的一个。更具体而言,在图5的实施例中,位数组500的位512-1对应于固件模块212-1,如虚线514-1所示;位512-2对应于固件模块212-2,如虚线514-2所示;.;以及位512-M对应于固件模块212-M,如虚线514-M所示。在本实施例中,当位数组500的一位被设成1时,那么相应的固件模块就已被分配。图6图示了根据本发明的一个实施例的示例固件模块212的组件。换言之,固件模块212-1至212-M(图2)的一些实施例具有和固件模块212相同的组件。在本实施例中,固件模块212包括全局唯一标识符(GUID)601、资源列表603、导入表605、导出表607、服务609-1至609-L、服务接口611以及模块间接口613。在一些实施例中,固件模块212被组织为头部和可执行镜像。头部可以包括资源列表603、导