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 に答える