Memory management bss不是最终ELF的一部分吗?
下面是链接器描述符文件,它是GNULD的输入,用于为嵌入式系统构建u-boot ELFMemory 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
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大小?