APP下载

基于UEFI的胶囊式固件定制更新研究

2014-06-07杜振龙沙光侠李晓丽沈钢纲

计算机工程 2014年10期
关键词:固件分块内存

杜振龙,沙光侠,李晓丽,沈钢纲

(南京工业大学电子与信息工程学院,南京210009)

基于UEFI的胶囊式固件定制更新研究

杜振龙,沙光侠,李晓丽,沈钢纲

(南京工业大学电子与信息工程学院,南京210009)

当前固件刷新技术不灵活、不能单独更新功能模块,且各硬件平台、操作系统的更新数据传输接口不统一。为解决上述问题,基于统一可扩展固件接口(UEFI)规范的EDKⅡ,提出一种胶囊(Capsule)式固件更新方法,将更新数据封装为Capsule,在固件层对Capsule进行识别、析取,把获取数据写入固件文件系统的更新目标地址,实现对固件系统内核函数、驱动模块、协议、应用程序等的更新、修复。该方法在操作系统加载前实现指定功能模块的定制更新和维护,不限制更新模块的容量,可解决传统固件更新方法过于依赖硬件、操作系统的问题,具有安全、高效、灵活、实用性强的特点。

胶囊式;更新;固件;统一可扩展固件接口;固件文件系统;定制

1 概述

固件基本输入输出系统(Basic Input and Output System,BIOS)保存于计算机系统的可编程Flash芯片,是计算机、嵌入式系统的重要底层系统软件[1]。固件的升级、更新能够修复计算机系统故障、扩展固件功能,是系统软件的适应性维护工作。随着互联网应用的深入,证劵、金融、电信等领域的客户端固件定制正成为新的应用热点,需要具有个性化鲜明的定制产品。随之而来的问题是固件的更新更为频繁,而目前的固件更新技术不能对指定模块进行更新,因此,亟需研究新的软件更新维护方式。

传统固件与不同操作系统的数据传输接口不统一,造成相同功能的固件系统需定制多个发行版本。为了解决该问题,统一可扩展固件接口(Unified Extensible Firmware Interface,UEFI)定义了胶囊(Capsule)规范,利用Capsule把数据传至UEFI固件,实现固件更新、BIOS参数修改等系统维护。

传统固件更新技术采用整体刷新方式,刷新工具过于依赖硬件,且不能对特定模块进行定制更新。本文分析Capsule规范,结合UEFI固件文件系统,提出了一种基于UEFI的固件Capsule式定制更新方法。

2 统一可扩展固件接口UEFI

传统固件系统采用汇编语言开发,工作在16位实模式状态,寻址空间仅1 024 Byte,已很难通过优化改良获得本质性的突破,成为了限制PC机发展的瓶颈[2]。为此,Intel等公司提出了通用可扩展固件接口UEFI架构,该架构具有支持C语言开发、模块化设计、图形化界面及文件系统等优势,在开发语言、运行状态及可用内存等方面比传统固件有了很大突破。按照模块化设计要求,UEFI定义了设备驱动模型,硬件厂商可以按照UEFI标准开发出硬件设备驱动,减少了厂商间的依赖[2]。UEFI规范把操作系统启动之前划分为:安全保护阶段SEC,环境初始化阶段PEI,驱动执行环境阶段DXE和引导设备选择阶段BDS这4个阶段,详细描述了系统从加电、处理器初始化、硬件初始化、启动路径判断、系统策略设定、用户配置界面,到进入操作系统的详细过程[3]。

UEFI程序分为内核、驱动和应用程序3类。UEFI内核提供包括内存管理、事件管理、任务优先级管理、句柄管理[4-5]等服务。驱动实现对硬件资源的访问与管理、支持新设备的驱动开发[6-7]及扩展。应用程序提供固件功能扩展、定制、增值等服务。

UEFI定义了固件文件系统和文件组成结构[6]。编译生成的二进制UEFI固件称为固件镜像文件,由不同文件类型的固件卷组成[8-10],包括系统固件卷和非易失性存储固件卷。系统固件卷主要用于存放固件代码,非易失性存储固件卷用于存放系统变量、配置文件、日志等。利用固件文件系统可在有限的Flash空间有效地存储、管理模块化驱动程序[11-12]。

3 传统固件更新技术

