计算机UEFI固件更新方法与流程

文档序号:11949670阅读:7533来源:国知局
计算机UEFI固件更新方法与流程

本发明属于计算机软件系统领域,具体涉及一种UEFI固件更新方法。



背景技术:

统一可扩展固件接口(UEFI,Unified Extensible Firmware Interface)是Intel提出的用来取代传统BIOS的新一代固件系统。与传统BIOS相比,UEFI固件具体很多优势,特别是便于第三方的开发,使得UEFI固件发展迅速。一般更新UEFI固件,需要将整个固件ROM一起更新,更新时间长。而且系统环境不同,更新程序也不同,增加了第三方开发者的工作量。



技术实现要素:

发明目的:针对现有技术中存在的问题,本发明公开了一种计算机UEFI固件更新方法,该方法可以选择固件的更新区域,跳过不需要更新的区域,由此避免了对整个固件ROM的更新,减少了更新时间。

技术方案:本发明公开了一种计算机UEFI固件更新方法,包括如下步骤:

(1)获取当前固件内容结构分布信息;

(2)比较当前固件版本和目标固件版本信息;

(3)备份现有固件;

(4)根据步骤(1)获取的固件内容结构分布信息,选择需要更新的区域执行UEFI固件更新;

(5)确认是否更新成功。

上述计算机UEFI固件更新方法,由系统应用和UEFI固件执行,其中系统应用调度计算机固件更新的执行,具体地,步骤(1)包括如下步骤:

(11)系统应用向UEFI固件发送获取固件内容结构分布信息命令;

(12)UEFI固件获取当前固件内容结构分布信息,并将结果反馈给系统应用;

步骤(2)包括如下步骤:

(21)UEFI固件读取现有固件的版本信息;

(22)系统应用将目标固件文件版本内容放置在内存中,并给UEFI固件发送存放目标固件文件版本的地址和版本控制命令;

(23)UEFI固件读取目标固件的版本信息,并与现有固件的版本信息进行比较,如果目标固件的版本低于现有固件的版本,或者版本ID错误,则退出固件更新;

步骤(3)包括如下步骤:

(31)系统应用发送固件备份命令给UEFI固件;

(32)UEFI固件读取当前固件内容并放入一块内存区域;

(33)UEFI固件将步骤(32)中所述的内存区域地址回传给系统应用;

(34)系统应用创建文件,读取步骤(32)中所述的内存区域,将当前固件备份;

步骤(4)包括如下步骤:

(41)通过系统应用选择需要更新的固件区域和目标固件文件,并给UEFI固件发送固件更新命令、需要更新的固件区域地址和目标固件文件内容地址;关闭SMI中断的发送,禁用鼠标键盘和电源按键;

(42)将目标固件文件中对应区域的内容更新到此固件区域;

(43)更新完成,开启SMI中断的发送、键盘鼠标和电源按键;

步骤(5)包括如下步骤:

(51)系统应用给UEFI固件发送更新验证命令;

(52)UEFI比较更新后的固件区域内容与目标固件文件内容是否一致,内容一致则更新成功,重启计算机;内容不一致,则更新失败,将步骤(3)中备份的固件文件进行恢复。

优选地,步骤(42)为:UEFI固件比较步骤(41)选择的需要更新的固件区域与目标固件文件对应区域的内容是否一致,如一致则跳过更新此固件区域;如不一致,禁用鼠标键盘和电源按键,将目标固件文件中对应区域的内容更新到此固件区域。这样可以跳过内容不变区域的更新,进一步缩短了更新的时间。

另一种优选,步骤(12)中,系统应用可以将获取的固件内容结构分布信息结果输出到屏幕上,便于用户查看和选择需要更新的固件区域。

上述步骤中UEFI固件内容结构包括主代码段,启动恢复代码段,数据段和自定义段。

系统应用向UEFI固件发送命令可以采用多种方式,本发明采用发送SMI中断信号的方式向UEFI固件发送命令。

