基于通用可扩展固件接口固件系统的胶囊式定制更新方法

文档序号:6400409阅读:299来源:国知局
专利名称:基于通用可扩展固件接口固件系统的胶囊式定制更新方法
技术领域
本发明属于计算机软件工程技术的软件更新技术领域,具体指的是基于通用可扩展固件接口固件系统的胶囊式定制更新方法。
背景技术
随着云计算等基于互联网的相关服务应用深入,证券、金融、电信等领域中客户端固件定制成为新的应用热点。诸如网络设备和自助式信息服务终端等嵌入式产品,需要使设备具有独特功能而不是像通用计算机那样来工作。因此系统开发商正日益寻求通过增加更多的特性,以使产品具有差异化并获得竞争优势,而固件系统是增强这种特性的理想地方。如用户界面、快速引导以及增加专用功能等。但这些行业的特殊性随之带来的问题是固件更新更为频繁,然而目前的固件更新技术针对整个基本输入输出系统(BIOS)进行刷新。而实际应用过程中,只需要对BIOS中某一部分驱动、应用模块进行更新或添加就可以满足要求,传统的固件更新方式在这种情况下显得效率低下。目前的更新机制需要CPU支持SMM (System Management Mode)系统管理模式。进入SMM模式是由中断信号SMI引起,SMI由处理器SMI#管脚信号有效或者收到高级可编程控制器APIC总线的消息。它是不可屏蔽外部中断并且独立于其它中断和异常处理。当处理器检查到SMI时,等待所有指令执行和访存完成后将当前处理器上下文存入SMRAM中然后切入SMM模式执行SMI处理程序。采用这种技术的刷新方法完全依赖于BIOS中SMI驱动的支持,因此SMI驱动程序的可靠性影响固件刷新的成功率。本发明涉及的现有技术特征介绍:
UEF1:用来定义操作系统与系统固件之间的软件界面,负责加电自检、连接操作系统以及提供连接操作系统与硬件的接口。UEFI架构具有C语言的编程、模块化的设计、图形化界面、文件系统的支持等优势。UEFI技术融入了嵌入式操作系统的诸多特点,如UEFI有自己的设备驱动开发模型(EFI Driver Model),一方面降低了硬件厂商开发设备驱动的负担,另一方面,为不同的硬件设备提供了可扩展的接口。此外,UEFI有自己外壳(UEFI Shell),开发者可以开发出各式各样的应用程序。UEFI规范把操作系统启动之前划分为:安全保护阶段(SEC)、环境初始化阶段(PEI)、驱动执行环境阶段(DXE)和引导设备选择阶段(BDS)四个阶段,详细描述了系统从加电、处理器初始化、硬件初始化、判断启动路径、系统策略设定、用户配置界面,到进入操作系统的详细过程。Capsule:为了解决不同操作系统与固件系统进行数据传输时接口不统一的问题,UEFI定义了一种可变长度的数据结构。通过它允许在操作系统中把数据传递给UEFI固件,实现如修改BIOS参数等功能。UEFI标准把此类可变长度的数据结构称为Capsule。UEFI固件文件系统(Firmware File System) =UEFI编译后的固件二进制文件称为FD(Firmware Device)文件,它由一系列固件卷FV(Firmware Volume)组成。FV主要有两种类型:系统FV,其目的主要存放固件代码,如硬件驱动、应用程序;非易失性存储FV,主要用于存放系统变量、配置文件、日志等。固件文件系统的出现使得可以在有限的固件存储空间内能更有效地存储模块化驱动文件。EDK I1:是最新BIOS开发平台框架。Flash:保存UEFI固件文件系统的存储器。传统固件更新技术存在着硬件平台、刷新工具在不同平台之间无法统一、不能对指定固件驱动、固件应用程序进行定制更新;传统刷新机制严重依赖于BIOS中系统管理中断SMI (System Management Interrupt)驱动的支持,因此SMI驱动程序的可靠性影响固件刷新的成功率。

