本章開始我們要細分講解u-boot的啟動流程和具體結構分析。
本章我們主要講解在編譯之前的配置:
首先我們拿到u-boot原始碼後,解壓得到如下圖結構:
這裡我們先不考慮補丁檔案。只看原始碼中的內容。
拿到後再readme檔案中我們可以看到。
要編譯u_boot先配置make _conifg,然後再make。
要看乙個工程先看這個工程的makefile, u_boot也不例外。
我們先從頂層的makefile來分析。
具體分析一下:
objtree := $(if $(build_dir),$(build_dir),$(curdir))
就是$(build_dir)不存在的時候objtree=$(curdir),
如果$(build_dir)存在, 那麼objtree=$(build_dir)
這裡由前面可以知道$(build_dir)=null,所以objtree=$(curdir)。
87行srctree := $(curdir), 所以srctree=objtree
92行mkconfig := $(srctree)/mkconfig,srctree是當前目錄所以mkconfig = mkconfig。
這個mkconfig也就是當前目錄下面的mkconfig檔案
在makefile的前面我們看到objtree、srctree、mkconifg都定好了。
再往下看
打完補丁的u_boot會有100ask24x0_config這個選項:
我們分析一下這句話。(功能主要是用來確定配置引數)。
@$(mkconfig) = mkconfig
$(@:_config=) = (100ask24x0_config = ) 即是把_config = 空 所以就是100ask24x0
那麼最後就變成
mkconfig 100ask24x0 arm arm920t 100ask24x0 null s3c24x0
他們的引數編號分別是:
然後我們再分析一下上面找到的mkconfig的檔案
第一部分:
由於我們引數中沒有case的所有情況($1沒有-- -a -n *),所以執行下面這句話。
[ "$" ] || board_name="$1" 又因為board_name為空,
所以board_name="$1" 即 board_name=100ask24x0
緊接著$#是表示引數總數。我們的引數是6個,不小於4也不大於6所以接著往下走。
由上面分析得知,srctree=objtree,所以執行else部分:
程式進入到當前目錄的include的子目錄下,
47行 然後刪除asm檔案,
48行 建立asm-arm的連線指令碼
51行 刪除asm-arm目錄下的arc**件夾
53行 $6 不等於 null所以執行56行
56行 lnprefix為空實際上就是建立arch-s3c24x0目錄下的asm-arm/proc連線指令碼
59行 條件成立
60行 刪除asm-arm/proc的連線指令碼
61行 重新建立asm-arm/proc指向proc-armv目錄
接著第三部分
67~73行 arch = arm
cpu = arm920t
board = 100ask24x0
soc = s3c24x0
82行 建立config.**件(config.h位於include目錄下)
85行 把#include 新增到config.**件中。
到這裡我們的配置檔案就完成了。
這裡我們總結一下:
編譯JZ2440開發板的u boot
以前我在大四的時候準備學習linux,然後就去買了塊cortex a8架構的開發板,我當時選的是qt210,可惜哪會完全沒有基礎,根本不能搞定a8強大的資料手冊,而且當時連uboot也不知道,呵呵,當時勇氣真大,一來就買a8板,後面的前景也讓我嘗到了苦頭,對著一塊在當時看來何等高階的板子我壓根不知道...
uboot配置分析(jz2440開發板)
yonzuge學習總結 uboot配置分析 解壓tar xvf u boot 1.1.6.tar.bz2 打補丁patch p1 配置make 100ask24x0 config 編譯make 1 檢視makefile 1.0100ask24x0 config unconfig mkconfig c...
JZ2440 Uboot 啟動過程分析續
1 uboot的第乙個啟動檔案為 cpu arm920t start.o 2 連線指令碼 board 100ask24x0 u boot.lds 連線位址為0x33f80000 下面開始分析start.s globl start start b reset 一 首先跳轉到 reset 1 首先將mc...