|
在编译U-BOOT之前,先要执行 # make smdk2410_config 定义: smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0 根据依赖关系,会先执行unconfig目标 定义: unconfig:
9 M9 G, N9 J' }/ L5 @: K4 A# v6 F @rm -f $(obj)include/config.h $(obj)include/config.mk \
) q h1 k) w3 c1 W# J# I, } $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \5 ^- N4 X' C( n1 m! C
$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep 注意不指定输出目标时,obj,src变量均为空,unconfig下面的命令清理上一次执行make *_config时生成的头文件和makefile的包含文件。主要是include/config.h 和include/config.mk文件 MKCONFIG 是顶层目录下的mkcofig脚本文件,后面五个是传入的参数 定义: MKCONFIG := $(SRCTREE)/mkconfig
8 K: ]# P7 s5 T% \0 ~1 ?2 e2 h2 Xexport MKCONFIG 执行: @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0 $(@:_config=) :Target arm:Architecture arm920t :CPU smdk2410 :Board samsung :VENDOR s3c24x0:SOC 对于S3C2410和S3C2440,两种都被称为SOC(System on Chip),这上面除了CPU外,还集成了包括UART、USB控制器、Nand Flash控制器等设备(称为片内外设)。S3C2410的CPU为ARM920T。 $(@:_config=) 的结果就是将“smdk2410_config”中的“_config”去掉,结果为“smdk2410”。 所以“make smdk2410_config”实际上就是执行如下命令: unconfig ./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0 再看mkconfig的作用: #!/bin/sh -e # Script to create header files and links to configure7 {( D; g, a9 v, Q
# U-Boot for a specific board.
! Q* D6 U9 v, u. R* H3 Y8 w#* t, a6 N! ^, p5 M9 C
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]' a: x$ d: Y; Q6 T& \
#3 U' L$ T7 t$ E o @3 u; _8 s+ Z" N$ \
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>4 @/ w5 |$ |0 Z& f
# APPEND=no # Default: Create new config file* r0 F2 C! w/ x8 t( p0 Q, d" n
BOARD_NAME="" # Name to print in make output while [ $# -gt 0 ] ; do
( E; E- R9 I) W1 B0 A, d5 ? case "$1" in5 J( j/ h. M0 P* e
--) shift ; break ;;+ @4 z: s( z' X: A) | z/ `( Q
-a) shift ; APPEND=yes ;;9 y7 ^9 S* ^ H O/ o
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
) F+ \, `/ v7 T$ ^5 n2 ], H *) break ;;# Y7 @5 X; G; ^6 b5 @7 l/ Y. h
esac/ K9 l+ I) H! J5 \, D8 J) o2 {0 o
done [ "${BOARD_NAME}" ] || BOARD_NAME="$1" [ $# -lt 4 ] && exit 1* O0 C2 F# a A; {: _7 Q& V" z
[ $# -gt 6 ] && exit 1 echo "Configuring for ${BOARD_NAME} board..." #
b2 d' Z+ H2 a! Y# Create link to architecture specific headers) V8 d' I! i* S: q
#" y- J$ A/ `0 C% w4 ^. G2 M- P
if [ "$SRCTREE" != "$OBJTREE" ] ; then- P0 X7 A- C: ^1 A5 ]' f
mkdir -p ${OBJTREE}/include5 g' h0 |! D4 ^7 _
mkdir -p ${OBJTREE}/include2# j" {5 Q+ a: f, v) c
cd ${OBJTREE}/include21 l( q! K( Q* _4 F, G9 _( H. B
rm -f asm* X- o- G. @% E& a) o( M ?. E
ln -s ${SRCTREE}/include/asm-$2 asm
$ z( ]! u# s% ^( S! H% z LNPREFIX="../../include2/asm/"
5 P3 g# k# u6 K3 |* C, a cd ../include
5 E% _7 F1 X- ~0 ~% Q _7 u% X rm -rf asm-$2
, Y6 N+ D/ X2 [8 j7 r ~) v7 A- B rm -f asm
& Z" C$ y& R# }+ D' V; U; X! \$ k! f mkdir asm-$2
. J+ w; Q T; n% D ln -s asm-$2 asm
' f6 G4 Z: t. K7 d; Melse s/ ?1 f4 _# Q
cd ./include( ~+ ~# r( T& i! n6 I. |4 `4 w
rm -f asm* v& F, ?+ L0 C/ f/ @
ln -s asm-$2 asm
- b/ x) W+ b! ?fi rm -f asm-$2/arch if [ -z "$6" -o "$6" = "NULL" ] ; then
4 _2 I" e! Y1 ] Z. k, R ln -s ${LNPREFIX}arch-$3 asm-$2/arch
, d. ?4 O7 F+ O4 e- belse) B9 q' Z( g% H1 p1 E
ln -s ${LNPREFIX}arch-$6 asm-$2/arch8 K5 _) k6 D1 W" T! G7 ]9 F
fi if [ "$2" = "arm" ] ; then) v5 I6 o) L( V1 m* R) l" Z
rm -f asm-$2/proc. b0 y# ?* A3 h A2 i3 |: N
ln -s ${LNPREFIX}proc-armv asm-$2/proc; v; I) I9 S+ i2 Z# j" G; g9 K- l
fi #
8 _1 l8 Q9 m; o3 u o# Create include file for Make4 v |- O( m( {6 H" F
#$ N2 v6 Z* R, W+ `4 y
echo "ARCH = $2" > config.mk ~) R* K. G' y# h+ D! G8 W
echo "CPU = $3" >> config.mk! Z$ ~, l8 \: j; ~& n) U
echo "BOARD = $4" >> config.mk [ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk #( V9 K9 b/ K* ]3 N! h( L9 ?1 W
# Create board specific header file- `" A9 E0 H5 P* C( B* O
#
- S6 F- f5 U; B9 B5 Lif [ "$APPEND" = "yes" ] # Append to existing config file
3 N7 t5 m: o, n1 `then* e$ M# ?( g6 t4 C, R2 P+ P( O
echo >> config.h# g# s# k6 C B! V+ e: w7 \
else2 w+ P+ W: A2 j; L7 \1 X% x7 @- ]
> config.h # Create new config file
- v) ]3 B3 N% z5 v4 Dfi
$ r3 D% G# r, q$ Secho "/* Automatically generated - do not edit */" >>config.h# X9 [# M/ v# p" s% Z
echo "#include <configs/$1.h>" >>config.h4 [! ]/ E# i# s1 k0 @
echo "#include <asm/config.h>" >>config.h exit 0
' b7 Y) m" k4 J
执行./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0命令,假设执行 的是“./mkconfig $1 $2 $3 $4 $5 $6”,将产生如下结果。 - 开发板名称BOARD_NAME等于$1。
- 创建到平台/开发板相关的头文件的链接,如下所示:
& Z5 u2 _. o3 c. r& I
ln -s asm-$2 asm ln -s arch-$6 asm-$6/arch ln -s proc-armv asm-$2/proc 3. 创建顶层Makefile包含的文件include/config.mk,如下所示: ARCH = $2 CPU = $3 BOARD = $4 VENDOR =$5 SOC =$6 4. 创建开发板相关的头文件include/config.h,如下所示: /* Automatically generated - do not edit */
5 s$ [" u% b/ u/ a#include <configs/$1.h> 4 W3 W6 ^. T) q n; q
|