用于统一可扩展固件接口(UEFI)驱动器和协议的方法和装置制造方法及图纸

技术编号:12980412 阅读:92 留言:0更新日期:2016-03-04 01:56
一种示例装置可以包括处理器和包括计算机程序代码的存储器设备。存储器设备和计算机程序代码利用处理器可以使所述装置:运行客户端应用,所述客户端应用使用第一协议,所述协议已经由统一可扩展固件接口(UEFI)封装器驱动器产生;利用客户端应用,调用UEFI封装器驱动器以执行协议的至少一个操作;利用封装器驱动器加载工作器应用的二进制映像以调用至少一个操作。工作器应用调入软件库的至少一个功能以执行至少一个操作。

【技术实现步骤摘要】
【国外来华专利技术】【专利说明】
技术介绍
基本输入/输出系统(B1S)是可以在软件基础设施方面提供有限环境的固件接口,其可用于与个人计算机和其他计算设备对接。在采用统一可扩展固件接口(UEFI)标准以取代或补充B1S的情况下,已经出现固件级别的基于软件的差异化的新的机遇。【附图说明】为了更完整地理解各种示例,现在参考结合附图考虑的以下描述,其中:图1图示用于在UEFI环境中利用C库功能的示例运行流程;图2图示示例系统;和图3图示用于在UEFI环境中利用C库功能的示例过程。【具体实施方式】统一可扩展固件接口(UEFI)标准可以提供用于通过添加针对新应用和驱动器的开发的灵活性来在B1S环境上进行改进的框架。然而,与其他开发环境相比,在系统引导时可用的软件基础设施(例如,库和工具)在当前UEFI环境的情况下可能相对较差。UEFI是定义操作系统和平台固件及硬件之间的软件接口的规范。UEFI可取代在较旧的个人计算机(PC)模型中使用的基本输入/输出系统(B1S)固件接口。虽然B1S被实现为固件片,但UEFI可包括置于计算机固件的顶层的可编程软件接口(包括例如可以将类似功能(例如,预引导或自展(bootstrap)功能)执行为“传统(legacy) ”B1S的基于UEFI的B1S类固件)和硬件。UEFI可以提供称为EFI字节代码或EBC的设备驱动器环境。系统固件可以包括针对驻留在或加载到EBC环境中的任何EBC映像(image)的解释器。EBC仅是UEFI模块可被编译成的一种可能的目标二进制格式。UEFI驱动器例如可被编译成不是EBC的格式。UEFI驱动器可以提供针对硬件组件的支持并执行针对客户端应用的任务。UEFI可以定义能够运行UEFI应用的壳(shell)环境。壳环境通常用作开发/诊断/支持环境。相比而言,UEFI B1S可潜在的具有许多UEFI应用,以执行各种用户可配置任务,例如以配置比如引导设备偏好等的PC设置。UEFI可以定义作为用于在两个二进制模块(例如,驱动器或客户端应用)之间通信的软件接口集的协议。UEFI驱动器可以经由协议向其他驱动器和应用提供服务。协议可以由UEFI驱动器产生,并且可以被其他UEFI驱动器和任何类型的UEFI应用使用(consume)。UEFI中更健壮的特征的实现方式可要求程序员充分开发或适配库、应用和/或驱动器,以符合UEFI的编程模型和应用编程接口(API),其虽然基于C,但可能不符合现有的C标准(例如,ANSI C、C99等)。为了弥补该差距的部分,根据C95规范的标准C库的端口以及附加地伯克利软件分发(BSD)套接字(socket)库的端口以及一些可移植操作系统接口(P0SIX)功能可被包括在开源UEFI开发套件(又名TianoCore)中,作为“UEFI应用开发套件”(EADK)的一部分。由于关于平台(如小型闪存/ROM部件)的存储空间约束,固件开发中的另一个挑战可以是保持固件二进制映像的大小较小。在一些C开发环境中,使用动态链接(或共享)库(DLL)是解决该问题的常用方法。利用该方法,可以在目标环境中安装库二进制的仅一个拷贝,而不管使用库的应用的数目(因此仅占用与库二进制大小一样多的字节)。在UEFI环境中,动态链接可通过使用UEFI驱动器实现,其中UEFI驱动器可以实现将被UEFI应用或其他UEFI驱动器使用(例如,链接)的库,并且可以通过一个或多个UEFI协议接口暴露它。由UEFI应用开发套件提供的标准C库的使用可仅限于从EFI壳启动的UEFI应用(例如,“托管的实现方式”)。另一方面,UEFI驱动器可能无法直接利用(leverage)这些C库。在本文描述的各种示例中,用户可以被允许规避该限制和将现有基于标准的C库(例如包括,依赖于使用套接字的用于网络通信的标准C API的许多现有库)移植(port)到UEFI环境上,所述UEFI环境包括部署C库的单个拷贝作为UEFI驱动器的能力。图1图示根据一个示例的用于在UEFI环境中利用C库功能的示例运行流程100。示例运行流程100可以包括一个或多个客户端应用105(在图1的示例中图示三个客户端应用105-1、105-2和105-3),其可以调用(invoke) —个或多个暴露的UEFI驱动器功能110。客户端应用105可以经由用于往来于UEFI驱动器功能110的通信的一个或多个外部协议117被链接到并调用UEFI驱动器功能110。UEFI驱动器功能110可以包括两个组件:封装器(wrapper)驱动器115和工作器(worker)应用120。封装器驱动器115可被实现为常规的UEFI驱动器(例如,提供加载/卸载能力、安装协议等)。工作器应用120可被实现为UEFI应用。在各种示例中,工作器应用120可包含通过从标准的基于C的库125移植的各种功能提供的核心功能,其可以与工作器应用120静态链接。示例运行流程100可以采用允许工作器应用120被嵌入在封装器驱动器115的二进制映像中和从其内加载的技术,从而允许封装器驱动器115和工作器应用120被捆绑成单个二进制映像。在运行流程100的各种示例中,封装器驱动器115可以隐藏工作器应用120,并且可以通过一个或多个外部协议117仅仅暴露去往工作器应用120的接口,其包括在工作器应用120中实现无论什么特征。经由外部协议117暴露的特征进而由封装器驱动器通过一个或多个内部协议119与工作器应用连接,以命令工作器应用执行实际工作。在各种示例中,封装器驱动器115可将工作委托给工作器应用120。如上所讨论的,协议可基本上是由要被其它系统组件(例如,类似于公布的DLL或共享库的API)所使用的UEFI驱动器公布的功能指针和数据结构(API)的块。通过在工作器应用120中实现核心功能并经由内部协议119调用C库特征,示例性运行流程100可以能够规避技术限制,该技术限制可防止构建与由UEFI开发套件(EADK)提供的标准C库直接链接的UEFI驱动器。在各种示例中,工作器应用120可以被存储在用于封装器驱动器115的代码内。在这方面,每次加载工作器应用120时,它可以从存储器中的固定位置访问。因此,可以减少或消除审查ROM中的驱动器文件或将工作器应用从ROM加载到RAM的需要。在各种示例中,工作器应用120可以代表封装器驱动器115运行操作。为此,在一些示例中,当由外部协议117调入(call)时,封装器驱动器115可以加载和启动工作器应用120 ;当被启动时,工作器应用可以使用内部协议(本文称为GetOperat1n)查询驱动器以确定什么操作将被工作器应用120运行。在执行GetOperat1n查询之后,工作器应用可以利用由封装器驱动器115提供的参数调入在移植的C库125中的(一个或多个)对应功能。在一些示例中,在执行指定的操作之后,工作器应用120可以在存储器缓冲器130中存储任何结果,并且然后可以退出,将控制返回给封装器驱动器115,所述封装器驱动器可以然后在完成由客户端应用105之一请求的任务时将控制返回给客户端应用105。客户端应用然后可以从存储器缓冲器130检索结果。以这种方式,对于由客户端应用105向通过封装器驱动器115暴露的外部API进行的每次调入,工作器应用120可本文档来自技高网...

【技术保护点】
一种装置,包括:处理器;和包括计算机程序代码的存储器设备,存储器设备和计算机程序代码利用所述处理器,以使所述装置:运行客户端应用,所述客户端应用使用第一协议,所述协议已经由统一可扩展固件接口(UEFI)封装器驱动器产生;利用客户端应用调用UEFI封装器驱动器以执行所述协议的至少一个操作;利用封装器驱动器加载工作器应用的二进制映像以调用至少一个操作,其中,工作器应用调入软件库的至少一个功能以执行至少一个操作。

【技术特征摘要】
【国外来华专利技术】

【专利技术属性】
技术研发人员:K·柏林G·特塞尔L·波罗C·斯陶布C·费尔南德斯B·西尔瓦
申请(专利权)人:惠普发展公司有限责任合伙企业
类型:发明
国别省市:美国;US

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1