u boot中 lds鏈結指令碼檔案的分析

2021-06-06 13:48:39 字數 1004 閱讀 1030

對於.lds檔案,它定義了整個程式編譯之後的連線過程,決定了乙個可執行程式的各個段的儲存位置。

sections >region :phdr =fill

...}

secname和contents是必須的,其他的都是可選的。下面挑幾個常用的看看:

1、secname:段名

2、contents:決定哪些內容放在本段,可以是整個目標檔案,也可以是目標檔案中的某段(**段、資料段等)

結合u-boot.lds進行分析:

output_format("elf32­littlearm", "elf32­littlearm", "elf32­littlearm")

;指定輸出可執行檔案是elf格式,32位arm指令,小端

output_arch(arm)

;指定輸出可執行檔案的平台為arm

entry(_start)

;指定輸出可執行檔案的起始**段為_start.

sections

. = align(4)

.rodata : ;指定唯讀資料段

. = align(4);

.data : ;指定讀/寫資料段

. = align(4);

.got : ;指定got段, got段式是uboot自定義的乙個段, 非標準段

__u_boot_cmd_start = . ;把__u_boot_cmd_start賦值為當前位置, 即起始位置

.u_boot_cmd : ;指定u_boot_cmd段, uboot把所有的uboot命令放在該段.

__u_boot_cmd_end = .;把__u_boot_cmd_end賦值為當前位置,即結束位置

. = align(4);

__bss_start = .; 把__bss_start賦值為當前位置,即bss段的開始位置

.bss : ; 指定bss段

_end = .; 把_end賦值為當前位置,即bss段的結束位置

}

鏈結檔案lds

一段典型指令碼 hello.lds entry helloworld sections align 4 data bss 1 點號 點號在sections命令裡稱為位置計數器,代表了當前位置。如上面的0x20008000表示 段的起始位置從這個值開始。也可以不指定,如.data段和.bss段 代表緊...

對 lds連線指令碼檔案的分析

本文由jacky原創,來自http blog.chinaunix.net u1 58780 showart.php?id 462971 對於.lds檔案,它定義了整個程式編譯之後的連線過程,決定了乙個可執行程式的各個段的儲存位置。雖然現在我還沒怎麼用它,但感覺還是挺重要的,有必要了解一下。先看一下g...

對 lds連線指令碼檔案的分析

本文由jacky原創,來自 對於.lds檔案,它定義了整個程式編譯之後的連線過程,決定了乙個可執行程式的各個段的儲存位置。雖然現在我還沒怎麼用它,但感覺還是挺重要的,有必要了解一下。先看一下gnu官方 上 對.lds檔案形式的完整描述 sections region phdr fill.secnam...