链接描述文件中的语法错误

Syntax error in linker script

我在第 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

尝试将地址分配给这样的部分:

ENTRY (loader)
OUTPUT ("kernel.bin")

SECTIONS
{
        . = 0x100000;
        .text: 
        ALIGN(0x1000)
        {
            *(.text*);
            *(.rodata*);
        }

        .data:
        ALIGN(0x1000)
        {
            *(.data*);
        }

        .bss:
        ALIGN(0x1000)
        {
            *(.bss*);
        }
}

这是我的链接描述文件在我将内核移至上半部分之前的样子:

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”和冒号之间缺少 space。对于另一个项目,我曾给我类似的错误。 如果您想指定每个部分的位置,请这样做:

.text : AT(ADDR(.text) - 0xC0000000)
    {
        *(.text)
        . = ALIGN(4096);
    }