将信息从 UEFI 传递到 OS
Passing information from UEFI to the OS
我熟悉BIOS int 15 - E820函数,这里可以选择fixed物理位置,随便放,OS 不会覆盖它,您可以访问该固定内存地址(可以先将其映射到虚拟指针等)。
但在 UEFI 的情况下,据我所知,没有为用户保留的内存区域,所以我不能依赖于在特定内存地址分配缓冲区(如果这可能的话?) ,因此我必须使用 UEFI 内存存储功能 - returns 一个指针 not fixed.
所以我的问题是 -
是否可以分配一个一旦OS上升就不会被覆盖的缓冲区?
如何传递 OS 已分配缓冲区的指针,以便我可以从 OS 访问它(同样,自分配以来,希望如此缓冲区本身没有被覆盖,不在固定位置)。
谢谢!
- 是的。分配不可回收类型的内存内存,如
EfiRuntimeServicesData
.
- UEFI 使用的机制称为配置tables。
注:EfiPersistentMemory
完全不同
配置table通过在引导服务期间调用InstallConfigurationTable
来安装,两个参数是一个GUID和一个指向您要传递的数据结构的物理地址的指针。然后将这一对链接到 UEFI 系统 Table.
指向的数组中
您如何在 Windows 中提取该信息,我不知道。在 Linux 中,UEFI 系统 table 在内核 space (efi->systab
) 中是全局可访问的,因此可以从那里提取指针。
我熟悉BIOS int 15 - E820函数,这里可以选择fixed物理位置,随便放,OS 不会覆盖它,您可以访问该固定内存地址(可以先将其映射到虚拟指针等)。
但在 UEFI 的情况下,据我所知,没有为用户保留的内存区域,所以我不能依赖于在特定内存地址分配缓冲区(如果这可能的话?) ,因此我必须使用 UEFI 内存存储功能 - returns 一个指针 not fixed.
所以我的问题是 -
是否可以分配一个一旦OS上升就不会被覆盖的缓冲区?
如何传递 OS 已分配缓冲区的指针,以便我可以从 OS 访问它(同样,自分配以来,希望如此缓冲区本身没有被覆盖,不在固定位置)。
谢谢!
- 是的。分配不可回收类型的内存内存,如
EfiRuntimeServicesData
. - UEFI 使用的机制称为配置tables。
注:EfiPersistentMemory
完全不同
配置table通过在引导服务期间调用InstallConfigurationTable
来安装,两个参数是一个GUID和一个指向您要传递的数据结构的物理地址的指针。然后将这一对链接到 UEFI 系统 Table.
您如何在 Windows 中提取该信息,我不知道。在 Linux 中,UEFI 系统 table 在内核 space (efi->systab
) 中是全局可访问的,因此可以从那里提取指针。