为什么一开始有1MB的数据发送到Bootloader?

问题描述

我正在尝试制作我的第一个内核,我找到了有关它的教程,但无法理解为什么最初将这 1MB 数据发送到 Linker.ld 文件中的引导加载程序。我已经在互联网上搜索过,但找不到答案。如果可以,请帮帮我。 这是代码

    ENTRY(start)

    SECTIONS {
    . = 1M;

    .boot :
    {
        KEEP(*(.multiboot_header))
    }

    .text :
    {
        *(.text)
    }
}

解决方法

来自 GNU LD 手册:

特殊链接器变量点“.”始终包含当前输出位置计数器。 [...] 为 .符号将导致位置计数器移动。

因此 . = 1M; 在放置任何部分之前将当前位置计数器设置为 0x100000。

没有数据“发送”到引导加载程序。该行告诉链接器好像程序存在于地址 0x100000 处一样。