1. 程式人生 > >UBOOT之分析編譯過程 make

UBOOT之分析編譯過程 make

開啟Makefile
在這裡插入圖片描述
117行的config.mk就是前面配置過程中生成的config.mk ,裡面定義了ARCH CPU BOARD SOC
在這裡插入圖片描述
165行是頂層目錄中的config.mk,根據上面四個變數的值確定編譯器、編譯選項等
在這裡插入圖片描述
而在Makefile中$(BOARD)=smdk2410
所以BOARDDIR=smdk2410
繼續看頂層目錄的.mk
在這裡插入圖片描述
展開就是sinclude /board/smdk2410/config.mk,在這個.mk檔案中定義了TEXT_BASE = 0x33F80000
在這裡插入圖片描述
LDSCRIPT是一個重要的引數,展開就是
LDSCRIPT := /board/smdk2410/u-boot.lds

在這裡插入圖片描述
展開就是
LDFLAGS += -Bstatic -T /board/smdk2410/u-boot.lds -Ttext 0x33F80000
接著Makefile看
在這裡插入圖片描述
發現第一個OBJS = cpu/$(CPU)/start.o
展開就是 OBJS = cpu/ arm920t/start.o
在這裡插入圖片描述
193-214指定了開發板平臺各個目錄和通用目錄下相應的庫
OBJS 和LIBS所代表的.o 、.a檔案就是U-Boot的構成
OBJS和LIBS按照自己的規則編譯生成.a .o檔案
先連結生成elf格式的uboot,最後轉換為uboot.bin、uboot-srec.
LDFLAGS確定了連結方式 -T /board/smdk2410/u-boot.lds -Ttext 0x33F80000 指定了程式的佈局、地址
u-boot.lds內容如下

在這裡插入圖片描述
cpu/arm920t/start.o被放在程式的最前面,所以uboot入口點在 cpu/arm920t/start.s
綜上,編譯流程:
在這裡插入圖片描述