|
在编译U-BOOT之前,先要执行 # make smdk2410_config 定义: smdk2410_config : unconfig @$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0 根据依赖关系,会先执行unconfig目标 定义: unconfig:4 U+ K+ L5 o4 i6 k4 z# D
@rm -f $(obj)include/config.h $(obj)include/config.mk \
# q) Z3 y2 y2 U, O $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \2 S) i2 \ w8 g3 `
$(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; _5 T+ }- s' M! q# O9 H9 P3 I) `
export 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 configure
6 l3 \* p H9 r3 A' y# U-Boot for a specific board.
7 }+ i# K% r, E/ }9 }7 }; h#9 Q9 D( |/ \$ |
# Parameters: Target Architecture CPU Board [VENDOR] [SOC]% p' e2 J& N0 w
# Y p- p3 F' k6 w% o7 P
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
2 t+ x' f3 ]. k9 a; i5 V m# APPEND=no # Default: Create new config file& G4 H. u/ ?- }% M6 J7 |6 K
BOARD_NAME="" # Name to print in make output while [ $# -gt 0 ] ; do. y0 c5 `0 W: D. r: N; b4 B6 K
case "$1" in
! E: @3 m# a4 B% n4 O --) shift ; break ;;
. n! y1 p2 m3 G: H9 L" F* j7 e -a) shift ; APPEND=yes ;; V: d+ g f3 r- B. p6 k9 `4 |, q
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;, _6 p! f6 R, [* t: c
*) break ;;
6 {; D; U0 o* {& Q, o! T esac1 z+ n/ K( K: a. h, E) R0 v7 M7 A
done [ "${BOARD_NAME}" ] || BOARD_NAME="$1" [ $# -lt 4 ] && exit 1
9 ]: }3 D' U2 S. |5 k3 q ~4 G[ $# -gt 6 ] && exit 1 echo "Configuring for ${BOARD_NAME} board..." #
+ ~" o* X J9 M' L* p# Create link to architecture specific headers
. A. \: w! H, P9 P: P; X. [#& N$ d' s1 c4 K4 h: k% X6 i* w' [; H
if [ "$SRCTREE" != "$OBJTREE" ] ; then
) s! X8 C- \0 @$ ^9 { mkdir -p ${OBJTREE}/include
3 ^) S v% D9 X* R3 i+ | mkdir -p ${OBJTREE}/include2+ `4 ^) I0 N5 q; Q
cd ${OBJTREE}/include2
( w5 M0 F% W# ^4 K1 ~ rm -f asm
8 d; w) t' M5 V( f& n4 i# { ln -s ${SRCTREE}/include/asm-$2 asm
W3 e( Z) C, Y- R& W6 ]5 w LNPREFIX="../../include2/asm/"
# Z$ J7 G5 L8 j8 I% z cd ../include
4 \* a) U& i( \1 D5 P& M! D4 x rm -rf asm-$2
8 l. i1 t9 A# W! h3 o rm -f asm
8 @) ~, ]0 V: [1 D, t* E# i mkdir asm-$2+ P/ `# W) H: i5 k$ L: Q
ln -s asm-$2 asm3 o- d5 N& `3 G8 @+ D+ r" _( G. x9 V
else
+ j r' Y/ n# A( w% \ cd ./include1 r1 @0 ^- B3 `5 f6 K: C5 i
rm -f asm
4 _( l* @* F9 \/ t m) x# k ln -s asm-$2 asm
% i& I9 ~! F7 X& V {- hfi rm -f asm-$2/arch if [ -z "$6" -o "$6" = "NULL" ] ; then; `. Z- R/ l I6 \) V' z8 F' q
ln -s ${LNPREFIX}arch-$3 asm-$2/arch8 m, g# c5 ?+ E, z
else
* k$ f& E& M) @+ e( t* O1 P ln -s ${LNPREFIX}arch-$6 asm-$2/arch1 [8 S7 L( {8 v' Q! w& N4 x
fi if [ "$2" = "arm" ] ; then5 [) L k! w- D- E$ e
rm -f asm-$2/proc
" J7 |* P, W" W& N; p- D8 l ln -s ${LNPREFIX}proc-armv asm-$2/proc$ L5 v1 x! t% L8 h
fi #4 R$ Q4 S8 [" L
# Create include file for Make, e- f+ x Z/ N% Q3 \9 C
#
1 C; T1 q4 z0 |* |6 H; {$ U, a4 pecho "ARCH = $2" > config.mk0 U' A9 S7 @: ]2 H) Q
echo "CPU = $3" >> config.mk
. b' M: Y: ?' q% q9 e) b0 Aecho "BOARD = $4" >> config.mk [ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk [ "$6" ] && [ "$6" != "NULL" ] && echo "SOC = $6" >> config.mk #
G: {- |) u- ~; F+ \" {; B# Create board specific header file, m# E, k. n5 d
#8 w a ]5 b+ O0 t0 x$ E# M
if [ "$APPEND" = "yes" ] # Append to existing config file
& f! \# ?% K; xthen
) f" z" s4 J2 ~' c9 J+ P# H echo >> config.h
. d/ i9 C9 z& z- h9 eelse
9 e+ P6 b& O5 ^; g > config.h # Create new config file
$ f" {) d; \# K7 Bfi
* f9 r+ Q/ L$ W$ ?9 [echo "/* Automatically generated - do not edit */" >>config.h. I0 u2 l7 H5 K9 X
echo "#include <configs/$1.h>" >>config.h
* c- l' V d4 y4 O6 u, G3 Kecho "#include <asm/config.h>" >>config.h exit 0
3 ~) E$ O3 A" o; Z
执行./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0命令,假设执行 的是“./mkconfig $1 $2 $3 $4 $5 $6”,将产生如下结果。 - 开发板名称BOARD_NAME等于$1。
- 创建到平台/开发板相关的头文件的链接,如下所示:0 ?+ A2 x# X0 x0 W' e1 }( B" m! F
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 */
G* m+ Y+ H) e6 n: w1 E3 U' F0 Y#include <configs/$1.h> % }5 P5 w/ l1 ~- }! n0 h
|