我在第8行有一个语法错误 我已阅读有关语法的GNU docs并设法解决语法错误但遇到了不兼容问题 这是我的剧本:
ENTRY (loader)
OUTPUT ("kernel.bin")
addr = 0x100000;
SECTIONS
{
.text addr:
ALIGN(0x1000)
{
*(.text*);
*(.rodata*);
}
.data:
ALIGN(0x1000)
{
*(.data*);
}
.bss:
ALIGN(0x1000)
{
*(.bss*);
}
}
请原谅我,因为我只想尝试使用Hello World样本启动OSDeving
答案 0 :(得分:1)
在将内核移动到上半部分之前,这是我的链接器脚本的样子:
OUTPUT_FORMAT("elf32-i386","elf32-i386","elf32-i386")
OUTPUT_ARCH(i386)
ENTRY(entry)
SECTIONS
{
. = 0x00100000;
start = .;
.text :
{
*(.text)
. = ALIGN(4096);
}
.data :
{
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
*(.bss)
*(stack_bottom)
*(stack_top)
. = ALIGN(4096);
}
end = .;
kernel_end = .;
}
我认为问题是“。text”和冒号之间缺乏空间。我曾经给过我一个不同项目的错误。 如果您想指定每个部分的位置,请执行以下操作:
.text : AT(ADDR(.text) - 0xC0000000)
{
*(.text)
. = ALIGN(4096);
}
答案 1 :(得分:0)
尝试为这样的部分分配地址:
ENTRY (loader)
OUTPUT ("kernel.bin")
SECTIONS
{
. = 0x100000;
.text:
ALIGN(0x1000)
{
*(.text*);
*(.rodata*);
}
.data:
ALIGN(0x1000)
{
*(.data*);
}
.bss:
ALIGN(0x1000)
{
*(.bss*);
}
}