Memory management bss不是最终ELF的一部分吗?

Memory management bss不是最终ELF的一部分吗?,memory-management,linker,loader,u-boot,Memory Management,Linker,Loader,U Boot,下面是链接器描述符文件,它是GNULD的输入,用于为嵌入式系统构建u-boot ELF OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") OUTPUT_ARCH(arm) ENTRY(_start) SECTIONS { . = 0x00000000; . = ALIGN(4); .text : { arch/arm/cpu/armv7/start.o

下面是链接器描述符文件,它是GNULD的输入,用于为嵌入式系统构建u-boot ELF

OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS
{
    . = 0x00000000;

    . = ALIGN(4);
    .text   :
    {
        arch/arm/cpu/armv7/start.o  (.text)
        *(.text)
    }

    . = ALIGN(4);
    .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }

    . = ALIGN(4);
    .data : {
        *(.data)
    }

    . = ALIGN(4);

    . = .;
    __u_boot_cmd_start = .;
    .u_boot_cmd : { *(.u_boot_cmd) }
    __u_boot_cmd_end = .;

    . = CONFIG_SYS_NAND_U_BOOT_SIZE + CONFIG_SYS_TEXT_BASE;
    . = ALIGN(4);

    .rel.dyn : {
        __rel_dyn_start = .;
        *(.rel*)
        __rel_dyn_end = .;
    }

    .dynsym : {
        __dynsym_start = .;
        *(.dynsym)
    }

    .bss : {
        __bss_start = .;
        *(.bss)
         . = ALIGN(4);
        _end = .;
    }

    /DISCARD/ : { *(.dynstr*) }
    /DISCARD/ : { *(.dynamic*) }
    /DISCARD/ : { *(.plt*) }
    /DISCARD/ : { *(.interp*) }
    /DISCARD/ : { *(.gnu*) }
}
宏CONFIG_SYS_and__BOOT_SIZE是U-BOOT最终大小的一个选项,CONFIG_SYS_TEXT_BASE保存文本的基址,现在我的疑问是为什么.bss被放置在ELF允许的大小之外

它是从精灵那里弄出来的,不是!当我完成了精灵的objdump时,它就出现在里面了,请看下面的图片


你为什么关心小精灵?你打算如何使用U-Boot?通常执行的是.bin映像文件。是的,您是对的,但我关心的是在LDS文件中,LDS文件描述了输出ELF文件,该文件的哪个部分位于文件的哪个位置,但为什么LDS描述的.bss超出ELF大小?