一种bios固件的划分、更新方法和系统的制作方法
【技术领域】
[0001]本发明涉及一种B1S (Basic Input Output System,基本输入输出系统)的更新方法,特别是涉及一种无硬件介入的B1S固件(Firmware)的划分、更新方法和系统。
【背景技术】
[0002]在UEFI (Unified Extensible Firmware Interface,通用扩展固件接口)B1S 架构中,B1S 固件通常被分为 Boot-Block(SEC+PEI)、FvMain(DXE+BDS)和NVRAM (Non-Vo I at i I e Random Access Memory,非易失性随机访问存储器)等区块,如图1所示。其中,SEC(Security Phase,UEFI B1S的启动阶段)用于计算机最早的启动阶段,此段时间很短,代码大约是上千行左右;PEI (Pre-EFI Initializat1n, UEFI B1S运行中的第二阶段)是预可扩展固件接口初始化阶段,该阶段CPU工作在保护模式32位状态,启动并初始化内存控制器,完成一些最基本的硬件芯片初始化工作;DXE(Driver Execut1nEnvironment,UEFI B1S运行中的第三阶段)是驱动执行环境阶段,该阶段CPU工作模式转为64位保护模式中的长模式,B1S装载所有的硬件芯片驱动程序,完成所有硬件的初始化动作;BDS(Boot Device Select1n,启动设备选择阶段):当UEFI B1S运行到此阶段时,意味着将根据B1S预先设定好的启动顺序,开始启动操作系统。
[0003]Boot-Block是B1S中一段特定的区块,包含有用于引导的最小指令集,正常的B1S升级操作不能消除这段信息。当B1S资料被破坏时,B1S会启动到恢复模式。恢复模式的原理是:提前将SEC及PEI放到B1S的Boot-Block部份,且这部份代码必须确保完好无误,没有受到任何破坏。在当B1S中除了 Boot-Block以外部分被破坏时,B1S会顺序执行在Boot-Block部分中的SEC和PEI,完成内存的初始化,然后从U盘或光盘等外部存储设备上寻找B1S的DXE,查找DXE成功后,即可执行上面的DXE及BDS (DXE及BDS实际上放在一个文件当中,找到DXE,也就找到了 BDS),并自动重新更新B1S固件中被破坏的部分。因而Boot-Block可以有效低恢复B1S资料因意外事件而造成的破坏。
[0004]由于PEI中包含有很多和系统硬件相关的初始化程序,在实际开发和使用中,依然存在不定期更新PEI的需要。在现有Intel平台上,B1S固件在进行更新时,为了保证Boot-Block区域的安全更新,引入了特定的硬件支持。此硬件支持可以保证即使此特殊区域在B1S固件更新过程中遇到意外事件(如断电)发生时依然能够保证数据完整性,系统在下一次的启动中依然具有自我恢复更新能力,从而避免因意外事件导致的B1S固件破坏而无法完成系统启动。
[0005]但是,由于此种方法依赖于特定的硬件设计,在非Intel平台或者一些特殊的Intel平台上无法实现,降低了 B1S固件更新时的安全性,因而具有一定的局限性。而为了在无特殊硬件支持的平台上实现B1S固件的安全更新,又不得不加入另一个B1S ROM做备份,这样势必加剧更新的成本。
【发明内容】
[0006]鉴于以上所述现有技术的缺点,本发明的目的在于提供一种B1S固件的划分、更新方法和系统,用于解决现有技术中在无硬件支持的情况下,且在非Intel平台或一些特殊的Intel平台上,B1S固件无法进行安全更新的问题。
[0007]为实现上述目的及其他相关目的,本发明提供一种B1S固件的划分方法,将B1S固件内的Boot-Block区块分解为独立的SEC区块和独立的PEI区块,并增加第一地址区块和第二地址区块;其中,所述第一地址区块用于保存所述PEI区块的程序入口地址,所述第二地址区块用于保存B1S固件在更新过程中使用的临时备份区块的程序入口地址。
[0008]可选地,根据权利要求书I所述的B1S固件划分方法,其特征在于:所述第一地址区块和所述第二地址区块的大小为B1S存储芯片的最小擦除扇区大小。
[0009]可选地,所述SEC区块根据所述第一地址区块内存放的数据跳转至所述PEI区块;所述SEC区块根据所述第二地址区块内存放的数据跳转至所述临时备份区块。
[0010]可选地,所述SEC区块还用于检测B1S固件是否进入恢复模式:检查所述第二地址区块内保存的数据是否完整有效:若有效,则根据所述第二地址区块内保存的数据跳转至所述临时备份区块,进入恢复模式;若无效,则读取所述第一地址区块内数据,并根据所述第一地址区块内保存的数据跳转至所述PEI区块,进入常规启动模式。
[0011]—种B1S固件的更新方法,所述B1S固件按照如权利要求1所述的划分方法进行划分,所述B1S固件的安全更新方法,包括:步骤S11,备份所述PEI区块的数据至所述临时备份区块内,并将所述临时备份区块的程序入口地址写入所述第二地址区块内;步骤S12,擦除所述PEI区块内的数据,写入待更新数据,并将更新后的所述PEI区块的程序入口地址写入所述第一地址区块内;步骤S13,检查所述第一地址区块内的数据是否完整有效:如果有效,则跳转至步骤S14 ;如果无效,那么此次更新结束;并且在B1S固件下次启动时,所述SEC区块直接根据所述第二地址区块内保存的数据跳转至所述临时备份区块,进入恢复模式;步骤S14,先擦除所述第二地址区块内的数据,再擦除所述临时备份区块内的数据;步骤S15,更新除所述SEC区块、所述第一地址区块、所述第二地址子区和所述PEI区块外的其他待更新的区块。
[0012]可选地,所述临时备份区块是在B1S固件进行更新前临时划分出来的,其位于B1S固件内除所述SEC区块、所述第一地址区块、所述第二地址区块和所述PEI区块外的其他区块内。
[0013]可选地,所述步骤S13中还包括:在检查到所述第一地址区块内保存的数据无效时,设置跳转次数,重新跳转至所述步骤S12进行所述PEI区块和第一地址区块的数据更新;并且当经过所述跳转次数的所述步骤S12的操作,所述第一地址区块内保存的数据仍然无效,则更新结束。
[0014]可选地,在所述临时备份区块的数据被擦除后,所述临时备份区块被取消,B1S固件内不再存在所述临时备份区块。
[0015]一种B1S固件的更新系统,所述B1S固件的安全更新系统包括划分模块、备份模块、地址写入模块和更新模块;其中,所述划分区块用于将所述B1S固件划分为SEC区块和独立的PEI区块,并增加第一地址区块和第二地址区块;所述备份模块用于将所述PEI区块内的数据备份至临时备份区块;所述地址写入模块用于将所述临时备份区块的程序入口地址写入所述第二地址区块,并将更新后的所述PEI区块的程序入口地址写入所述第一地址区块;所述更新模块用于更新所述B1S固件,包括更新所述PEI区块的数据。
[0016]可选地,所述B1S固件的更新系统还包括擦除模块;所述擦除模块用于擦除所述PEI区块内的数据,并在所述更新模块更新所述B1S固件成功时,擦除所述第二地址区块和所述临时备份区块内保存的数据,取消所述临时备份区块。
[0017]如上所述,本发明的一种B1S固件的划分、更新方法和系统,将B1S固件内的Boot-Block区块分解为独立的SEC区块和独立的PEI区块,并增加第一地址区块和第二地址区块,在此基础上,利用软件的设计方法,将原有PEI区块的数据在B1S固件除SEC区块、PEI区块、第一地址区块和第二地址区块之外的待更新的空闲区块内进行数据备份,并保存相应的备份数据的程序入口地址,以及更新数据的程序入口地址。这样,在PEI区块更新过程中,即使因意外事件(如断电)而导致PEI区块数据破坏时,在再次启动B1S固件后,SEC区块依然可以通过第二地址区块内的程序入口地址进入备份区域并启动恢复模式程序,以保证B1S固件更新遇到故障时的安全恢复。本发明的B1S固件的划分、更新方法和系统不依赖于特定的硬件支持;不再局限于现有的Intel平台,在一些存储设备、通信设备和服务器都可实现B1S固件的安全更新,适用范围更加广泛,实现更加简单和安全;相较于现有技术,本发明的B1S固件的划分、更新方法和系统在无特定硬件支持的平台上即可完成;且数据的备份区块为非专属区块,其复用了其他功能区块的存储空间,不再额外占用B1S固件的存储空间,并在PEI区块更新后,临时备份区块即被释放给其他功能区块使用,而新增加的第一地址区块和第二地址区块仅占用B1S固件存储芯片的最小擦除扇区大小(通常为几个KB)的空间,因此,本发明在几乎不增加B1S芯片大小的情况下即可实现B1S固件的安全更新,在实际生产中可有效地节约成本,具有一定的经济意义。
【附图说明】
[0018]图1显示为现有技术中Uefi B1S架构的结构示意图。
[0019]图2显示为本发明实施例公开的一种B1S固件的更新方法的流程示意图。
[0020