传统固件由MainBios和Bootblock 2个部分组成。Mainbios负责硬件初始化、服务程序建立、操作系统引导。Bootblock包含用于引导的最小指令集,正常的固件更新操作不清除Bootblock内容,因此,更新失败时可利用Bootblock进行恢复操作。传统固件更新采用刷新MainBios和整体固件刷新2种方式。当需要更新某一特定芯片的驱动程序、添加增值应用模块时,传统固件更新方法需要对整个Flash进行更新。

目前的更新机制需要CPU支持系统管理模式(System Management Mode,SMM)。进入SMM模式是由中断信号SMI触发引起,由处理器SMI管脚信号有效或者收到高级配置和电源管理接口(Advanced Configuration and Power Management Interface,ACPI)总线的修改请求。SMI中断是不可屏蔽外部中断,独立于其他中断和异常处理。处理器接收到SMI请求后,等待所有指令执行和访存完成后把当前处理器上下文存入SMRAM,切入SMM模式执行SMI处理程序。采用这种刷新技术,需要依赖BIOS的SMI驱动支持,因此,SMI驱动程序的可靠性影响固件刷新的成功率[4]。

4 基于Capsule的固件定制式更新

Capsule是UEFI定义用于操作系统与固件系统进行数据传输的一种规范。本节主要讨论基于Capsule规范实现固件定制更新的方法。

4.1 Capsule结构

Capsule由头结构和卷组成,如图1所示。

图1 Capsule结构

Capsule头结构体包含整个 Capsule的有关信息,其结构体的主要组成如下。

Capsule结构包括表示文件大小的CapsuleImage Size,指示Capsule在固件卷位置的OffsetToCapsule Body。固件更新文件较大时,升级时需要申请一段连续内存用以存放升级镜像文件。为了避免未能申请到所需内存导致升级失败的情况出现,在更新过程中可按需把Capsule分成更小的SubCapsule数据单元。每个SubCapsule和Capsule的结构相同,以SequenceNumber标识指示顺序。InstanceId标识分割后的 Capsule块,为方便升级过程按顺序组合Capsule块并写入Flash。

Capsule卷的组织结构和标准固件卷文件相同。Capsule卷中可存储固件文件、EFI程序、BIOS配置信息等数据。

UEFI规范中基于Capsule的数据传输机制,需要经过数据结构设计、数据封装和数据解析3个阶段。

(1)Capsule数据结构设计:定义用于操作系统与固件系统之间的数据传输接口。

(2)数据封装:把需要传输到固件系统的数据进行才Capsule包装,并按需分配内存。

(3)数据解析:固件系统在PEI,DXE,BDS阶段对Capsule包进行解析,提取其中的固件文件和数据。

4.2 固件定制式更新

基于UEFI的Capsule式固件定制更新方法在编译阶段把待更新的数据封装成Capsule,在固件系统启动过程解析Capsule,并把解析内容写入内存指定地址的Flash,从而使更新、升级数据传递至固件系统,实现对指定固件卷的更新。

采用Capsule的固件定制式更新方法主要包括数据传输和数据更新过程。数据传输阶段运行在操作系统环境或 UEFI Shell,把更新数据封装成Capsule并传输至固件系统。数据更新阶段解析更新的Capsule,为Capsule分配内存,把更新内容写入指定位置。

更新时先通过Capsule头结构找到Capsule的固件卷位置,根据系统当前内存的空闲情况判断是否需要对Capsule进行分块。在Capsule所需的连续空间内存未能满足时,则需要把Capsule划分为更小的SubCapsule数据单元,并为每个SubCapsule分配内存,修改 EFI_CAPSULE_HEADER结构体的SequenceNumber成员,使其记录下一个相邻的SubCapsule位置。当所需内存申请成功时,则不需要对Capsule进行再分块,直接把SequenceNumber值设为0。Capsule分块为SubCapsule的过程如图2所示。

图2 Capsule分块过程

分块过程需为每个SubCapsule创建包括数据起始地址、数据长度、校验和的描述信息链表。把第一个SubCapsule描述符的地址存储到CMOS中的变量参数表或 UEFI端口映射表的 LocationOf ThePointer指定的内存位置。升级、刷新过程在计算机的S3睡眠状态进行,更新完成后通过实时时钟(Real-time Clock,RTC)唤醒。

采用Capsule的固件定制式更新在数据更新阶段解析、提取Capsule中封装的数据,根据设定对固件系统进行定制更新。数据更新工作主要在PEI, DXE阶段进行。

