当前位置: 首页 > news >正文

UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image

本节定义EFI_LOADED_IMAGE_PROTOCOL和 EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL。这些协议分别描述了已加载到内存中的映像,并指定了PE/COFF映像通过EFI引导服务LoadImage()加载 时使用的设备路径。这些描述包括 load image 的源、映像在内存中的当前位置、为image分配的内存类型、 以及在调用image时传递给image的参数。

9.1 EFI Loaded Image Protocol

被 image handle 使用,用于获取加载的 Image 的信息。

///
/// Can be used on any image handle to obtain information about the loaded image.
///
typedef struct {
  UINT32                      Revision;     ///< Defines the revision of the EFI_LOADED_IMAGE_PROTOCOL structure.
                                            ///< All future revisions will be backward compatible to the current revision.
  EFI_HANDLE                  ParentHandle; ///< Parent image's image handle. NULL if the image is loaded directly from
                                            ///< the firmware's boot manager.
  EFI_SYSTEM_TABLE            *SystemTable; ///< the image's EFI system table pointer.

  //
  // Source location of image
  //
  EFI_HANDLE                  DeviceHandle; ///< The device handle that the EFI Image was loaded from.
  EFI_DEVICE_PATH_PROTOCOL    *FilePath;    ///< A pointer to the file path portion specific to DeviceHandle
                                            ///< that the EFI Image was loaded from.
  VOID                        *Reserved;    ///< Reserved. DO NOT USE.

  //
  // Images load options
  //
  UINT32                      LoadOptionsSize; ///< The size in bytes of LoadOptions.
  VOID                        *LoadOptions;    ///< A pointer to the image's binary load options.

  //
  // Location of where image was loaded
  //
  VOID                        *ImageBase;    ///< The base address at which the image was loaded.
  UINT64                      ImageSize;     ///< The size in bytes of the loaded image.
  EFI_MEMORY_TYPE             ImageCodeType; ///< The memory type that the code sections were loaded as.
  EFI_MEMORY_TYPE             ImageDataType; ///< The memory type that the data sections were loaded as.
  EFI_IMAGE_UNLOAD            Unload;
} EFI_LOADED_IMAGE_PROTOCOL;

这个EFI_LOADED_IMAGE_PROTOCOL 是在需要加载 Image 的 driver 来 install,拿 SMM driver 来举例:

在 SMM driver entry 里面会来填充对应 image 的相关信息,包括 image 的地址。

9.2 EFI Loaded Image Device Path Protocol

安装后,Loaded Image Device Path Protocol 指定通过EFI引导服务LoadImage()加载 PE/COFF映像时使用的设备路径。Loaded Image Device Path Protocol 使用与第 10 章中定义的Device Path Protocol 相同的协议接口结构,只有 GUIID 不同。

Loaded Image Device Path Protocol 必须安装到EFI引导服务loadimage()加载的PE/COFF映像的映像句柄上。

在 Boot service-->loadimage 加载 image 之前需要将这个 device patch 复制到Boot service-->loadimage;

typedef struct {
  UINT8    Type;    ///< 0x01 Hardware Device Path.
                    ///< 0x02 ACPI Device Path.
                    ///< 0x03 Messaging Device Path.
                    ///< 0x04 Media Device Path.
                    ///< 0x05 BIOS Boot Specification Device Path.
                    ///< 0x7F End of Hardware Device Path.

  UINT8    SubType; ///< Varies by Type
                    ///< 0xFF End Entire Device Path, or
                    ///< 0x01 End This Instance of a Device Path and start a new
                    ///< Device Path.

  UINT8    Length[2]; ///< Specific Device Path data. Type and Sub-Type define
                      ///< type of data. Size of data is included in Length.
} EFI_DEVICE_PATH_PROTOCOL;

相关文章:

  • 【Ubuntu】GPU显存被占用,但显示没有使用GPU的进程
  • 虚拟机和主机可互相复制粘贴
  • 基于WebGIS技术的校园地图导航系统架构与核心功能设计
  • Linux 内核是如何检测可用物理内存地址范围的?
  • DeepSeek提示词高阶用法全解析:职场效率提升的10个实战案例*——让AI成为你的全能职场助手
  • Java的常用数据类型有哪些?
  • python数据容器
  • spring boot知识点4
  • Android SDK封装打包流程详解
  • [展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植
  • Ubuntu20.04.2安装Vmware tools
  • git空文件夹不能提交问题
  • Git命令详解与工作流介绍:全面掌握版本控制系统的操作指南
  • 火绒终端安全管理系统V2.0【系统防御功能】
  • 校招后台开发:JAVA和GO选哪一个?
  • 设计模式教程:代理模式(Proxy Pattern)
  • python中的Pillow 库安装后需要重启吗?
  • Python正则表达式处理中日韩字符过滤全解析
  • 基于Spring Security 6的OAuth2 系列之二十 - 高级特性--令牌交换(Token Exchange)
  • JS:事件对象
  • 影视网站建设教程/安卓优化大师官网下载
  • 网站怎么做数据备份/天天网站
  • 南昌做网站和微信小程序的公司/电商培训内容
  • magento官方网站/谷歌推广哪家公司好
  • 网站建设昆明/百度风云榜排行榜
  • 做网站的的需求文档/百度知道提问