我一直在尝试从这个(https://github.com/0xAX/linux-insides/blob/master/Booting/linux-bootstrap-1.md)教程中学习Linux启动过程,并且很早就遇到了以下代码片段。
SECTIONS {
_ROMTOP = 0xfffffff0;
. = _ROMTOP;
.reset . : {
*(.reset)
. = 15 ;
BYTE(0x00);
}
}
我以前没有处理过很多ASM,但我从来没有见过这样的东西。它有什么作用?花括号是什么意思?
答案 0 :(得分:2)
这不是汇编,是链接描述文件的一部分。该教程真的不应该表明,它并不真正相关,只是令人困惑。
他们正在使用它作为coreboot
项目的一个例子,它是一个开源BIOS替代品。他们试图说明第一条指令是如何在地址0xfffffff0
处执行的。链接描述文件片段基本上指示链接器组合从该地址开始的所有目标文件中的.reset
部分。此部分也填充为16个字节,并定义了符号_ROMTOP
。该部分的内容来自您省略的汇编片段:
.section ".reset"
.code16
.globl reset_vector
reset_vector:
.byte 0xe9
.int _start - ( . + 2 )
正如您所看到的,此代码放在名为.reset
的部分中,并假设这是整个内容,链接器脚本将确保它最终位于正确的地址。这是一个手动编码的近跳转到实际入口点,名为_start
。