一段典型指令碼:(hello.lds)
entry(helloworld)
sections
. = align(4);
.data :
.bss :
}
----------------------------------
1、點號(.):
點號在sections命令裡稱為位置計數器,代表了當前位置。如上面的0x20008000表示**段的起始位置從這個值開始。
也可以不指定,如.data段和.bss段;代表緊挨著上面的段分布。如果一開始就不指定,則預設值為0。
2、輸出段(.text/.data/.bss):
各關鍵字代表了輸出段的段名,花括號內定義了各段對應的內容。段名可任意定義,輸出段的實際內容與段名無關,只與花括號內的具體內容有關。
如:.text,把列出的(*代表任意)輸入檔案的.text段合併成乙個.text(其中,start.o中的.text放在最前面);
該段的位址由定位器符號的值指定,即0x20008000;
3、align(n):
產生對齊的**或資料,很多體系結構對對齊的**或資料有嚴格的要求。
如 . = align(4)表示位置計數器向高位址方向取最近的4位元組的整數倍。
4、entry(symbol):
相等於-e,將符號symbol的值設定成入口位址(程序執行的第一條使用者空間的指令,在程序位址空間的位址)。
1、arm-linux-ld 命令列的 -e 選項;
2、連線指令碼的entry(symbol)命令;
3、如果定義了start符號,使用start符號值;
4、如果存在.text section,使用.text section的第一位元組的位置值;
5、使用值0;
-----------------------------------
arm-linux-ld -t hello.lds -o file.eld
ARM 鏈結配置 lds檔案學習
本文由jacky原創,來自 對於.lds檔案,它定義了整個程式編譯之後的連線過程,決定了乙個可執行程式的各個段的儲存位置。雖然現在我還沒怎麼用它,但感覺還是挺重要的,有必要了解一下。先看一下gnu官方 上對.lds檔案形式的完整描述 sections region phdr fill.secname...
Linux鏈結指令碼學習 lds
l一 概論 ld gnu的鏈結器.用來把一定量的目標檔案跟檔案檔案鏈結在一起,並重新定位它們的資料,鏈結符號引用.一般編譯乙個程式時,最後一步就是執行ld進行鏈結 每乙個鏈結都被乙個鏈結指令碼所控制,這個指令碼是用鏈結命令語言書寫的.二 鏈結指令碼 鏈結指令碼的乙個主要目的是描述輸入檔案中的各個段 ...
u boot中 lds鏈結指令碼檔案的分析
對於.lds檔案,它定義了整個程式編譯之後的連線過程,決定了乙個可執行程式的各個段的儲存位置。sections region phdr fill secname和contents是必須的,其他的都是可選的。下面挑幾個常用的看看 1 secname 段名 2 contents 決定哪些內容放在本段,可...