PEI阶段用 PPI识别并恢复 Capsule。PPI是UEFI定义的用于PEI阶段模块(PEIM)之间传递函数和数据的接口。PEIM将需要提供给其他PEIM的数据和函数封装在PEI服务中,PEIM通过GUID找到所需模块,获得需要的数据。PPI的结构体原型定义如下:

PEI阶段利用PPI的CheckCapsuleUpdate函数查找CMOS中是否有 Capsule,有 Capsule时调用Coalesce函数将 SubCapsule按顺序合并,再通过CreateState函数把合并后的Capsule在内存中的位置和大小写入HOB链表,由HOB把数据从PEI阶段传递至DXE阶段。

DXE阶段从 HOB链表搜索 Capsule相关的HOB,调用服务ProcessFirmwareVolume从HOB链表中得到Capsule在内存中的地址、大小等参数,分离出固件卷,并为固件卷创建Protocol,方便对其进行读写操作。分离出的固件卷需根据校验和判断其有效性,只对有效的固件卷实施更新操作。

4.3 基于Capsule固件定制式的更新流程

如图3所示,固件更新流程在操作系统阶段根据系统当前的内存使用状况判断是否需要对Capsule进行分块,所需的连续内存不满足时把Capsule分块为SubCapsule,为每个SubCapsule分配内存空间。使计算机系统进入S3睡眠状态,开始对UEFI固件系统进行更新。

图3 UEFI更新流程

UEFI固 件 系 统 在 PEI阶段 识 别、合 并SubCapsule,形成完整的Capsule,把合并后的Capsule在内存中的地址和大小相关信息写入HOB链表。进入DXE阶段后,查找 HOB链表并定位至包含Capsule的HOB,从中解析Capsule,提取出保存在其中的固件卷,利用固件卷的校验和来判断其是否合法,读取合法有效的固件卷中的驱动或应用程序。调用DXE阶段的驱动分配加载服务Dispatch,判断驱动之间的依赖关系,根据正确的顺序查找和执行UEFI固件更新。

基于UEFI的Capsule固件定制式更新方法能够灵活地更新固件系统文件或模块,既能够根据需要更新固件卷模块,又可以更新固件卷模块的应用程序,方便了固件系统的更新、修改和移植。

5 功能测试

在Intel的Sandy Bridge测试平台测试了本文所提出的基于UEFI的Capsule固件定制式更新算法。测试环境为UEFI SHELL。测试包括更新整个UEFI固件和单一固件卷模块(FV_APPLY)。Flash Map描述了固件的静态结构组成,设定Flash Map可改变固件卷在Flash的位置。表1为Flash Map的部分内容。

Flash Map确定了固件卷模块在Flash中的起始地址和空间大小,如表1所示,固件文件包含5个固件卷模块,大小为3 MB,存储在容量为8 MB的Flash。基于UEFI的Capsule固件定制式更新把固件卷封装成Capsule,根据需要把Capsule分割成SubCapsule,PEI阶段将SubCapsule合并,DXE阶段通过对Capsule进行解析取得固件卷模块及其在内存中的地址。

表1 Flash Map的部分内容

图4为仿真器[6]跟踪的内存中待更新模块FV_ APPLY的内容,从 0xFFF0 0000位置至 0xFFF8 0000为更新内容。

图4 仿真器测试结果

经过测试,基于Capsule的固件定制更新方法可以实现整体、分块更新,更新所用时间和更新数据大小如表2所示。

表2 固件定制更新方法测试结果

6 结束语

基于UEFI的固件Capsule式定制更新方法统一了不同操作系统和固件系统之间的传输方式,降低了对操作系统的依赖。更新、升级的数据在固件系统进行读取,避免了操作系统中未经授权的操作、访问,安全性较高。Capsule内容既可作为系统参数、变量等信息,也可用作固件驱动及应用程序,更新、升级的内容更为广泛。本文提出了一种基于UEFI的固件Capsule式定制更新方法,与利用SMI中断技术的软件更新方法相比,该方法可靠、灵活,且运行在操作系统启动之前,无需受制于操作系统,可根据需要对固件模块进行定制式更新。该方法可用于固件远程刷新、固件自动恢复等应用。

[1] 李荣冰,刘建业,袁 朔,等.用串行方式实现微小型导航计算机应用软件的快速更新研究[J].小型微型计算机系统,2005,26(9):1657-1660.

