UEFI基础概念1——EFI SYSTEM TABLE

传递给映像的最重要的参数就是系统表(system table),这是进入一个UEFI映像的入口。系统表包含了指向各种控制设备的指针,指向引导服务表的指针和指向运行服务的指针,指向系统配置表(如ACPI、SMBIOS,SAL系统表)的指针。

EFI System Table的数据结构为:

typedef struct {
  EFI_TABLE_HEADER                   Hdr; //EFI System Table的表头
  CHAR16                             *FirmwareVendor; //指向一个以null结尾地字符串,标识系统固件的供应商
  UINT32                             FirmwareRevision; //特定于固件供应商,用于表示固件平台的版本
  EFI_HANDLE                         ConsoleInHandle; //控制输入控制设备的句柄
  EFI_SIMPLE_TEXT_INPUT_PROTOCOL     *ConIn; //指向与ConsoleInHandle相关联的EFI_SIMPLE_TEXT_INPUT_PROTOCOL接口的指针。
  EFI_HANDLE                         ConsoleOutHandle;
  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *ConOut;
  EFI_HANDLE                         StandardErrorHandle; //指向标准错误控制台的指针
  EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL    *StdErr;
  EFI_RUNTIME_SERVICES               *RuntimeServices; //指向运行时服务的指针
  EFI_BOOT_SERVICES                  *BootServices; //指向引导服务的指针
  UINTN                              NumberOfTableEntries; //缓冲区系统配置表的数量
  EFI_CONFIGURATION_TABLE            *ConfigurationTable; //指向系统配置表的指针
} EFI_SYSTEM_TABLE;

EFI启动服务表

extern EFI_BOOT_SERVICES  *gBS;

gBS是一个指向启动服务的指针,EFI_BOOT_SERVICES是一个提供一组启动服务的数据结构,其提供的服务有:

Event、Timer、Task Priority Services服务

内存分配服务

Protocol处理服务

Image服务

typedef struct {
  EFI_TABLE_HEADER                              Hdr;  //表头

  // Task Priority Services 任务优先级服务
  EFI_RAISE_TPL                                 RaiseTPL;
  EFI_RESTORE_TPL                               RestoreTPL;

  // Memory Services 内存服务
  EFI_ALLOCATE_PAGES                            AllocatePages;
  EFI_FREE_PAGES                                FreePages;
  EFI_GET_MEMORY_MAP                            GetMemoryMap;
  EFI_ALLOCATE_POOL                             AllocatePool;
  EFI_FREE_POOL                                 FreePool;

  // Event & Timer Services 事件和定时器服务
  EFI_CREATE_EVENT                              CreateEvent;
  EFI_SET_TIMER                                 SetTimer;
  EFI_WAIT_FOR_EVENT                            WaitForEvent;
  EFI_SIGNAL_EVENT                              SignalEvent;
  EFI_CLOSE_EVENT                               CloseEvent;
  EFI_CHECK_EVENT                               CheckEvent;

  // Protocol Handler Services 协议处理服务
  EFI_INSTALL_PROTOCOL_INTERFACE                InstallProtocolInterface;
  EFI_REINSTALL_PROTOCOL_INTERFACE              ReinstallProtocolInterface;
  EFI_UNINSTALL_PROTOCOL_INTERFACE              UninstallProtocolInterface;
  EFI_HANDLE_PROTOCOL                           HandleProtocol;
  VOID                                          *Reserved;
  EFI_REGISTER_PROTOCOL_NOTIFY                  RegisterProtocolNotify;
  EFI_LOCATE_HANDLE                             LocateHandle;
  EFI_LOCATE_DEVICE_PATH                        LocateDevicePath;
  EFI_INSTALL_CONFIGURATION_TABLE               InstallConfigurationTable;

  // Image Services 映像服务
  EFI_IMAGE_LOAD                                LoadImage;
  EFI_IMAGE_START                               StartImage;
  EFI_EXIT                                      Exit;
  EFI_IMAGE_UNLOAD                              UnloadImage;
  EFI_EXIT_BOOT_SERVICES                        ExitBootServices;

  // Miscellaneous Services 杂项服务
  EFI_GET_NEXT_MONOTONIC_COUNT                  GetNextMonotonicCount;
  EFI_STALL                                     Stall;
  EFI_SET_WATCHDOG_TIMER                        SetWatchdogTimer;

  // DriverSupport Services 驱动支持服务
  EFI_CONNECT_CONTROLLER                        ConnectController;
  EFI_DISCONNECT_CONTROLLER                     DisconnectController;

  // Open and Close Protocol Services 开启和关闭Protocol服务
  EFI_OPEN_PROTOCOL                             OpenProtocol;
  EFI_CLOSE_PROTOCOL                            CloseProtocol;
  EFI_OPEN_PROTOCOL_INFORMATION                 OpenProtocolInformation;

  // Library Services 库服务
  EFI_PROTOCOLS_PER_HANDLE                      ProtocolsPerHandle;
  EFI_LOCATE_HANDLE_BUFFER                      LocateHandleBuffer;
  EFI_LOCATE_PROTOCOL                           LocateProtocol;
  EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES      InstallMultipleProtocolInterfaces;
  EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES    UninstallMultipleProtocolInterfaces;

  // 32-bit CRC Services 32位CRS服务(循环冗余校验服务)
  EFI_CALCULATE_CRC32                           CalculateCrc32;

  // Miscellaneous Services 杂项服务
  EFI_COPY_MEM                                  CopyMem;
  EFI_SET_MEM                                   SetMem;
  EFI_CREATE_EVENT_EX                           CreateEventEx;
} EFI_BOOT_SERVICES;