发明内容
本发明所要解决的技术问题在于克服现有技术的不足,提出基于通用可扩展固件接口固件系统的胶囊式定制更新方法;所述方法利用UEFI提供的Capsule规范,在固件层对固件卷FV模块进行识别,将获取的数据写入固件文件系统目标地址的方法,而不需要对整个Flash进行更新。该技术可解决传统固件对硬件、操作系统依赖问题,实现指定功能模块更新,实用性更强。为了解决上述技术问题,本发明所采用的技术方案是:
基于通用可扩展固件接口固件系统的胶囊式定制更新方法,所述胶囊Capsule式定制更新方法分为两部分:操作系统下更新程序、UEFI固件系统中更新程序;所述方法包括如下步骤:
步骤A,利用可扩展固件接口开发框架EDK II编译规范,对需要更新的固件卷FV模块进行编译,把固件卷FV封装成胶囊Capsule ;
步骤B,操作系统下更新程序通过胶囊Capsule头结构体找到Capsule中固件卷FV的位置,根据系统当前空闲内存状况判断是否需要对Capsule进行分块,如果需要分块则分成更小的数据单元胶囊SubCapsule,并为每个单元胶囊SubCapsule分配内存空间;
步骤C,操作系统下更新程序设置计算机进入S3睡眠状态,通过实时时钟设置唤醒,进AUEFI固件系统,利用计算机睡眠状态中内存数据不丢失的特点,UEFI固件系统访问内存中的单元胶囊SubCapsule ;
步骤D,UEFI固件系统在环境初始化PEI阶段识别并合并单元胶囊SubCapsule,得到完整的胶囊Capsule,把合并后的Capsule在内存中的位置地址和大小等相关信息写入交接块 HOB (Hand-off Block)链表;
步骤E,UEFI固件系统在驱动执行环境DXE阶段,利用交接块HOB链表解析Capsule,提取出保存在其中的FV模块,通过FV的校验和来判断FV是否合法,并读取其中的驱动或应用程序;
步骤F,调用UEFI中驱动执行环境DXE阶段的驱动分配加载Dispatch服务,判断驱动之间的依赖关系,依照正确的顺序发现和执行UEFI固件更新驱动;
步骤G,UEFI固件更新驱动读取固件镜像内容位置图Flash map,得到待更新的固件卷FV在固件二进制文件FD中位置信息,最后UEFI固件更新驱动把内存中待更新的固件卷FV模块写入固件二进制文件FD中。所述步骤A中,所述可扩展固件接口开发框架EDK II编译规范,通过该规范编译后的固件二进制文件为FD文件,所述FD文件包含固件卷FV,所述FV是存储代码和数据的基本单元;每个FV在固件二进制文件中的位置由固件镜像内容位置图Flash Map进行描述。所述步骤C中,所述交接块HOB链表是一组数据块,该数据块用于将数据从初始化准备层PEI阶段传递到驱动执行环境DXE阶段。本发明的有益效果是:本发明提出了基于通用可扩展固件接口固件系统的胶囊式定制更新方法,所述方法基于通用可扩展固件接口 UEFI固件系统的胶囊Capsule机制,摆脱了目前主流固件更新技术依赖系统管理中断SMI驱动,通过对Capsule进行解析,得到待更新的固件卷FV模块,并对FV模块进行识别,将获取的数据写入固件文件系统目标地址,从而实现对选定FV进行更新,摆脱了以往需要对整个BIOS更新的方法。Capsule机制解决了更新工具在不同硬件平台、操作系统上无法统一的问题。该固件更新方法,更具灵活性、应用价值高。可应用于固件远程刷新、固件自动恢复等方面。


