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系统,想把一些知识要点心得写一下,这篇借鉴了不少网上大神的文章若是有什么写错或写的很差的但愿广大网友指出,谢谢!