-
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm") //指定输出可执行文件是elf格式,32位ARM指令,小端
-
OUTPUT_ARCH(arm) //指定输出可执行文件的平台为ARM
-
ENTRY(_start) //指定函数入口点为_start。cpu/arm920t/start.S中定义
-
SECTIONS
-
{
-
. = 0x00000000; //指定可执行image文件的全局入口点,通常这个地址都放在ROM(flash)0x0位置。必须使编译器知道这个地址,通常都是修改此处来完成
-
-
. = ALIGN(4); //代码以4字节对齐
-
.text : //代码段
-
{
-
*(.__image_copy_start) // 在 System.map 中 00000000 T __image_copy_start 00000000 T _start, 可见 __image_copy_start 等同于 _start
-
CPUDIR/start.o (.text*) //代码段的第一个代码部分
-
*(.text*) //其它代码部分
-
}
-
-
. = ALIGN(4);
-
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) } //指定只读数据段
-
-
. = ALIGN(4);
-
.data : { //指定读/写数据段
-
*(.data*)
-
}
-
-
. = ALIGN(4);
-
-
. = .;
-
-
. = ALIGN(4);
-
.u_boot_list : { //对应原来的 U_BOOT_CMD 对于那个的段.
-
KEEP(*(SORT(.u_boot_list*)));
-
}
-
-
. = ALIGN(4);
/*
* 在 System.map 中
0006f52c D _u_boot_list_2_env_clbk_2_flags
0006f534 D _u_boot_list_2_env_clbk_2_loadaddr
0006f53c B __bss_base
0006f53c B __bss_start
0006f53c B monitor_flash_len
0006f53c D __image_copy_end
0006f53c D __rel_dyn_start
*/
-
.image_copy_end :
-
{
-
*(.__image_copy_end)
-
}
-
-
.rel_dyn_start : //0006f53c D __rel_dyn_start
-
{
-
*(.__rel_dyn_start)
-
}
-
-
.rel.dyn : {
-
*(.rel*) //.rel段落保存了相对跳转的地址和相对跳转的类型
-
}
-
-
.rel_dyn_end : //00078874 R __rel_dyn_end
-
{
-
*(.__rel_dyn_end)
-
}
-
-
_end = .; //00078874 A _end
-
-
/*
-
* Deprecated: this MMU section is used by pxa at present but
-
* should not be used by new boards/CPUs.
-
*/
-
. = ALIGN(4096);
-
.mmutable : {
-
*(.mmutable)
-
}
-
-
/*
-
* Compiler-generated __bss_start and __bss_end, see arch/arm/lib/bss.c
-
* __bss_base and __bss_limit are for linker only (overlay ordering)
-
*/
-
//保存了未初始化的全局变量的内容
-
.bss_start __rel_dyn_start (OVERLAY) : { //0006f53c B __bss_start 0006f53c D __rel_dyn_start 0006f53c D __image_copy_end
-
KEEP(*(.__bss_start));
-
__bss_base = .;
-
}
-
-
.bss __bss_base (OVERLAY) : { //0006f53c B __bss_base
-
*(.bss*)
-
. = ALIGN(4);
-
__bss_limit = .; //000bd6a0 B __bss_limi
-
}
-
-
.bss_end __bss_limit (OVERLAY) : {
-
KEEP(*(.__bss_end)); //000bd6a0 B __bss_end
-
}
-
-
/DISCARD/ : { *(.dynsym) }
-
/DISCARD/ : { *(.dynstr*) }
-
/DISCARD/ : { *(.dynamic*) }
-
/DISCARD/ : { *(.plt*) }
-
/DISCARD/ : { *(.interp*) }
-
/DISCARD/ : { *(.gnu*) }
-
}