开头部分
文件格式、输入架构、ENTRY() 用来指明整个程序的入口
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
ENTRY(_start)
指定程序链接地址有两种方法:
- Makefile中的ld命令的flags用
-Ttext [地址]
来指定 - 在链接脚本SECTIONS开头用
.=[地址]
来指定
在既在Makefile中使用-Ttext [地址],同时在lds链接脚本写明.=[地址]时,编译器会以Makefile中的-Ttext [地址]指定的为准
SECTIONS部分
SECTIONS
{
. = 0x00000000;
. = ALIGN(4); //设定4字节对齐,防止传过来的地址未对齐
.text :
{
/*代码段必须要注意文件的排列顺序,前面是uboot的BL1
部分,必须包含初始化,跳转的.o文件*/
arch/arm/cpu/arm1176/start.o (.text)
arch/arm/cpu/arm1176/s3c64xx/cpu_init.o (.text)
*(.text)
}
. = ALIGN(4);
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4);
.data : { *(.data) }
. = ALIGN(4);
.got : { *(.got) }
__u_boot_cmd_start = .;
.u_boot_cmd : { *(.u_boot_cmd) }
__u_boot_cmd_end = .;
. = ALIGN(4);
.mmudata : { *(.mmudata) }
. = ALIGN(4);
__bss_start = .;
.bss : { *(.bss) . = ALIGN(4); }
_end = .;
}
其中.text .data .rodata .bss是编译工具自带的段,__u_boot_cmd_start .mmudata等是uboot自带的段,对于uboot的命令操作等功能有重要作用