該連接文件在AT91Bootstrap1.16\Bootstrap-v1.16目錄下
elf32-littlearm.lds
連接腳本文件主要用於規定如何把輸入文件內的section放入輸出文件內,並控制輸出文件內各部分在程序地址空間內的佈局
OUTPUT_FORMAT("elf32-littlearm","elf32-littlearm", "elf32-littlearm")
//指定輸出可執行文件是elf格式,32位ARM指令,小端
OUTPUT_ARCH(arm)
//指定輸出可執行文件的平臺爲ARM
ENTRY(reset)
//將符號reset的值設成入口地址, 指定輸出可執行文件的起始代碼段爲reset
SECTIONS //程序具體在flash中分配格式
{
//默認從0x0位置開始分配空間
. = ALIGN(4);//以下按照4字節對齊 有對齊約束 //指定代碼段
.text : { //代碼段將所有的輸入文件.text sectin合併成一個.text section
//該段的地址由定位器符號的指定,即0x0
_stext= .; //把_stext賦值爲當前位置,即text段的開始位置
*(.text) //所有輸入文件的.text section
*(.rodata) /* read-only data (constants) */
*(.rodata*)
. = ALIGN(4); //以下按照4字節對齊 有對齊約束
_etext = . ; //把_etext賦值爲當前位置,即text段的結束位置
}
/* collectall initialized .data sections */
.data : AT( ADDR (.text) + SIZEOF (.text) ) { //已初始化數據段DATA
_sdata= .; //把_sdata賦值爲當前位置,即data段的開始位置
*(.vectors)
*(.data)
_edata= .; //把_sdata賦值爲當前位置,即data段的結束位置
}
/* collectall uninitialized .bss sections */
.bss(NOLOAD) : { 未初始化數據段BSS
. =ALIGN(4);
_sbss= .; //把_sbss賦值爲當前位置,即bss段的開始位置
*(.bss)
_ebss= .; //把_ebss賦值爲當前位置,即bss段的結束位置
}
}
end = .; /* define aglobal symbol marking the end of application */定義一個全局符號,標記的應用程序的最終
該鏈接文件需要詳細分析出程序代碼在Flash中的具體的存儲分配結構圖。具體需要編譯出dis文件???