EFI运行服务表

extern EFI_RUNTIME_SERVICES  *gRT;

gRT是指向运行服务表的指针,EFI_RUNTIME_SERVICES是一个提供一组运行时服务的数据结构,所提供的服务有

运行时规则和限制

Variable服务

时间服务

虚拟内存服务

杂项服务

/// EFI Runtime Services Table.
typedef struct {
  EFI_TABLE_HEADER                  Hdr; //表头

  // Time Services 时间服务
  EFI_GET_TIME                      GetTime;
  EFI_SET_TIME                      SetTime;
  EFI_GET_WAKEUP_TIME               GetWakeupTime;
  EFI_SET_WAKEUP_TIME               SetWakeupTime;

  // Virtual Memory Services 虚拟内存服务
  EFI_SET_VIRTUAL_ADDRESS_MAP       SetVirtualAddressMap;
  EFI_CONVERT_POINTER               ConvertPointer;

  // Variable Services 变量服务
  EFI_GET_VARIABLE                  GetVariable;
  EFI_GET_NEXT_VARIABLE_NAME        GetNextVariableName;
  EFI_SET_VARIABLE                  SetVariable;

  // Miscellaneous Services 杂项服务
  EFI_GET_NEXT_HIGH_MONO_COUNT      GetNextHighMonotonicCount;
  EFI_RESET_SYSTEM                  ResetSystem;

  // UEFI 2.0 Capsule Services UEFI2.0 胶囊服务
  EFI_UPDATE_CAPSULE                UpdateCapsule;
  EFI_QUERY_CAPSULE_CAPABILITIES    QueryCapsuleCapabilities;

  // Miscellaneous UEFI 2.0 Service UEFI2.0 杂项服务
  EFI_QUERY_VARIABLE_INFO           QueryVariableInfo;
} EFI_RUNTIME_SERVICES;
相关推荐
Petal9909122 天前
UEFI学习笔记(五):EDK II PCD的概念、类型、使用
笔记·学习·uefi
Petal9909126 天前
UEFI学习笔记(四):inf、dec和dsc
笔记·学习·uefi
Petal9909128 天前
UEFI学习笔记(三):FDF文件及FD、FV、FFS
笔记·uefi
修行者xxl21 天前
UEFI开发——编写一个简单的PPI
uefi
修行者xxl22 天前
标准UEFI Shell命令
shell·uefi
一只小菜鸟-BIOS24 天前
EDKII之安全启动详细介绍
驱动开发·安全·uefi·bios
鹏大师运维1 个月前
【信创】Linux下EFI引导配置工具efibootmgr _ 统信 _ 麒麟 _ 方德
linux·uefi·麒麟·国产操作系统·统信·efibootmgr·方德
ERIC-ZI1 个月前
IAP程序升级 与 电脑BIOS 的关系
电脑·iap·flash·bios·程序升级·固件
电脑技术分享网1 个月前
uefi与legacy启动原理是什么?uefi启动和legacy启动原理详细分析
uefi·legacy·uefi启动原理·legac启动原理·uefi和legacy启动原理