图1是本发明所述更新流程图。图2是本发明所述更新框架图。
具体实施例方式下面结合附图,对本发明提出的基于通用可扩展固件接口固件系统的胶囊式定制更新方法进行详细说明:
本发明基于通用可扩展固件接口固件系统的胶囊式定制更新方法,图1为所述方法的更新流程图,通过EDK II编译规范,对需要更新的FV模块进行编译,把FV封装成Capsule。在UEFI固件系统启动过程中将Capsule解析,并得到FV在Flash中的起始地址和大小,从而达到对选定FV进行更新的设计要求。具体步骤如下:
步骤(I):根据EDK II编译规范,对需要更新的FV模块进行编译,把FV封装成Capsule0步骤(2):操作系统下更新程序通过Capsule头结构体成员找到Capsule中固件卷FV的位置,根据系统当前空闲内存状况判断是否对需要对Capsule进行分块,如果需要则分成更小的数据单元SubCapsule,并为每个数据单元SubCapsule分配内存空间。步骤(3):设置计算机进入S3睡眠状态,利用睡眠状态中内存数据不丢失的特点,唤醒后PC进入UEFI固件系统。步骤(4):利用睡眠状态中内存数据不丢失的特点,唤醒后PC进入UEFI固件系统,并在在随后的PEI阶段中合并SubCapsule块,使其恢复成为一个完整的Capsule,把合并后的Capsule在内存中的位置地址和大小写入交接块H0B(Hand_off Block)链表。步骤(5): UEFI固件系统进入到DXE阶段。通过从HOB链表中得到的Capsule在内存中的地址、大小等参数去处理Capsule,把保存在其中的FV从中分离出来。调用UEFI的功能函数对FV进一步解析,通过校验FV的效验和CheckSum判断FV是否合法,并读取保存在其中的驱动、应用程序。步骤(6):调用UEFI中DXE服务Dispatch,将该驱动添加到双向链表中,并通过判断驱动之间的依赖关系,把满足运行要求的UEFI固件更新驱动添加到UEFI系统的驱动链表中,通过遍历链表计算出驱动的入口地址并运行。步骤(7) =UEFI固件更新驱动读取固件镜像内容位置图Flash map,得到待更新的FV在Flash中位置等相关信息,并调用FLASH芯片支持协议去尝试读取Flash的DeviceID,获得相应的Flash读写驱动,最后调用UEFI固件更新驱动把内存中待更新的FV模块写A Flash。基于Capsule规范的数据传输拥有如下优点:对不同操作系统和固件系统之间传输方式进行统一;数据读取在固件系统中完成,防止操作系统下未经授权的操作访问,提高安全性;CapSUle包中的数据中不限于系统参数等变量信息,也可以是UEFI固件系统中的执行程序,使其与其他传输方式相比更为灵活。图2给出了本更新方法从操作系统到UEFI固件系统的过程示意图,如图所示:操作系统下更新工具对Capsule进行分块,为每个单元胶囊SubCapsule分配内存;操作系统下更新程序设置计算机进入S3睡眠状态,通过实时时钟唤醒,计算机进入UEFI固件系统;在UEFI固件系统的PEI阶段识别并合并单元胶囊SubCapsule,得到完整的胶囊Capsule ;UEFI固件系统进入DXE阶段,解析Capsule提取出保存在其中的固件卷FV模块,并读取保存在固件卷中的驱动、应用程序;加载并运行读取到的UEFI固件更新驱动,把内存中待更新的固件卷FV模块写入固件二进制文件FD。本发明能够有效地对指定FV模块进行更新,利用Capsule机制解决了更新工具在不同硬件平台、操作系统上无法统一的问题。该固件更新方法,更具灵活性、应用价值高。可应用于固件远程刷新、固件自动恢复等方面。
权利要求
1.基于通用可扩展固件接口固件系统的胶囊式定制更新方法,其特征在于,本胶囊式定制更新方法包括两部分:操作系统下更新程序、UEFI固件系统中更新程序;所述方法包括如下步骤: 步骤A,利用可扩展固件接口开发框架EDK II编译规范,对需要更新的固件卷FV模块进行编译,把固件卷FV封装成胶囊Capsule ; 步骤B,操作系统下更新程序通过胶囊Capsule头结构体找到Capsule中固件卷FV的位置,根据系统当前空闲内存状况判断是否需要对Capsule进行分块,如果需要分块则分成更小的数据单元胶囊SubCapsule,并为每个单元胶囊SubCapsule分配内存空间; 步骤C,操作系统下更新程序设置计算机进入S3睡眠状态,通过实时时钟设置唤醒,进入UEFI固件系统,UEFI固件系统访问内存中的单元胶囊SubCapsule ; 步骤D,UEFI固件系统进入环境初始化PEI阶段,识别并合并单元胶囊SubCapsule,得到完整的胶囊Capsule,把合并后的Capsule在内存中的位置地址和大小写入交接块HOB链表; 步骤E,UEFI固件系统在驱动执行环境DXE阶段,利用交接块HOB链表,解析Capsule,提取出保存在其中的FV模块,通过FV的校验和来判断FV是否合法,并读取其中的驱动或应用程序; 步骤F,调用UEFI中驱动执行环境DXE阶段的驱动分配加载Dispatch服务,判断驱动之间的依赖关系,依照正确的顺序发现和执行UEFI固件更新驱动; 步骤G,UEFI固件更新驱动读取固件镜像内容位置图Flash map,得到待更新的固件卷FV在固件二进制文件FD中的位置信息,把内存中待更新的固件卷FV模块写入固件二进制文件FD中。
2.根据权利要求1所述的基于通用可扩展固件接口固件系统的胶囊式定制更新方法,其特征在于,步骤A中,所述可扩展固件接口开发框架EDK II编译规范,通过该规范编译后的固件二进制文件为FD文件,所述FD文件包含固件卷FV,所述FV是存储代码和数据的基本单元;每个FV在固件二进制文件中的位置由固件镜像内容位置图Flash Map描述。
3.根据权利要求1所述的基于通用可扩展固件接口固件系统的胶囊式定制更新方法,其特征在于,步骤C中,所述交接块HOB链表是一组数据块,该数据块用于将数据从初始化准备层PEI阶段传递到驱动执行环境DXE阶段。
全文摘要
本发明提出了基于通用可扩展固件接口固件系统的胶囊式定制更新方法,所述方法基于通用可扩展固件接口UEFI固件系统的胶囊Capsule机制,摆脱了目前主流固件更新技术依赖系统管理中断SMI驱动,通过对Capsule进行解析,得到待更新的固件卷FV模块,并对FV模块进行识别,将获取的数据写入固件文件系统目标地址,从而实现对选定FV进行更新,摆脱了以往需要对整个BIOS更新的方法。Capsule机制解决了更新工具在不同硬件平台、操作系统上无法统一的问题。该固件更新方法,更具灵活性、应用价值高。可应用于固件远程刷新、固件自动恢复等方面。
文档编号G06F9/445GK103207797SQ201310083959
公开日2013年7月17日 申请日期2013年3月15日 优先权日2013年3月15日
发明者杜振龙, 沙光侠, 李晓丽, 吴彦君 申请人:南京工业大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1