1

我一直在尝试从这个( https://github.com/0xAX/linux-insides/blob/master/Booting/linux-bootstrap-1.md )教程中了解 Linux 启动过程,而且很早就开始了我遇到了以下代码片段。

SECTIONS {
    _ROMTOP = 0xfffffff0;
    . = _ROMTOP;
    .reset . : {
        *(.reset)
        . = 15 ;
        BYTE(0x00);
    }
}

我以前没有处理过很多 ASM,但我从未见过这样的事情。它有什么作用?花括号是什么意思?

4

1 回答 1

2

那不是汇编,那是链接描述文件的一部分。该教程真的不应该显示,它不是真正相关的,只是令人困惑。

他们将其用作coreboot项目中的示例,这是一个开源 BIOS 替代品。他们试图说明执行的第一条指令是如何在 address 处执行的0xfffffff0。链接器脚本片段基本上指示链接器组合.reset从该地址开始的所有目标文件的部分。该部分也被填充到 16 个字节,并定义了符号_ROMTOP。该部分的内容来自您省略的程序集片段:

    .section ".reset"
    .code16
.globl  reset_vector
reset_vector:
    .byte  0xe9
    .int   _start - ( . + 2 )

如您所见,此代码被放置在一个名为的部分.reset中,并假设这是全部内容,链接描述文件将确保它以正确的地址结束。这是一个手动编码的跳转到实际入口点的附近,名为_start.

于 2015-02-11T00:43:08.517 回答