mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-26 05:34:30 +08:00
7ac2fe2da2
This patch adds support for networking in SPL. Some devices are capable of loading SPL via network so it makes sense to load the main U-Boot binary via network too. This patch tries to use existing network code as much as possible. Unfortunately, it depends on environment which in turn depends on other code so SPL size is increased significantly. No effort was done to decouple network code and environment so far. Signed-off-by: Ilya Yanok <ilya.yanok@cogentembedded.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com> Signed-off-by: Tom Rini <trini@ti.com>
192 lines
4.4 KiB
Bash
Executable File
192 lines
4.4 KiB
Bash
Executable File
#!/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-2010 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
|
|
#
|
|
|
|
APPEND=no # Default: Create new config file
|
|
BOARD_NAME="" # Name to print in make output
|
|
TARGETS=""
|
|
|
|
arch=""
|
|
cpu=""
|
|
board=""
|
|
vendor=""
|
|
soc=""
|
|
options=""
|
|
|
|
if [ \( $# -eq 2 \) -a \( "$1" = "-A" \) ] ; then
|
|
# Automatic mode
|
|
line=`egrep -i "^[[:space:]]*${2}[[:space:]]" boards.cfg` || {
|
|
echo "make: *** No rule to make target \`$2_config'. Stop." >&2
|
|
exit 1
|
|
}
|
|
|
|
set ${line}
|
|
# add default board name if needed
|
|
[ $# = 3 ] && set ${line} ${1}
|
|
elif [ "${MAKEFLAGS+set}${MAKELEVEL+set}" = "setset" ] ; then
|
|
# only warn when using a config target in the Makefile
|
|
cat <<-EOF
|
|
|
|
warning: Please migrate to boards.cfg. Failure to do so will
|
|
mean removal of your board in the next release.
|
|
|
|
EOF
|
|
sleep 5
|
|
fi
|
|
|
|
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
|
|
|
|
[ $# -lt 4 ] && exit 1
|
|
[ $# -gt 7 ] && exit 1
|
|
|
|
# Strip all options and/or _config suffixes
|
|
CONFIG_NAME="${1%_config}"
|
|
|
|
[ "${BOARD_NAME}" ] || BOARD_NAME="${1%_config}"
|
|
|
|
arch="$2"
|
|
cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $1}'`
|
|
spl_cpu=`echo $3 | awk 'BEGIN {FS = ":"} ; {print $2}'`
|
|
if [ "$4" = "-" ] ; then
|
|
board=${BOARD_NAME}
|
|
else
|
|
board="$4"
|
|
fi
|
|
[ $# -gt 4 ] && [ "$5" != "-" ] && vendor="$5"
|
|
[ $# -gt 5 ] && [ "$6" != "-" ] && soc="$6"
|
|
[ $# -gt 6 ] && [ "$7" != "-" ] && {
|
|
# check if we have a board config name in the options field
|
|
# the options field mave have a board config name and a list
|
|
# of options, both separated by a colon (':'); the options are
|
|
# separated by commas (',').
|
|
#
|
|
# Check for board name
|
|
tmp="${7%:*}"
|
|
if [ "$tmp" ] ; then
|
|
CONFIG_NAME="$tmp"
|
|
fi
|
|
# Check if we only have a colon...
|
|
if [ "${tmp}" != "$7" ] ; then
|
|
options=${7#*:}
|
|
TARGETS="`echo ${options} | sed 's:,: :g'` ${TARGETS}"
|
|
fi
|
|
}
|
|
|
|
if [ "${ARCH}" -a "${ARCH}" != "${arch}" ]; then
|
|
echo "Failed: \$ARCH=${ARCH}, should be '${arch}' for ${BOARD_NAME}" 1>&2
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$options" ] ; then
|
|
echo "Configuring for ${BOARD_NAME} - Board: ${CONFIG_NAME}, Options: ${options}"
|
|
else
|
|
echo "Configuring for ${BOARD_NAME} board..."
|
|
fi
|
|
|
|
#
|
|
# Create link to architecture specific headers
|
|
#
|
|
if [ "$SRCTREE" != "$OBJTREE" ] ; then
|
|
mkdir -p ${OBJTREE}/include
|
|
mkdir -p ${OBJTREE}/include2
|
|
cd ${OBJTREE}/include2
|
|
rm -f asm
|
|
ln -s ${SRCTREE}/arch/${arch}/include/asm asm
|
|
LNPREFIX=${SRCTREE}/arch/${arch}/include/asm/
|
|
cd ../include
|
|
mkdir -p asm
|
|
else
|
|
cd ./include
|
|
rm -f asm
|
|
ln -s ../arch/${arch}/include/asm asm
|
|
fi
|
|
|
|
rm -f asm/arch
|
|
|
|
if [ -z "${soc}" ] ; then
|
|
ln -s ${LNPREFIX}arch-${cpu} asm/arch
|
|
else
|
|
ln -s ${LNPREFIX}arch-${soc} asm/arch
|
|
fi
|
|
|
|
if [ "${arch}" = "arm" ] ; then
|
|
rm -f asm/proc
|
|
ln -s ${LNPREFIX}proc-armv asm/proc
|
|
fi
|
|
|
|
#
|
|
# Create include file for Make
|
|
#
|
|
( echo "ARCH = ${arch}"
|
|
if [ ! -z "$spl_cpu" ] ; then
|
|
echo 'ifeq ($(CONFIG_SPL_BUILD),y)'
|
|
echo "CPU = ${spl_cpu}"
|
|
echo "else"
|
|
echo "CPU = ${cpu}"
|
|
echo "endif"
|
|
else
|
|
echo "CPU = ${cpu}"
|
|
fi
|
|
echo "BOARD = ${board}"
|
|
|
|
[ "${vendor}" ] && echo "VENDOR = ${vendor}"
|
|
[ "${soc}" ] && echo "SOC = ${soc}"
|
|
exit 0 ) > config.mk
|
|
|
|
# Assign board directory to BOARDIR variable
|
|
if [ -z "${vendor}" ] ; then
|
|
BOARDDIR=${board}
|
|
else
|
|
BOARDDIR=${vendor}/${board}
|
|
fi
|
|
|
|
#
|
|
# Create board specific header file
|
|
#
|
|
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
|
|
i="`echo ${i} | sed '/=/ {s/=/ /;q; } ; { s/$/ 1/; }'`"
|
|
echo "#define CONFIG_${i}" >>config.h ;
|
|
done
|
|
|
|
echo "#define CONFIG_SYS_ARCH \"${arch}\"" >> config.h
|
|
echo "#define CONFIG_SYS_CPU \"${cpu}\"" >> config.h
|
|
echo "#define CONFIG_SYS_BOARD \"${board}\"" >> config.h
|
|
|
|
[ "${vendor}" ] && echo "#define CONFIG_SYS_VENDOR \"${vendor}\"" >> config.h
|
|
|
|
[ "${soc}" ] && echo "#define CONFIG_SYS_SOC \"${soc}\"" >> config.h
|
|
|
|
cat << EOF >> config.h
|
|
#define CONFIG_BOARDDIR board/$BOARDDIR
|
|
#include <config_cmd_defaults.h>
|
|
#include <config_defaults.h>
|
|
#include <configs/${CONFIG_NAME}.h>
|
|
#include <asm/config.h>
|
|
#include <config_fallbacks.h>
|
|
#include <config_uncmd_spl.h>
|
|
EOF
|
|
|
|
exit 0
|