U-Boot是universal bootloader,也就是通用的bootloader。
U-Boot 源码文件下包括一些目录文件和文本文件,这些文件可分为”与平台相关的文件”和”与平台无关的文件”,其中common文件夹下的文件就是与平台无关的文件;与平台相关的文件又分为CPU级相关的文件和与板级相关的文件:arch目录下的文件就是与CPU级相关的文件,而board、drivers、include等文件夹下的文件都是与板级相关的文件。我们在移植的过程中,需要修改的文件也就是这些与平台相关的文件。
内存采用了4片64Mbit x 16 I/Os的1Gb DDR2 SDRAM。
①解压源码后进入目录执行make forlinx_linux_config:
CURDIR 为 makefile 内嵌变量,即当前路径 参考http://qgjie456.blog.163.com/blog/static/354513672007629677779/
<span style="white-space:pre"> </span>SRCTREE := $(CURDIR)
MKCONFIG := $(SRCTREE)/mkconfig
ifneq ($(OBJTREE),$(SRCTREE))
obj := $(OBJTREE)/
src := $(SRCTREE)/
else
obj :=
src :=
endif
export obj src
forlinx_linux_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110 linux
@echo "TEXT_BASE = 0xcc800000" > $(obj)board/samsung/smdkc110/config.mk</span>
等效于mkconfig forlinx_linux arm s5pc11x amdkc110 samsung s5pc110 linux
board/samsung/smdkc110/config.mk中内容为"TEXT_BASE = 0xcc800000"
②mkconfig分析:
#$0 $1 $2 $3 $4 $5 $6 $7
#mkconfig forlinx_linux arm s5pc11x smdkc110 samsung s5pc110 linux
APPEND=no # Default: Create new config file
BOARD_NAME="" # Name to print in make output
#$#为参数个数,排除掉-- -a -n选项
while [ $# -gt 0 ] ; do
case "$1" in
--) shift ; break ;;
-a) shift ; APPEND=yes ;;
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
*) break ;;
esac
done
#BOARD_NAME 设置为 forlinx_linux
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
#参数个数即不小于4,也不大于7
[ $# -lt 4 ] && exit 1
[ $# -gt 7 ] && exit 1
echo "Configuring for ${BOARD_NAME} board..."
if [ "$SRCTREE" != "$OBJTREE" ] ; then
#执行下方
else
cd ./include #进入include
rm -f asm
ln -s asm-$2 asm #设置asm-arm 指向 asm
fi
rm -f asm-$2/arch
if [ -z "$6" -o "$6" = "NULL" ] ; then
ln -s ${LNPREFIX}arch-$3 asm-$2/arch
else
ln -s ${LNPREFIX}arch-$6 asm-$2/arch #设置arch-s5pc110 指向 asm-arm/arch
fi
# create link for s5pc11x SoC
if [ "$3" = "s5pc11x" ] ; then
rm -f regs.h
ln -s $6.h regs.h #s5pc110指向regs.h
rm -f asm-$2/arch
ln -s arch-$3 asm-$2/arch #arch-s5pc11x 指向 asm-arm/arch
fi
if [ "$2" = "arm" ] ; then
rm -f asm-$2/proc
ln -s ${LNPREFIX}proc-armv asm-$2/proc #proc-armv指向asm-arm/proc
fi
#
# Create include file for Make
#
echo "ARCH = $2" > config.mk
echo "CPU = $3" >> config.mk
echo "BOARD = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk
#./include/config.mk中的内容
ARCH = arm
CPU = s5pc11x
BOARD = smdkc110
VENDOR = samsung
SOC = s5pc110
#
if [ "$APPEND" = "yes" ] # Append to existing config file
then
echo >> config.h #建立config.h
else
> config.h # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
#forlinx add
if [ "$7" = "linux" ]
then
echo "#define CONFIG_LINUX_FORLINX 1" >>config.h
else
echo "#define CONFIG_ANDROID_FORLINX 1" >>config.h #linux下输入这一句
fi
#echo "#include <configs/$1.h>" >>config.h
#forlinx change for linux and android
echo "#include <configs/smdkv210single.h>" >>config.h #输入
#./include/config.h的内容
/* Automatically generated - do not edit */
#define CONFIG_LINUX_FORLINX 1
#include <configs/smdkv210single.h>
#
综上,即:
BOARD_NAME 设置为 forlinx_linux
设置./include/asm-arm 指向 ./include/asm
设置./include/arch-s5pc110 指向 ./include/asm-arm/arch 后又被替换
s5pc110指向regs.h
arch-s5pc11x 指向 asm-arm/arch
proc-armv指向asm-arm/proc
新建./include/config.mk中的内容
ARCH = arm
CPU = s5pc11x
BOARD = smdkc110
VENDOR = samsung
SOC = s5pc110
新建./include/config.h的内容
/* Automatically generated - do not edit */
#define CONFIG_LINUX_FORLINX 1
#include <configs/smdkv210single.h>