[2] 黄海彬.基于EFI固件文件系统的平台安全策略研究与实现[D].上海:上海交通大学,2010.

[3] Unified EFI Inc.Unified Extensible Firmware Interface Specification Version 2.3[EB/OL].(2009-11-26). https://www.tianocore.org.

[4] 刘 佳,辛晓晨,沈钢纲,等.基于UEFI的Flash更新的开发研究[J].计算机工程与设计,2011,32(1): 114-117.

[5] 唐文彬,祝跃飞,陈嘉勇.统一可扩展固件接口攻击方法研究[J].计算机工程,2012,38(13):99-111.

[6] 崔 莹,王宝涛,沈钢纲.UEFI下基于USB的调试信息输出工具的设计与实现[J].计算机工程与设计, 2010,24(10):5227-5230.

[7] 崔 莹,辛晓晨,沈钢纲.基于UEFI的嵌入式驱动程序的开发研究[J].计算机工程与设计,2010,24(10): 2384-2387.

[8] Intel Corporation.Intel Platform Innovation Framework for EFI Architecture Specification,Version 0.9[Z]. 2003.

[9] Intel Corporation.Intel Platform Innovation Framework for EFI Firmware File System Specification,Version 0.9 [Z].2003.

[10] Intel Corporation.Intel Platform Innovation Framework for EFI Firmware Volume Specification,Version 0.9 [Z].2003.

[11] Du Zhenlong,Li Xiaoli,Shen Kangkang,et al.Ensemble of Trusted Firmware Services Based on TPM[J]. International Journal of Digital Content Technology and Its Applications,2011,5(3):175-184.

[12] 杜振龙,沙光侠,李晓丽,等.MIPS架构计算机平台的支持固件研究[J].兰州理工大学学报,2013,39(6): 94-99.

编辑 顾逸斐

Customization and Update Research on Capsule Type Firmware Based on UEFI

DU Zhen-long,SHA Guang-xia,LI Xiao-li,SHEN Gang-gang
(College of Electronic and Information Engineering,Nanjing University of Technology,Nanjing 210009,China)

Conventional firmware update is totally refreshed,which is inflexible for updating the specified modules.In the paper,based on Unified Extensible Firmware Interface(UEFI),an approach of Capsule type firmware update is proposed,which encapsulates the update data in Capsule,transfers the Capsule to firmware system,unpacks the Capsule for recollecting the update data,and writes the refresh data to the required memory.The proposed method is able to update the specified firmware function,module,protocol,or application.Experimental result shows that the given method can perform the firmware update in module,and holds the advantages of security,high-efficiency and strong flexibility.

Capsule type;update;firmware;Unified Extensible Firmware Interface(UEFI);firmware file system;

1000-3428(2014)10-0292-04

A

TP391.4

10.3969/j.issn.1000-3428.2014.10.054

教育部高等学校博士点基金资助项目(20113221120003);江苏省六大人才高峰基金资助项目(2012-WLW-023);江苏省自然科学基金资助项目(BK2009081);江苏省高校自然科学基金资助项目(09KJB520006,11KJD520007)。

杜振龙(1971-),男,副教授、博士,主研方向:可信媒体认证,计算机图形学,机器学习;沙光侠,工程师、硕士;李晓丽,副教授、博士研究生;沈钢纲,教授、博士、博士生导师。

2013-09-04

2013-11-14E-mail:duzhlcad@gmail.com

中文引用格式:杜振龙,沙光侠,李晓丽,等.基于UEFI的胶囊式固件定制更新研究[J].计算机工程,2014, 40(10):292-295,303.

英文引用格式:Du Zhenlong,Sha Guangxia,Li Xiaoli,et al.Customization and Update Research on Capsule Type Firmware Based on UEFI[J].Computer Engineering,2014,40(10):292-295,303.

customization

猜你喜欢

固件分块内存
外部高速缓存与非易失内存结合的混合内存体系结构特性评测
分块矩阵在线性代数中的应用
“春夏秋冬”的内存
反三角分块矩阵Drazin逆新的表示
基于固件的远程身份认证
基于自适应中值滤波的分块压缩感知人脸识别
基于多分辨率半边的分块LOD模型无缝表达
提取ROM固件中的APP
一种通过USB接口的可靠固件升级技术
多路手机固件升级工具设计