You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UEFI通过GRUB向多操作系统传递RAM信息的机制及GetMemoryMap疑问

UEFI内存映射传递机制及GRUB的中转逻辑

一、UEFI原生的内存信息提供方式

UEFI通过Boot Service中的GetMemoryMap()接口对外提供内存映射数据,核心数据载体是EFI_MEMORY_DESCRIPTOR结构——每个描述符会记录一块物理内存的起始地址、大小、类型(比如可用RAM、保留区域、ACPI表存储区等)。如果操作系统直接从UEFI启动(无引导加载器),会自行调用这个接口获取内存信息。

二、GRUB作为引导加载器的中转处理

GRUB在UEFI模式下运行时,会先调用GetMemoryMap()拿到完整的内存映射数据,再根据目标操作系统的规范,转换成对应协议格式传递:

给Linux传递内存信息

GRUB遵循Multiboot2协议(或早期的Multiboot协议),把内存映射打包进Multiboot2的MEMORY_MAP标签中。Linux内核启动时,会直接读取GRUB传递的这个标签数据,以此构建自身的物理内存管理体系。

给Windows传递内存信息

Windows要求引导程序按照其定义的EFI启动参数格式传递内存信息。GRUB会将UEFI内存映射转换成Windows内核可识别的结构,通过EFI启动参数传递给Windows内核,后者直接使用该数据完成内存管理初始化。

三、操作系统是否需要自行调用GetMemoryMap()?

答案是不需要,原因有两点:

  • GRUB已经提前调用GetMemoryMap()获取了完整的内存映射,并按目标OS的协议做好封装传递,内核直接使用这份数据即可
  • 内核启动后,UEFI的Boot Service(包括GetMemoryMap())会被终止,此时内核无法再调用这类接口,只能依赖引导加载器传递的信息

内容的提问来源于stack exchange,提问作者Shukai Ni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.11 15:04:51