015 JZ2440之U boot 二 配置

2021-09-30 00:23:33 字數 2726 閱讀 4825

本章開始我們要細分講解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)/mkconfigsrctree是當前目錄所以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...