uboot學習 配置過程分析

2021-07-22 18:59:42 字數 3395 閱讀 6820

一、uboot的功能分析

結合uboot-1.1.16版本說明uboot的配置過程。

二、uboot的配置、編譯和鏈結過程分析(結合頂層makefile)

編譯乙個可用的uboot.bin檔案一般經過以下步驟:首先是配置,make smdk2410_config,然後是make all完成編譯,最後生成的uboot.bin。既然是用的make命令,那就一定離不了uboot頂層目錄的makefile檔案,因此下面就著重看看這個makefile檔案裡到底幹了什麼?

執行make smdk2410_config實際執行的是makefile的smdk2410_config這個目標,如下:

smdk2410_config : 

unconfig

@$(mkconfig) $(@:_config=) arm arm920t smdk2410 null s3c24x0

說明:$(@:_config=) 表示將目標$@中的_config替換(=)為空,替換後的結果為smdk2410;

@$(mkconfig),檢視頂層makefile發現 mkconfig := $(srctree)/mkconfig,也就是

mkconfig := mkconfig

所以上面的這條目標:依賴解析後如下:

smdk2410_config : 

unconfig

mkconfig smdk2410

arm arm920t smdk2410 null s3c24x0

$0          $1          $2       $3            $4          $5        $6

因此,上面這條的本質就是呼叫根目錄下的mkconfig指令碼,下面分析這個指令碼:

#!/bin/sh -e

# script to create header files and links to configure

# u-boot for a specific board.

## parameters: target architecture cpu board [vendor] [soc]

## (c) 2002-2006 denx software engineering, wolfgang denk #

board_name="" # name to print in make output#指令碼語言中$#表示傳入引數的個數,這裡傳入了6個引數,這裡檢查的引數中有沒有-- -a -n,顯然沒有,所有跳過

while [ $# -gt 0 ] ; do case "$1" in

#如果board_name沒有定義,那就執行board_name = "$1",顯然,執行完這條指令後board_name="smdk2410"

[ "$" ] || board_name="$1"#如果傳入引數小於4或者大於6,則退出,這裡傳入引數是6,直接退出[ $# -lt 4 ] && exit 1[ $# -gt 6 ] && exit 1echo "configuring for $ board..."## create link to architecture specific headers#if [ "$srctree" != "$objtree" ] ; then #檢視頂層makefile會發現srctree == objtree,這兩個目錄一樣,看else分支mkdir -p $/includemkdir -p $/include2cd $/include2rm -f asmln -s $/include/asm-$2 asmlnprefix="../../include2/asm/"cd ../includerm -rf asm-$2rm -f asmmkdir asm-$2ln -s asm-$2 asmelse #這個建立了乙個鏈結檔案cd ./includerm -f asmln -s asm-$2 asm #ln -s asm-$2 asm 即

建立鏈結檔案arm,指向asm-armfirm -f asm-$2/arch #rm -f asm-arm/archif [ -z "$6" -o "$6" = "null" ] ; then #第六個引數不是空或null,看else分支ln -s $arch-$3 asm-$2/archelseln -s $arch-$6 asm-$2/arch

#ln -s arch-s3c24x0 asm-arm/arch 即建立鏈結檔案asm-arm/arch指向前者fiif [ "$2" = "arm" ] ; thenrm -f asm-$2/procln -s $proc-armv asm-$2/proc

#ln -s proc-armv asm-arm/procfi## create include file for make#

下面是建立配置檔案include/config.mk檔案,內容為arch = arm cpu = arm920t board = smdk2410 soc = s3c24x0echo "arch = $2" > config.mkecho "cpu = $3" >> config.mkecho "board = $4" >> config.mk[ "$5" ] && [ "$5" != "null" ] && echo "vendor = $5" >> config.mk[ "$6" ] && [ "$6" != "null" ] && echo "soc = $6" >> config.mk ## create board specific header file#

exit 0
總結如下:

執行make smdk2410_config後的效果如下:

(1)在include目錄下建立軟鏈結檔案asm,指向具體的asm-arm檔案,同時修改asm-arm下的檔案,並構建軟鏈結檔案asm-arm/arch --> arch/s3c24x0 和 asm-arm/proc --> proc-armv

(2)在include目錄下生成兩個檔案config.mk和config.h,

其中config.mk檔案內容如下:

arch   = arm

cpu    = arm920t

board  = smdk2410

soc    = s3c24x0

這個檔案會被包含在makefile中,並通過export設定為全域性環境變數 

config.h檔案內容如下:

/* automatically generated - do not edit */

#include

從前面的結果看,要在board目錄下新建乙個開發板的的目錄,則必須在include/configs目錄下也要建立乙個.h,裡面存放的就是開發板的配置資訊,可以手動修改這個檔案來裁剪、設定uboot。

u boot的配置過程

1.頂層makefile 這裡我們將以smdk2410為例來介紹,uboot是u boot 2009.03,首先我們應該開啟u boot的頂層makefile,這裡按照人的思維來說,我們應該首先去看看smdk2410的配置項 smdk2410 config 2830 smdk2410 config ...

uboot配置過程詳解

當我們在編譯uboot的時候,要分為兩個階段,乙個階段是配置,配置用的命令是make x210 sd config。配置完成後開始正式的編譯,命令為make,當然,編譯命令可以加什麼的引數,比如多執行緒編譯 make j4,比如靜默編譯 make s等。在這一篇文章中,我將單獨詳細分析uboot的配...

uboot之配置分析

1.在uboot原始碼包中分析其中makefile。因為編譯流程為 1.make mini2440 config 2.make 2.makefile中有 mini2440 config unconfig mkconfig config arm arm920t mini2440 tekkamannin...