语法错误
回答
这里是我的链接脚本看起来像之前我搬到我的内核,以更高的一半:
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);
}
谢谢!这解决了语法错误,但正如我前面所说,它会引起不兼容错误 –
您能否粘贴错误?我还没有看到不兼容性错误。 – crunch
错误是**输入文件'build/loader.o'的i386体系结构与i386:x86-64输出**不兼容,我设法通过将'-melf_i386'作为链接器命令的附加参数来修复该错误,现在我正确启动我的内核!非常感谢。 –
尝试地址分配给部分是这样的:
ENTRY (loader)
OUTPUT ("kernel.bin")
SECTIONS
{
. = 0x100000;
.text:
ALIGN(0x1000)
{
*(.text*);
*(.rodata*);
}
.data:
ALIGN(0x1000)
{
*(.data*);
}
.bss:
ALIGN(0x1000)
{
*(.bss*);
}
}
你可以添加你收到你的问题的错误消息? – fuz
@FUZxxl它只是说** ld:linker.ld:8:语法错误** 没有什么可以帮助我猜 –
你可以试着在'.text'后面删除'addr'吗? – fuz