*
指定輸出可執行文件是elf格式,
32位ARM指令,小端
*/
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/* 指定輸出文件的平臺體系是ARM */
OUTPUT_ARCH(arm)
/*指定可執行映像文件的起始段的段名是_start*/
ENTRY(_start)
SECTIONS
{
/*
指定可執行image文件的全局入口點,
通常這個地址都放在ROM(flash)0x0位置。
必須使編譯器知道這個地址,
通常都是修改此處來完成
*/
/* 起始地址爲0x00000000 */
. = 0x00000000;
/*4字節對齊*/
. = ALIGN(4);
/* 代碼段*/
.text :
{
/* 代碼段第一部分代碼*/
arch/arm/cpu/arm1176/start.o (.text)
/*其餘代碼段*/
*(.text)
}
. = ALIGN(4);
/*
只讀數據段,
所有的只讀數據段都放在這個位置
*/
.rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
. = ALIGN(4);
/* 可讀寫數據段,
所有的可讀寫數據段都放在這裏*/
.data : { *(.data) }
. = ALIGN(4);
/*指定got段,
got段式是uboot自定義的一個段,
非標準段*/
.got : { *(.got) }
/*
.=. 前一個表示當前段,
後一個點表示當前地址,
根據編譯結果來分配地址,
比寫死地址要靈活
*/
. = .;
/*把__u_boot_cmd_start賦值爲當前位置,
即起始位置*/
__u_boot_cmd_start = .;
/* u_boot_cmd段,
所有的u-boot命令相關的定義都放在這個位置,
因爲每個命令定義等長,
所以只要以__u_boot_cmd_start
爲起始地址進行查找就可以
很快查找到某一個命令的定義,
並依據定義的命令指針調用
相應的函數進行處理用戶的任務*/
.u_boot_cmd : { *(.u_boot_cmd) }
/*u_boot_cmd段結束位置,
由此可以看出,
這段空間的長度並沒有嚴格限制,
用戶可以添加一些u-boot的命令,
最終都會在連接是存放在這個位置。*/
__u_boot_cmd_end = .;
. = ALIGN(4);
/*把__bss_start賦值爲當前位置,
即bss段的開始位置*/
__bss_start = .;
/*指定bss段,
這裏NOLOAD的意思是這段不需裝載,
僅在執行域中纔會有這段*/
.bss (NOLOAD) : { *(.bss) . = ALIGN(4); }
/*把_end賦值爲當前位置,即bss段的結束位置*/
_end = .;