我熟悉BIOS int 15 - E820功能,你可以选择固定物理位置,放在你想要的任何地方,操作系统不会覆盖它,你可以只访问那个固定的内存地址(可以先将它映射到虚拟指针等)。
但是在UEFI的情况下,据我所知,没有为用户保留的内存区域,所以我不能依赖于在特定的内存地址分配缓冲区(如果可能的话?),因此我必须使用UEFI内存功能 - 它返回一个不固定的指针。
所以我的问题是 -
是否可以分配一个在操作系统启动后不会被覆盖的缓冲区?
如何通过操作系统传递分配缓冲区的指针,所以我可以从操作系统访问它(再次,因为分配,希望缓冲区本身不会被覆盖,不是固定的位置)。
谢谢!
答案 0 :(得分:1)
EfiRuntimeServicesData
。 注意: EfiPersistentMemory
完全不同。
通过在引导服务期间调用InstallConfigurationTable
来安装配置表,其中两个参数是GUID,并且是指向要传递的数据结构的物理地址的指针。然后将该对链接到UEFI系统表指向的数组中。
我不知道如何在Windows中提取该信息。在Linux中,UEFI系统表可在内核空间(efi->systab
)中全局访问,因此可以从那里提取指针。