有益效果:与现有技术相比,本发明公开的计算机UEFI固件更新方法的优点在于:1、将固件内容划分为不同区域,可以按需要选择只更新个别区域,不需要更新整个固件ROM,针对只修改少量代码的情况,大大缩短了更新的时间;2、在对选择的区域进行更新时,先比较当前固件区域与目标固件文件中对应区域的内容是否一致,如内容一致则不更新此固件区域,即跳过了内容不变区域的更新,进一步缩短了固件更新所耗时间;3、固件内容结构分布信息可以显示在屏幕上,方便用户操作;4、系统应用采用发送SMI中断信号的方式向UEFI固件发送命令,UEFI固件处理中断响应函数即可,对于不同的系统,可以共用一个UEFI固件内的SMI中断服务,减少了开发人员的工作量。

附图说明

图1是本发明UEFI固件更新方法的流程图;

图2是UEFI固件内容结构。

具体实施方式

下面结合附图和具体实施方式,进一步阐明本发明。

图1是本发明UEFI固件更新方法的流程图,由调度计算机固件更新的系统应用和UEFI固件程序共同执行完成。以Intel平台,Windows下系统环境为例。整个方法的实现包括UEFI固件SMI服务接口设计和系统应用设计。

UEFI固件SMI服务接口设计主要步骤:

1.注册SMI中断号和中断函数。

在中断函数中,通过读取CPU EAX和EBX寄存器值,确定所需要的服务。定义获取固件内容结构分布信息命令、版本控制命令、更新验证命令、固件更新命令和固件备份命令的命令号。

2.获取CPU EAX寄存器高8位,为获取固件内容结构分布信息命令,进入获取固件内容结构分布子函数,获取当前固件内容结构分布,并将结果存放在内存,将内存地址通过CPU EBX返回给系统应用;UEFI固件内容结构分布如图2所示。

3.获取CPU EAX寄存器高8位,为版本控制命令进入版本控制子函数,其中CPU EBX为目标固件文件版本存放的地址,对比现有固件的版本和目标固件的版本来分别控制。

4.获取CPU EAX寄存器高8位,为固件备份命令进入固件备份子函数,UEFI固件读取当前固件内容并放入一块内存区域,这块内存区域的地址通过CPU EBX回传给系统应用模块,然后由系统应用模块创建文件备份。

5.获取CPU EAX寄存器高8位,为固件更新命令进入固件更新子函数,CPU EBX为需要更新的固件区域内容地址和目标固件对应区域文件内容的内存地址,UEFI固件比较两块内存中的内容是否一致,如不一致将目标文件更新至固件;如一致则跳过更新此固件区域来缩短更新耗时。

6.固件更新完成后返回系统级应用,由系统级应用再发送SMI,获取CPU EAX寄存器高8位为更新验证命令,进入更新验证子函数,用来检验是否更新成功无误。

以上为固件SMI中断程序所包含的内容。

系统级应用部分在Windows和Linux下的需要额外的驱动用来发送SMI中断,EFI SHELL需要用汇编代码编写SMI库即可。以系统环境为Windows为例,主要步骤为:

1.编写底层驱动,提供物理内存读写,IO操作和发送SMI中断功能;编写可执行程序,加载底层驱动;

2.系统应用向UEFI固件发送约定的SMI中断信号,并带入获取固件内容结构分布信息命令来获取当前固件内容结构分布信息;根据UEFI固件返回的存放当前固件内容结构分布信息的内存地址,访问该地址,并将固件内容结构分布信息结果显示在屏幕上;

3.获取目标固件文件版本,并将此版本内容存放在内存中,向UEFI固件发送约定的SMI中断信号,并带入版本控制命令和目标固件文件的版本存放地址;

4.根据UEFI固件返回的版本比较结果,确认是否继续更新;

5.如继续更新,向UEFI固件发送约定的SMI中断信号,并带入固件备份命令来获取当前固件内容的存放地址;访问该地址,创建文件备份当前固件文件;

6.根据用户的选择获取需要更新的固件区域内容地址,读取对应的目标固件文件并将内容放入内存;向UEFI固件发送约定的SMI中断信号,并带入固件更新命令和需要更新的固件区域内容地址、目标固件文件内容地址;关闭SMI中断的发送,禁用鼠标键盘和电源按键;

7.获取UEFI固件返回的更新结果,开启SMI中断的发送、键盘鼠标和电源按键;向UEFI固件发送约定的SMI中断信号,并带入更新验证命令来检验更新是否成功。

8.重启计算机验证。

Linux和EFI Shell和Windows方法一样,只是编码和编译方法不同,不再说明。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1