我熟悉BIOS int 15-E820函数,在这个函数中,你可以选择一个固定的物理位置,把你想要的东西放在那里,操作系统不会覆盖它,你只需要访问那个固定的内存地址(可以先映射到一个虚拟指针等)。
但在UEFI的情况下,据我所知,没有为用户预留内存区域,所以我不能依赖于在特定的内存地址分配缓冲区(如果这是可能的话?),因此我必须使用一个UEFI内存函数-它返回一个不固定的指针。
所以我的问题是-
有没有可能分配一个缓冲区,一旦操作系统启动就不会被覆盖?
如何向操作系统传递已分配缓冲区的指针,以便我可以从操作系统中访问它(同样,由于分配(如果缓冲区本身没有被覆盖,希望分配不在固定位置)。
谢谢您!
最佳答案
对。分配不可回收类型的内存,如EfiRuntimeServicesData
。
UEFI使用的机制称为配置表。
注意:EfiPersistentMemory
是完全不同的。
通过在引导服务期间调用InstallConfigurationTable
来安装配置表,这两个参数是一个GUID和一个指向要传递的数据结构的物理地址的指针。然后,这对连接到由UEFI系统表指向的数组中。
我不知道你是如何在Windows中提取这些信息的。在Linux中,UEFI系统表在内核空间(efi->systab
)中是全局可访问的,因此可以从中提取指针。
关于c - 将信息从UEFI传递到OS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36989997/