預備知識
可執行檔案由許多鏈結在一起的物件檔案組成。物件檔案有許多節,如文字、資料、init 資料、bss等。這些物件檔案都是由乙個稱為 鏈結器指令碼(*lds)的檔案鏈結並裝入的。這個鏈結器指令碼的功能是將輸入物件檔案的各節對映到輸出檔案中;換句話說,它將所有輸入物件檔案都鏈結到單一的可執行檔案中,將該可執行檔案的各節裝入到指定位址處。 因此在分析u-boot**時,首先應關注的是u-boot.lds檔案。
路徑: $(u-boot_src_root)/board/$(board_name)
u-boot啟動過程分析
u-boot的
啟動過程可以分為兩個階段,兩個階段分別完成如下功能:(1
)第一階段的功能
ø 硬體裝置初始化
ø 載入
u-boot
第二階段**到
ram空間
ø 設定好棧
ø 跳轉到第二階段**入口(2
)第二階段的功能
ø 初始化本階段使用的硬體裝置
ø 檢測系統記憶體對映
ø 將核心從
flash
讀取到ram
中ø 為核心設定啟動引數
第一階段對應的檔案是
start.s
和lowlevel_init.s
。u-boot
啟動第一階段流程如下:
首先分析u-boot.lds檔案
/*
* output_format(default, big, little),在鏈結的時候,如果使用了-eb的命令列引數,則使用這裡的big
* 引數指定的位元組序,如果使用了-el;的命令列引數,則使用這裡的little引數指定的位元組序,如果沒有使用
* 任何命令列引數,則使用這裡的default引數指定的位元組序。
* 由$(src_root)/board/samsung/smdk6410/u-boot.lds中的定義可見,不管在鏈結的時候使用了何種命令列引數,
* 輸出的目標檔案都是使用elf32-littlearm方式的位元組序。
*/output_format("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
/*output_format("elf32-arm", "elf32-arm", "elf32-arm")*/
/*以上語句是指定輸出可執行檔案是elf格式,32位arm指令,小端 */
/*指定輸出可執行檔案的平台為arm*/
output_arch(arm)
/*指定輸出可執行檔案的起始**段為_start.*/
entry(_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);
.mmudata :
. = align(4);
__bss_start = .; /*把__bss_start賦值為當前位置,即bss段的開始位置*/
.bss : /*指定bss段 */
_end = .; /*把_end賦值為當前位置,即bss段的結束位置 */
}
由u-boot.lds檔案可知:第乙個鏈結的是start.o檔案,因此u-boot.bin的入口**在start.o中,其源**為start.s,u-boot.bin執行的入口點為entry(_start)。
一 物件模型
在ruby程式中,物件僅僅是其大世界的乙個公民而已,除了物件還有其他語言構件,比如類 class 模組 module 以及例項變數 imstance variable 等,元程式設計操控的就是這些語言構件。所有語言構件存在於其中的系統稱為物件模型,它是ruby的靈魂。1 物件由一組例項變數和乙個類的...
物件導向(一) 物件屬性
物件屬性型別 每個物件都是基於乙個引用型別建立的 1.資料屬性 2.訪問器屬性 4個特性 1.configurable 能否delete屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性改為訪問器屬性 2.enumerable 能否用for in迴圈返回屬性 3.writable 能否修改屬性的值...
物件導向(一) 物件屬性
物件屬性型別 每個物件都是基於乙個引用型別建立的 1.資料屬性 2.訪問器屬性 4個特性 1.configurable 能否delete屬性從而重新定義屬性 能否修改屬性的特性 能否把屬性改為訪問器屬性 2.enumerable 能否用for in迴圈返回屬性 3.writable 能否修改屬性的值...