開頭部分
文件格式、輸入架構、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的命令操作等功能有重要作用