uboot移植之配置編譯過程詳解3
/**************************************************************************************
2018.10下旬
針對三星官方為210移植過的uboot和kernel內Makefile的分析
/*****************************************************************************************
重點:CROSS_COMPILE,環境變數(路徑)+交叉編譯工具鏈的字首 (7)
1.***uboot的版本配置資訊:
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
2.***在根目錄下的include內建立了一個巨集。編譯之後生成。
VERSION_FILE = $(obj)include/version_autogenerated.h
3.***環境變數的設定
HOSTARCH := $(shell uname -m | \
............
HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
sed -e 's/\(cygwin\).*/cygwin/')
export HOSTARCH
4.***實現靜默編譯
ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif
5.***三個重要的引數:OBJTREE,SRCTREE,TOPDIR
OBJTREE:編譯之後.o檔案的存放位置。
在預設編輯的情況下OBJTREE等於當前目錄,在o=xx編譯下,OBJTREE是我們設定的輸出目錄
SRCTREE:原始碼目錄,也就是uboot的根目錄目錄,當前目錄。
TOPDIR:被賦值於SRCTREE,是uboot的根目錄目錄,當前目錄。
6.***兩個重要的環境變數:
ARCH:當前編譯目標的CPU架構。 126
CROSS_COMPILE:交叉編譯工具鏈的字首,由於不同CPU架構的交叉編譯工具鏈之間只是字首的不同,將字首用環境變數單獨設定,保證了uboot的可移植性。 136
CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-
=後面就是交叉編譯工具鏈的儲存位置。
7.***5個與板子資訊有關的環境變數:
ARCH CPU BOARD VENDOR SOC
具體的定義在smdkv210onenand_config : unconfig 2597
8.***CROSS_COMPILE定義交叉編譯工具鏈的字首。在不停的CPU架構下的交叉編譯工具鏈字首都不相同
字尾一樣,將前後綴分開可以實現移植的目的。
9.***include $(TOPDIR)/config.mk (169)
引用了主目錄下一個config.mk資料夾,資料夾內具體的說明了其應用。
其中以下定義了一些交叉編譯工具鏈:
在config.mk中有一個TEXT_BASE,是我們將來整個uboot連結時指定的連結地址
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
LDR = $(CROSS_COMPILE)ldr
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB = $(CROSS_COMPILE)RANLIB
這個檔案就是用來指導整個uboot的編譯過程,這個檔案的內容其實就是很多的CONFIG開頭的巨集,這些巨集會影響我們uboot的編譯過程。
這個檔案產生於原始碼根目錄下的include/configs/xxx.h標頭檔案。此config目錄下包括了各個版本開發板的全部標頭檔案。在移植的時候,只要是將對應的標頭檔案留下,並作出相應的修改。這些配置是我們移植的關鍵所在。
編譯連結的一個指令碼連結在根目錄下的u-boot.lds
config.mk內的TEXT_BASE是整個uboot連結時指定的連結地址。而這個地址是一個虛擬地址對映,具體的地址取決於uboot中的虛擬地址對映關係。
***整個Makefile的第一個主目標:
291行:all: $(ALL)
smdkc110n_mtd_config : unconfig
即我們進行編譯時,make只是編譯其中的個別目標。而這個目標在2558行有著具體的解釋。 而這個目標在2558行有著具體的解釋。同時他也依賴於前面的unconfig這個目標,使得uboot可以實現重複多次編譯。