AT91Bootstrap1.16源碼中連接腳本文件(elf32-littlearm.lds)分析

該連接文件在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文件???

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章