阅读uboot

下面是一个执行make XXX_config后的打印信息:

pengdl@debian:~/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06$ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- hi3520d_config
Generating include/autoconf.mk
Generating include/autoconf.mk.dep
# Target  Architecture  CPU  Board [VENDOR] [SOC]
'$#' = 6
'$0' = /home/pengdl/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06/mkconfig
'$1' = hi3520d (Target)
'$2' = arm (Architecture)
'$3' = hi3520d (CPU)
'$4' = hi3520d (Board)
'$5' = NULL (VENDOR)
'$6' = hi3520d (SOC)
BOARD_NAME = hi3520d
/home/pengdl/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06
Configuring for hi3520d board...
SRCTREE = /home/pengdl/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06
OBJTREE = /home/pengdl/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06
ln -s ../arch/arm/include/asm asm
/home/pengdl/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06/include
ln -s arch-hi3520d asm/arch
ln -s proc-armv asm/proc
ARCH   = arm >  config.mk
CPU    = hi3520d >>  config.mk
BOARD  = hi3520d >>  config.mk
SOC    = hi3520d >> config.mk
BOARDDIR = hi3520d
/home/pengdl/work/costdown/new/Hi3520D_SDK_V1.0.2.2c/source/arm11/u-boot-2010.06/include

下面是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 <wd@denx.de>
#

APPEND=no    # Default: Create new config file
BOARD_NAME=""    # Name to print in make output
TARGETS=""

while [ $# -gt 0 ] ; do
    case "$1" in
    --) shift ; break ;;
    -a) shift ; APPEND=yes ;;
    -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
    -t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
    *)  break ;;
    esac
done

echo "# Target  Architecture  CPU  Board [VENDOR] [SOC]"
echo "'$#' = $#"
echo "'$0' = $0" 
echo "'$1' = $1 (Target)" 
echo "'$2' = $2 (Architecture)"
echo "'$3' = $3 (CPU)"
echo "'$4' = $4 (Board)"
echo "'$5' = $5 (VENDOR)"
echo "'$6' = $6 (SOC)"

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

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

if [ "${ARCH}" -a "${ARCH}" != "$2" ]; then
    echo "Failed: $ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2
    exit 1
fi
echo "BOARD_NAME = $BOARD_NAME"
echo "`pwd`"
echo "Configuring for ${BOARD_NAME} board..."

#
# Create link to architecture specific headers
#
echo "SRCTREE = $SRCTREE"
echo "OBJTREE = $OBJTREE"
if [ "$SRCTREE" != "$OBJTREE" ] ; then
    mkdir -p ${OBJTREE}/include
    mkdir -p ${OBJTREE}/include2
    cd ${OBJTREE}/include2
    rm -f asm
    ln -s ${SRCTREE}/arch/$2/include/asm asm
    LNPREFIX=${SRCTREE}/arch/$2/include/asm/
    cd ../include
    rm -f asm
    ln -s ${SRCTREE}/arch/$2/include/asm asm
else
    cd ./include
    rm -f asm
    echo  "ln -s ../arch/$2/include/asm asm"
    ln -s ../arch/$2/include/asm asm
fi

echo "`pwd`"
rm -f asm/arch

if [ -z "$6" -o "$6" = "NULL" ] ; then
    echo "ln -s ${LNPREFIX}arch-$3 asm/arch"
    ln -s ${LNPREFIX}arch-$3 asm/arch
else
    echo "ln -s ${LNPREFIX}arch-$6 asm/arch"
    ln -s ${LNPREFIX}arch-$6 asm/arch
fi

if [ "$2" = "arm" ] ; then
    rm -f asm/proc
    echo "ln -s ${LNPREFIX}proc-armv asm/proc"
    ln -s ${LNPREFIX}proc-armv asm/proc
fi

#
# Create include file for Make
#
echo "ARCH   = $2 >  config.mk"
echo "ARCH   = $2" >  config.mk

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

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

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

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

# Assign board directory to BOARDIR variable
if [ -z "$5" -o "$5" = "NULL" ] ; then
    BOARDDIR=$4
else
    BOARDDIR=$5/$4
fi

echo "BOARDDIR = $BOARDDIR"

#
# Create board specific header file
#
echo "`pwd`"
if [ "$APPEND" = "yes" ]    # Append to existing config file
then
    echo >> config.h
else
    > config.h        # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h

for i in ${TARGETS} ; do
    echo "#define CONFIG_MK_${i} 1" >>config.h ;
done

cat << EOF >> config.h
#define CONFIG_BOARDDIR board/$BOARDDIR
#include <config_defaults.h>
#include <configs/$1.h>
#include <asm/config.h>
EOF

exit 0

  • 如何知道自己的板子用的是哪个串口驱动?

include/configs/Target.h(Target 是传给mkconfig的第一个参数,即$1)中定义了大量的宏,在其中搜索serial,可以找到相关的宏,然后到driver/serial/Makefile中看调用的是哪个C文件,或者直接看driver/serial/下有哪个C文件参见了编译即可。

原文地址:https://www.cnblogs.com/pengdonglin137/p/3554682.html