论文部分内容阅读
统一可扩展固件接口(Unified Extensible Firmware Interface, UEFI)是新一代的硬件和操作系统之间的接口,它采用模块化的设计,C语言风格的参数堆栈传递方式,并且以动态链接的形式构建系统,充分体现了软件工程的思想,具有统一的调用接口和良好的扩充性能。它突破了传统的基本输入输出接口(Basic Input Output System,BIOS)的实模式下仅16位代码的寻址能力,能够运行于32位或64位保护模式。它采用UEFI驱动运行环境(Driver Execution Environment,DXE)加载UEFI驱动模块并解释运行的方式,识别并操作硬件,并具有向下兼容和跨平台支持的特性。较BIOS而言,大大减少了重复开发工作,降低了对开发人员专业性质的要求,并大大加快了系统研发的周期。相比针对Linux系统启动的Coreboot,它还不仅定义了清晰全面的接口,能够广泛的支持Linux、Windows、Mac OS等多种操作系统,同时还得到了底层硬件厂商如Intel、AMD、HP、Dell的支持,使得它更具有通用性。得益于这些优点, UEFI格外受到主板厂家亲睐而得以迅速推广。UEFI在近10年的推广后,已经成为主流,将使用传统的BIOS的或者其他接口的微型计算机系统逐渐淘汰出市场。但是UEFI由于本身的设计上的原因,如在SMP系统中仍然只使用BSP、使用单进程而不支持多进程、没有用户权限控制、仅使用时钟中断等等,导致其无法完全发挥硬件的全部能力。与此同时软件供应商支持力度也不够,使得其应用通常只有硬件相关厂商开发,而且应用的范围也相当局限,不同厂商所自定义的接口也有差异,也降低了其本身的价值。开发难度相比传统BIOS来讲虽有很大提高,但是相对Linux而言仍然太大。本文为了进一步提高采用UEFI接口的系统的应用能力和使用价值并同时降低开发难度和减少重复开发工作,研究如何在普通的UEFI环境内下实现一个嵌入式Linux应用平台,并使其具有以下特点:(1)平台的构架采用模块化的设计方式。整体上作为UEFI的标准模块,完全符合UEFI接口规范,使其可以采用多种UEFI部署方案,灵活的部署在UEFI平台的系统上。模块内部采分层和模块化的设计,使其模块可以灵活的定制和更改;(2)具有完整的操作系统级别的支持,能够以Linux操作系统的方式进行开发和扩展。能充分发挥出操作系统级别的能力,提供比UEFI更加全面的软件和硬件支持,使其能充分利用硬件计算资源并同时提供高级电源管理功能;(3)通过采用抽象和虚拟技术进一步扩充系统的通用性,高可用性。充分利用虚拟化技术以及云计算技术,使平台可以充分发挥网络和并行运算的能力,同时减少资源浪费并提高资源的利用率。本文在基于COM-Express2.0规范的硬件模块上实现了一个Embedded GenericPlatform (EGP),通过以模块方式内置在固件中的EGP,能直接以操作系统的方式使用本地终端的计算资源以及网络资源,也可以更进一步经过模块化的扩展,使用云端计算资源。