【问题标题】:x86 UEFI Boot: Is the conventional 1MiB padding from address 0 really required for UEFI?x86 UEFI 引导:UEFI 真的需要从地址 0 开始的传统 1MiB 填充吗?
【发布时间】:2021-08-31 11:13:20
【问题描述】:

我对使用 UEFI 的 x86_64 上的内核开发和引导过程比较陌生。许多通用操作系统开发资源建议将初始目标文件中的前 1 MiB 保留为空闲/未触及,因为存在“许多 I/O 映射的遗留功能,例如 VGA 帧缓冲区”。

这仅适用于旧版 BIOS 引导还是仍然适用于 UEFI?

链接描述文件示例:

ENTRY(start)

SECTIONS {
    /* According to https://intermezzos.github.io/book/first-edition/hello-world.html
     * there is lots of memory mapped I/O and 1MiB is a conventional padding (legacy?!)
     * TODO find out if this only is valid for legacy BIOS boot or also for UEFI!
     */
    . = 1M;

    .text :
    {
        *(.text)
    }

     .bss :
    {
      *(COMMON)
      *(.bss)
    }
}

【问题讨论】:

    标签: x86 boot bios uefi


    【解决方案1】:

    EFI 引导服务函数 GetMemoryMap 提供的内存映射标识所有已使用和可用的页面。调用 ExitBootServices 后,您应该可以随意使用任何可用的页面。

    在调用 ExitBootServices 之前,您应该调用 AllocatePool 或 AllocatePages 来获取内存。如果您特别想在第一个兆字节内分配内存,则可以使用 type = ALLOCATE_MAX_ADDRESS 和 address = 0xfffff 调用 AllocatePages。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 2016-08-27
      • 2018-04-29
      • 2016-11-11
      • 2020-01-19
      • 2020-10-11
      • 2011-08-28
      • 2016-12-08
      相关资源
      最近更新 更多