uboot的配置

嵌入式linux軟件系統從軟件角度一般可分一下4個層面:
linux

1 引導加載程序。BootLoader做爲之一,做用是初始化硬件設備、創建內存空間映射圖,準備好軟件環境, 最後調用操做系統內核運行。
ide

2 Linux內核優化

3 文件系統。 包含了linux系統可以運行的應用程序和庫等。spa

wKioL1lYsASQZJznAABYbZpgJM8142.png-wh_50

Boot parameters分區中存放了一些參數,好比波特率,ip地址等。操作系統


U-Boot,即通用 Bootloader,支持多種操做系統內核和處理器。3d

咱們在使用uboot以前都要對其進行配置和編譯過程。配置命令是make <boad.name>_config   編譯命令是make allorm

那這兩條命令作了什麼事情呢?
blog


uboot配置過程ip

這裏我用的是uboot-1.1.16很老的東西,新版uboot增長了不少功能,並進行了優化,與老版差距較大。想要了解哪些文件首先調用,可執行文件佔用內存狀況,最好的方法就是閱讀Makefile。內存

在頂層Makefile中有以下代碼:

wKiom1lYtv6SfDdBAAAvvSe_3no214.png

MKCONFLG源代碼下的mkconfig文件  (MKCONFLG:=$(SRCTREE)/mkconfig )

$@表示目標 「= 」表示替換

因此咱們執行make smdk2410_config 至關於執行mkconfig文件傳遞 arm arm920t smdk2410 NULL s3c24x0等參數



mkconfig文件

wKioL1lY2X-jseUBAABFe6ZX7Y0105.png

  1. APPEND=no    # Default: Create new config file  

  2. BOARD_NAME=""    # Name to print in make output  

  3. TARGETS=""  

  4. while [ $# -gt 0 ] ; do  

  5.     case "$1" in  

  6.     --) shift ; break ;;  

  7.     -a) shift ; APPEND=yes ;;  

  8.     -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;  

  9.     -t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;  

  10.     *) break ;;  

  11.     esac  

  12. done  

$#是腳本傳遞的參數的個數。-gt是>的意思。 $1:第一個參數。shift:去掉第一個參數,將第二參數變成第一個……這段代碼意思 檢查參數中,有無-a -n -t這樣的參數,沒有的話直接break,傳遞的參數並無-a -n,直接跳過

  1. "${BOARD_NAME}" ] || BOARD_NAME="$1"  

  2.   

  3. [ $# -lt 4 ] && exit 1  

  4. [ $# -gt 6 ] && exit 1  

  5.   

  6. if [ "${ARCH}" -a "${ARCH}" != "$2" ]; then  

  7.     echo "Failed: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2  

  8.     exit 1  

  9. fi  

  10.   

echo "Configuring for ${BOARD_NAME} board..." 

這是一個判斷語句,若是BOARD_NAME成立,就不會執行 BOARD_NAME="$1",BOARD_NAME變量從聲明開始一直是空,到這裏給他賦值$1


  1. if [ "$SRCTREE" != "$OBJTREE" ] ; then  

  2.     mkdir -p ${OBJTREE}/include  

  3.     mkdir -p ${OBJTREE}/include2  

  4.     cd ${OBJTREE}/include2  

  5.     rm -f asm  

  6.     ln -s ${SRCTREE}/include/asm-$2 asm  

  7.     LNPREFIX="../../include2/asm/"  

  8.     cd ../include  

  9.     rm -rf asm-$2  

  10.     rm -f asm  

  11.     mkdir asm-$2  

  12.     ln -s asm-$2 asm  

  13. else  

  14.     cd ./include  

  15.     rm -f asm  

  16.     ln -s asm-$2 asm  

  17. fi  

  18.   

  19. rm -f asm-$2/arch  

  20.   

  21. if [ -z "$6" -o "$6" = "NULL" ] ; then  

  22.     ln -s ${LNPREFIX}arch-$3 asm-$2/arch  

  23. else  

  24.     ln -s ${LNPREFIX}arch-$6 asm-$2/arch  

  25. fi  

  26.   

  27. if [ "$2" = "arm" ] ; then  

  28.     rm -f asm-$2/proc  

  29.     ln -s ${LNPREFIX}proc-armv asm-$2/proc  

  30. fi  

這部分是建立軟鏈接 建立不少連接文件。創建asm文件,鏈接到asm-arm目錄,方便uboot採用通用方式來調用不一樣處理器的頭文件和文件夾, 刪除asm-arm下的arch文件,而後再創建arch文件

  1. # Create include file for Make  

  2. #  

  3. echo "ARCH = $2" > config.mk  

  4. echo "CPU = $3" >> config.mk  

  5. echo "BOARD = $4" >> config.mk  

  6.   

  7. "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk  

  8.   

  9. "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk  

  10.   

  11. # Assign board directory to BOARDIR variable  

  12. if [ -z "$5" -o "$5" = "NULL" ] ; then  

  13.     BOARDDIR=$4  

  14. else  

  15.     BOARDDIR=$5/$4  

  16. fi  

建立make時用到的包含文件 config.mk,">" 表示新建文件   ">>"表示添加內容到文件

  1. if [ "$APPEND" = "yes" ]     #Append to existing config file  

  2. then  

  3.     echo >> config.h  

  4. else  

  5.     > config.h        # Create new config file  

  6. fi  

  7. echo "/* Automatically generated - do not edit */" >>config.h  

  8.   

  9. for i in ${TARGETS} ; do  

  10.     echo "#define CONFIG_MK_${i} 1" >>config.h ;  

  11. done  

  12.   

  13. cat << EOF >> config.h  

  14. #define CONFIG_BOARDDIR board/$BOARDDIR  

  15. #include <config_defaults.h>  

  16. #include <configs/$1.h>  

  17. #include <asm/config.h>  

  18. EOF  

  19.   

  20. exit 0  

建立開發板特定的頭文件 config.h

至此,make smdk2410_config命令已經結束,回顧一下就是建立了include/config.mk和include/config.h,其中include/config.mk文件中記錄着u-boot的版本信息,include/config.h中包含了 configs/$1.h,此文件裏記錄着是不少不少以CONFIG_開頭的宏,是開發板u-boot的主配置信息。


剛開始學嵌入式linux系統,想把一些知識要點心得寫一下,這篇借鑑了不少網上大神的文章若是有什麼寫錯或寫的很差的但願廣大網友指出,謝謝!