UEFI的系统组成

UEFI系统组成

 UEFI提供给操作系统的接口包括启动服务(Boot Services,BS)和运行时服务(RunTime Services,RT)以及隐藏在BS之后的丰富的Protocol。BS和RT是以表的形式(C语言中的结构体)存在。UEFI驱动好服务以Prtocol的形式通过BS提供给操作系统。
BS也就是Boot Services函数原型如下
EFI Boot Services Table.

typedef struct {
  ///
  /// The table header for the EFI Boot Services Table.
  ///
 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
  //
  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
  //
  EFI_CALCULATE_CRC32               CalculateCrc32;

  //
  // Miscellaneous Services
  //
  EFI_COPY_MEM                      CopyMem;
  EFI_SET_MEM                       SetMem;
  EFI_CREATE_EVENT_EX               CreateEventEx;
} EFI_BOOT_SERVICES;   

RT也就是RunTime Services函数原型如下
EFI Runtime Services Table

typedef struct {
  ///
  /// The table header for the EFI Runtime Services Table.
  ///
  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_
  EFI_UPDATE_CAPSULEMONO_COUNT    GetNextHighMonotonicCount;
  EFI_RESET_SYSTEM                ResetSystem;

  //
  // UEFI 2.0 Capsule Services
  //              UpdateCapsule;
  EFI_QUERY_CAPSULE_CAPABILITIES  QueryCapsuleCapabilities;

  //
  // Miscellaneous UEFI 2.0 Service
  //
  EFI_QUERY_VARIABLE_INFO         QueryVariableInfo;
} EFI_RUNTIME_SERVICES;

下图展示了基于EFI的计算机系统的组成
在这里插入图片描述

 从操作系统加载器(OS Loader)被加载,到OS Loader执行ExitBootServices()的这段时间,是从UEFI环境向操作系统过度的过程。在这个过程中,OS Loader可以通过BS和RT使用UEFI通过的服务,将计算机系统资源逐渐转移到自己手中,这个过程为TSL(Transient System Load).
  当OS Loader完全掌握了计算机系统资源时,BS也就完成了它的使命。OS Loader调用ExitBootServices()结束BS并回收BS占用的资源,之后计算机系统进入UEFI Runtime阶段。
在Runtime阶段只有运行时服务继续为OS提供,BS已经从计算不及系统中销毁。
 在TSL阶段,系统资源通过BS管理,BS提供的服务如下。
1.事件服务: 事件是异步操作的基础,有了事件的支持,才可以在UEFI系统内执行并发操作。
2.内存管理:主要提供内存的分配与释放服务,管理系统内存映射。
3.Protocol管理:提供了安装Protocol与卸载Protocol的服务,以及注册Protocol通知函数(该函数在Protocol安装时候调用)的服务。
4.Protocol使用类服务:包括Protocol的打开与关闭,查找支持protocol的控制器,例如要读写某个PCI设备读的寄存器,可以通过OpenProtocol服务打开这个设备上从PciIoProtocol,用PciIo->Io.Read()服务可以读取这个设备上的寄存器。
5.驱动管理:包括用于将驱动安装到控制器connect服务,以及将驱动从控制器上卸载的disconnect服务。例如,启动时,如果我们需要网络支持,则可以通过loadImage将驱动加载带内存,然后通过connect服务将驱动安装带设备。
6.Image管理:此类服务包括加载,卸载,启动和退出UEFI应用程序或驱动
7.ExitBootServices:用于结束启动服务。
RT提供的服务主要包括如下几个方面
1.时间服务:服务/设定时间。读取/设定系统从睡眠中唤醒的时间
2.读写UEFI系统变量:读取/设定系统变量。例如BootOrder用于指定启动项顺序,通过这些系统变量可以保存系统配置。
3.虚拟内存服务:将物理地址转换为虚拟地址。
4.其他服务:包括重启系统RestSystem,获取系统提供的下一个单调单增值等。

猜你喜欢

转载自blog.csdn.net/weixin_43700340/article/details/84972185