./include/asm --> asm-$2 (asm-arm)
# create link for s5pc11x SoC
if [
"$3" =
"s5pc11x" ] ;
then
rm
-f regs.h
ln
-s $6.h regs.h
rm
-f asm-
$2/arch
ln
-s arch-
$3 asm-
$2/arch
fi
regs.h --> $6.h (s5pc110.h)
asm-$2/arch --> arch-$3(arch-s5pc11x)
u-boot支持很多种开发板,很多种类型的CPU,所以要有一种通用得配置方式来方便移植;
u-boot甚至linux内核都采用了这种方式:针对不同的处理器或者板子都有自己的头文件和文件夹,但是真正的编译过程却不直接使用,而是在配置阶段创建这些头文件或者文件夹的软连接,并命名为一种通用的名字。在编译的时候通过这些软连接访问真正需要的文件。
例如,在u-boot的include目录下有一个asm的目录,此目录就是在配置完后生成的一个软连接,当配置的是arm架构时,此文件是asm-arm的软连接。
创建make时用到的包含文件 config.mk
#
# 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
创建开发板特定的头文件 config.h
#
# 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
#forlinx add
if [
"$7" =
"linux" ]
then
echo "#define CONFIG_LINUX_FORLINX 1" >>config.h
else
echo "#define CONFIG_ANDROID_FORLINX 1" >>config.h
fi
#echo "#include <configs/$1.h>" >>config.h
#forlinx change for linux and android
echo "#include <configs/smdkv210single.h>" >>config.h
因为上边已经把APPEND设置为NO,所以执行> config.h 即创建config.h头文件,并向config.h中写入
/* Automatically generated - do not edit */
"#define CONFIG_LINUX_FORLINX 1
以及#include <configs/smdkv210single.h>
同样是OK210的工程师加入的
#include <configs/$1.h> 即#include <configs/forlinx_linux.h>
注意:创建软连接的操作全都是在u-boot根目录的include子目录中执行的。
配置脚本mkconfig结束。
mkconfig脚本小结
一共创建了三个连接文件,
./include/asm --> asm-$2 (asm-arm)
regs.h --> $6.h (s5pc110.h)
asm-$2/arch --> arch-$3(asm-arm -> arch-s5pc11x)
以及include/config.mk和include/config.h,其中include/config.mk文件中记录着u-boot的版本信息,include/config.h中包含了 configs/$1.h,此文件里记录着是很多很多以CONFIG_开头的宏,是开发板u-boot的主配置信息。
主Makefile
版本号相关
VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION =
$(VERSION).
$(PATCHLEVEL).
$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE =
$(obj)include/version_autogenerated.h
Makefile刚开始的时候仍然是定义当前使用的u-boot的版本,此版本和linux内核版本类似都由多个字段组成,各字段意义如下:
VERSION : 主版本号
PATCHLEVEL :次版本号
SUBLEVEL : 修正版本号
EXTRAVERSION:扩展版本号 (可以自己定义,用于区别自己移植的版本号 )
U_BOOT_VERSION 就是以上几个字段的组合字符串。
VERSION_FILE 保存的是u-boot版本号的文件,其中obj变量在后边定义。version_autogenerated.h文件也在后边生成(此文件不是u-boot源码目录本身有的文件,是由配置过程自动生成的),其内容如下:
#define U_BOOT_VERSION "U-Boot 1.3.4"
HOSTARCH := $(shell uname -m | \
sed
-e s/i.
86/i386/ \
-e s/sun4u/sparc64/ \
-e s/arm.*/arm/ \
-e s/sa110/arm/ \
-e s/powerpc/ppc/ \
-e s/ppc64/ppc/ \
-e s/macppc/ppc/)
HOSTOS := $(shell uname
-s | tr
'[:upper:]' '[:lower:]' | \
sed
-e 's/\(cygwin\).*/cygwin/')
export HOSTARCH HOSTOS