uboot主Makefile分析3
1、
(1)OBJREE:編譯出的.o檔案存放的目錄的根目錄。在預設編譯下,OBJTREE等於當前目錄;在O=xx編譯下,OBJTREE就等於我們設定的那個輸出目錄.
(2)SRCTREE:原始碼目錄,其實就是原始碼的根目錄,也就是當前目錄。
SRCTREE := $(CURDIR) #CURDIR是make的內嵌變數,自動設定為當前目錄。
結果:在預設編譯下,OBJTREE和SRCTREE相等;在O=xx這種編譯下OBJTREE和SRCTREE不相等。Makefile中定義這兩個變數,其實就是為了記錄編譯後的.o檔案往哪裡放,就是為了實現O=xx的這種編譯方式的。
2、MKCONFIG(Makefile的101行)
(1)Makefile中定義的一個變數(在這裡定義,在後面),它的值就是我們原始碼目錄下面的mkconfig。這個mkconfig是一個指令碼,這個指令碼就是uboot配置階段的配置指令碼。
3、ARCH CROSS_COMPILE
(1)接下來有2個很重要的環境變數。一個是ARCH,上面匯出來的,值來自於我們的配置過程,它的值會影響後面的CROSS_COMPILE環境變數的值。ARCH的意義是定義當前編譯的目標CPU的架構。
(2)CROSS_COMPILE是定義交叉編譯工具鏈的字首的。定義這些字首是為了後面用(用字首加上字尾來定義編譯過程中用到的各種工具鏈中的工具)我們把字首和字尾分開還有一個原因就是:在不同CPU架構上的交叉編譯工具鏈,只是字首不一樣,字尾是一樣的。
(3)CROSS_COMPILE在136-182行來確定。CROSS_COMPILE是由ARCH來決定的,如果ARCH=arm,這個設定量不一定是全路徑,也可以是相對路徑。(如果已經把交叉編譯工具鏈匯出到環境變數中來,並設定了符號連結。CROSS_COMPILE = arm-linux-就可以)
(4)實際操作中也可以在Makefile中直接修改CROSS_COMPILE的值,也可以通過make CROSS_COMPILE = xxxx來設定,而且編譯時傳參的方法可以覆蓋Makefile裡面的設定。
4、include $(obj)include/config.mk(133行)
(1)include/config.mk不是原始碼自帶的(你在沒有編譯過得目錄下面找不到這個檔案的),要在配置過程(make x210_sd_config)中才會生成這個檔案。這個檔案是在配置過程中自動生成的。
(2)x210在iNand情況下配置生成的config.mk內容為:
ARCH = arm
CPU = s5pc11x
BOARD = x210
VENDOR = samsung
SOC = s5pc110