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

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;

http://www.kler.cn/a/554599.html

相关文章:

  • [特殊字符]边缘计算课程资料整理|从零到实战全攻略[特殊字符]
  • 【Linux】【网络】不同子网下的客户端和服务器通信
  • 爬虫FirstDay01-Request请求模块详解
  • 网易严选DevOps实践:从传统到云原生的演进
  • 如何利用ArcGIS Pro打造萤火虫风格地图
  • 二叉树层序遍历的三种情况(总结)
  • 蓝桥杯备考:递归初阶
  • Vue.js Vue 测试工具:Vue Test Utils 与 Jest
  • 学习threejs,THREE.Material材质基类详解
  • 费曼学习法1 - 你好,PIL!图像处理的魔法棒 (入门篇)
  • 右键管家深度评测:打造个性化Windows右键菜单的高效工具
  • 论文略读:MoE-LLaVA:MixtureofExpertsforLargeVision-LanguageModels
  • requestAnimationFrame(rAF)使用,与传统方法(如 setTimeout/setInterval),直观展示 rAF 的优势
  • C++:使用 SFML 创建强化学习迷宫场景
  • 计算机网络-OSI七层参考模型与数据封装,网络安全零基础入门到精通实战教程!
  • Spring Boot +SQL项目优化策略,GraphQL和SQL 区别,Spring JDBC 等原理辨析(万字长文+代码)
  • Python与Anaconda在CUDA环境中的角色解析
  • github在同步本地与远程仓库时遇到的问题
  • 6121A 音频分析仪
  • 网络运维学习笔记 015网工初级(HCIA-Datacom与CCNA-EI)NAT网络地址转换