您的位置:

Tianocore的全面解析

Tianocore 是一个支持 UEFI 规范标准的开源社区项目,提供了基础启动和运行环境、各种各样的命令行界面以及 UEFI 应用程序的支持库和模板。支持从传统 BIOS 启动模式到 EFI/UEFI 启动模式的切换,具有巨大的灵活性和可移植性。Tianocore 项目的目标是为 UEFI 生态链上的所有成员创造一个开放、安全、可扩展、可移植和互操作的软件生态系统。

一、基础介绍

Tianocore 的核心是模块化的驱动程序和应用程序。Tianocore 根据模块和库的依赖关系构建代码,并将它们链接到一个称为 BaseTools 的构建工具链中。通过使用 BaseTools,开发人员可以跨平台进行构建,但 Tianocore 运行环境本身需要针对某些特定的芯片集成电路进行配置和编译。

UEFI BIOS 启动从 Silicon 到 Ready 有五个主要阶段:阶段 0、Sec阶段、PEI阶段、DXE阶段和BDS阶段。TianoCore 运行时环境中具有各个阶段的源代码,可以在应用程序中使用这些源代码来构建可以运行在 UEFI BIOS 上的各种应用程序。为了提高稳定性和兼容性,Tianocore 还在开源社区基础上开发了 EDK2 和 EDK II。EDK(Embedded Development Kit)是一个 UEFI 开发工具包,可以在各种硬件平台上实现 UEFI BIOS。

二、模块化的驱动程序和应用程序

模块是指具有单独功能的代码单元。Tianocore 有许多可用的模块,例如 SMBIOS 模块、网络协议模块和 USB 驱动程序模块等。同时,根据开发人员的需要,Tianocore 还支持自定义模块和驱动程序的添加。

在 Tianocore 中,驱动程序和应用程序被分成两个模块,基于 Common Driver Model 构建。Common Driver Model 由 UEFI 约定、抽象和分层,提供了一种可移植且易于开发和维护的驱动程序模型。它将驱动程序划分为各种功能驱动程序、控制器驱动程序和服务驱动程序。在 Common Driver Model 中,驱动程序被视为层次结构,驱动程序能够递归安装和卸载,这就是所谓的“协议继承”。

三、使用Tianocore开发UEFI BIOS

Tianocore 是一款功能强大的工具,可以帮助开发者实现各种各样的 UEFI BIOS,并且非常容易上手。和其他操作系统一样,UEFI BIOS 可以使用 C 语言来编写,因此了解 C 语言和编程概念是开发 UEFI BIOS 的必要条件。

下面是一个简单的 UEFI BIOS 应用程序示例,该程序在启动时仅显示一条消息并退出。

#include 
#include 
   
#include 
    

EFI_STATUS
EFIAPI
UefiMain(
  IN EFI_HANDLE        ImageHandle,
  IN EFI_SYSTEM_TABLE  *SystemTable
  )
{
  Print(L"Hello, Tianocore!\n");
  return EFI_SUCCESS;
}

    
   
  

在此示例中,我们首先启用 UefiLib 库,这是 Tianocore 标准库的一部分。然后我们定义了一个启动函数 UefiMain ,该函数使用 Print 函数在控制台上显示“Hello,Tianocore!”的消息。

四、使用BaseTools构建UEFI BIOS

使用 BaseTools 工具集来构建 UEFI BIOS。BaseTools 使用 Python 脚本和 make 文件构建 UEFI BIOS。它提供了一些有用的命令行工具,例如 build 命令、genmakefile 命令和conf命令。

在这个例子中,我们将构建一个简单的应用程序,该应用程序在启动时显示给定的消息。为此,我们需要编写一个生成文件 config.py 并在其中定义要构建的应用程序:

[Library]
  INTEL_UEFI_PI_SYSTAB_LIB
  UEFI_APPLICATION_LIB

[Components]
  HelloWorld/Application/HelloWorld.inf

然后运行 build 命令来构建应用程序。

$ source edksetup.sh
$ build

五、结论

Tianocore 是一个非常有用的工具,可以帮助开发者轻松地构建各种各样的 UEFI BIOS 应用程序,并且在开源社区的支持下,Tianocore 项目将会变得越来越强大。同时,Tianocore 还提供了许多实用的工具和库,使开发人员能够更加轻松地构建和维护自己的 UEFI BIOS 应用程序。