【问题标题】:Why is 1MB of data sent to Bootloader in the start?为什么一开始会向 Bootloader 发送 1MB 的数据?
【发布时间】:2021-06-11 20:58:50
【问题描述】:

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

    ENTRY(start)

    SECTIONS {
    . = 1M;

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

    .text :
    {
        *(.text)
    }
}

【问题讨论】:

  • 它是一个引导加载程序,因此可能会为引导加载程序留出空间来加载要引导的内容。

标签: assembly x86 linker linker-scripts multiboot


【解决方案1】:

来自 GNU LD 手册:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2023-03-17
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多