将信息从 UEFI 传递到 OS

Passing information from UEFI to the OS

我熟悉BIOS int 15 - E820函数,这里可以选择fixed物理位置,随便放,OS 不会覆盖它,您可以访问该固定内存地址(可以先将其映射到虚拟指针等)。

但在 UEFI 的情况下,据我所知,没有为用户保留的内存区域,所以我不能依赖于在特定内存地址分配缓冲区(如果这可能的话?) ,因此我必须使用 UEFI 内存存储功能 - returns 一个指针 not fixed.

所以我的问题是 -

  1. 是否可以分配一个一旦OS上升就不会被覆盖的缓冲区?

  2. 如何传递 OS 已分配缓冲区的指针,以便我可以从 OS 访问它(同样,自分配以来,希望如此缓冲区本身没有被覆盖,不在固定位置)。

谢谢!

  1. 是的。分配不可回收类型的内存内存,如EfiRuntimeServicesData.
  2. UEFI 使用的机制称为配置tables

注:EfiPersistentMemory完全不同

配置table通过在引导服务期间调用InstallConfigurationTable来安装,两个参数是一个GUID和一个指向您要传递的数据结构的物理地址的指针。然后将这一对链接到 UEFI 系统 Table.

指向的数组中

您如何在 Windows 中提取该信息,我不知道。在 Linux 中,UEFI 系统 table 在内核 space (efi->systab) 中是全局可访问的,因此可以从那里提取指针。