0

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

    ENTRY(start)

    SECTIONS {
    . = 1M;

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

    .text :
    {
        *(.text)
    }
}
4

1 回答 1

3

来自 GNU LD 手册:

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

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

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

于 2021-03-14T14:44:09.680 回答