uboot主Makefile分析
version表示主版本號? ? patchlevel表示補丁版本號? ? sublevel表示次版本號? ? extreversion表示附加版本信息
U_BOOT_VERSION=1.3.4表示最終的版本號
$(obj)前面沒有定義,并不表示obj為空。在makefile中,=表示整個文件中最后賦值的結果,因此obj具體值還要取決于后面的程序。總之,VERSION_FILE表示一個文件。
?
?
?
uname -m表示獲取主機cpu型號,sed -e表示可以在同一行里可以執行多條sed命令,sed s/i.86/i386/ string表示將string中出現的i.86替換成i386。
uname -s表示獲取主機操作系統,tr '[:upper:]' '[:lower:]'表示將所有大寫字母替換成小寫字母。sed -e 's/\(cygwin\).*/cygwin/')表示將cygwin.*都替換成cygwin。
最終,導出環境變量為HOSTARCH=x86_64,HOSTOS=linux。
?
?
編譯時make -s,-s會作為MAKEFLAGS變量自動傳給makefile。如果MAKEFLAGS中包含字母s,則XECHO=echo執行非靜默編譯;否則,執行靜默編譯。
?
?
如果編譯時,命令中加入了O選項,即make O=/tmp,則將BUILD_DIR=/tmp。在實際操作中,可以有兩種賦值BUILD_DIR的方式,第一種是export BUILD_DIR=/tmp/build然后make,第二種是make O=/tmp/build all。從代碼中,可以明確地知道,O選項的優先級更高。
如果BUILD_DIR被定義,則創建BUILD_DIR文件夾,并獲取完整路徑。
導出TOPDIR SRCTREE OBJTREE?MKCONFIG?REMOTE_BUILD?obj src等一系列環境變量。
其中,TOPDIR=SRCTREE=src;OBJTREE=obj;如果SRCTREE和OBJTREE不相等,則REMOTE_BUILD=1。
MKCONFIG?:= $(SRCTREE)/mkconfig。
于是乎,之前遺留下來的問題解決了,VERSION_FILE的表示的文件已經確定下來。
?
?
include表示,執行include/config.mk文件。最終導出ARCH CPU BOARD VENDOR SOC這幾個環境變量。include/config.mk文件并不是源碼自帶的,而是配置過程中生成的。
?
?
我們在編譯uboot之前會先進行配置,比如我手里的開發板是x210,在編譯之前會先使用make x210_sd_config進行配置。
前面已經將MKCONFIG作為環境變量導出,MKCONFIG=$(SRCTREE)/mkconfig,即當前目錄下的mkconfig。然后將x210_sd_config中的_config替換成空,最終會得到mkconfig?x210_sd?arm s5pc11x x210 samsung s5pc110。
首先,運行unconfig取消先前配置,因此在每次配置時候不需要特意的進行make unconfig。
其次,運行mkconfig?x210_sd?arm s5pc11x x210 samsung s5pc110,進行相關配置。
最后,運行echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk,進行重定位地址配置。
?
?
?
?
下面,我們先來看下主目錄下的mkconfig文件
從中可以看出,這段程序什么也沒有干。
?
?
最終,BOARD_NAME=x210_sd,并打印出Configuring for x210_sd board...
?
?
首先將當前目錄切換到include中,然后建立軟鏈接asm -> asm-arm。
建立軟鏈接asm-arm/arch->asm-arm/arch-s5pc11x。
建立軟鏈接regs.h->s5pc110.h、asm-arm/arch->asm-arm/arch-s5pc11x
建立軟鏈接asm-arm/proc->asm-arm/proc-armv
?
?
將如下信息寫入include/config.mk
ARCH=arm?? ?
CPU = s5pc11x?? ?
BOARD = x210?? ?
VENDOR = samsung?? ?
SOC = s5pc110
?
?
創建include/config.h,并向其中寫入#include <configs/x210_sd.h>
?
?
?
到此,config.mk已經執行完畢
最終導出的環境變量為ARCH=arm、CPU=s5pc11x、BOARD=x210、VENDOR=samsung、SOC=s5pc110
?
?
......
定義交叉編譯工具鏈的前綴,并導出交叉編譯工具鏈的前綴。
?
?
加載主目錄下的config.mk文件,這個文件中包含了很多的配置,包括板子的一些配置和編譯器相關配置。這個展開內容非常多,也不是很有必要深入分析,不是太影響uboot的移植。
?
?
再往后看,都是在添加目標文件和庫文件
?
?
一直往后看,開始看到編譯流程,我們只要搞清楚配置的過程,編譯的流程不是太需要關心
?
至此,主Makefile和mkconfig腳本已經大致結束了。
總結
以上是生活随笔為你收集整理的uboot主Makefile分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CanFestival移植到STM32F
- 下一篇: HTML鼠标点击文字语音播放,10款jQ