一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 2233|回复: 0
收起左侧

uboot之---make smdk2410_config命令详细解析

[复制链接]
发表于 2017-5-2 16:49 | 显示全部楼层 |阅读模式

6 S$ r8 w. H: Q  L7 H* z2 x4 E
随便找个uboot源代码就可以啦。
  首先进入顶层Makefile。有很多相对不同板子的配置,如:
gec2440_config:unconfig
@$(MKCONFIG) $(@:_config=) ARM arm920t gec2440 samsung s3c24x0
) {* ^" \/ }" ?2 F3 m' @. ~
1.配置编译uboot第一步都是make *****_config。既然是make就得执行Makefile。makefile就包括很多上面的语句,make *****_config,首先执行的就是上面的配置信息。 @$(MKCONFIG)啥意思,其实在Makefile前面就有定义 @$(MKCONFIG) := $(SRCTREE)/mkconfig,也就是根目录的mkconfig文件。$(@:_config=)的意思就是吧make *****_config的_config给去到。所以gec2440_config执行./mkconfig  gec2440  arm arm920t gec2440 samsung s3c24x0。而unconfig的作用在于去除原先的配置信息,即make ***_config与make unconfig互逆关系。
      2.OK,现在执行make gec2440_config,那么就会出现:
   Configuring for gec2440 board...
7 n  T, s) @: A& w; h
     现在看看有发生那些变化。由于上面的命令相当于执行./mkconfig  arm arm920t gec2440 samsung s3c24x0。所以先进去根目录的mkconfig文件看看。
首先,要明确一点:./mkconfig  gec2440  arm arm920t gec2440 samsung s3c24x0使得$0=./mkconfig,$1=arm,$2=arm920t,$3=gec2440, $4=samsung, $5=s3c24x0
下面是mkconfig的内容:

4 k/ ~! }! V2 _# f0 VAPPEND=no # 这里记得APPEND初值为no8 {: d# |3 _+ @7 b, l  n6 I* D
BOARD_NAME=""" _3 t) m5 a- Q" N) U. m1 r
TARGETS=""
0 e( C! O1 c) T; T2 k8 B/ x
( I# `( X4 s& c. _/ K#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t
5 U7 V# j6 |# {% U8 ~3 X5 ]4 l9 Q
  R  W1 ]4 C+ \$ \# n5 k+ vwhile [ $# -gt 0 ] ; do
- C8 _" I- l* P" a) V' G' v0 scase "$1" in6 L$ @" d$ P6 z
--) shift ; break ;;( l$ ^! e8 v3 ]/ Y( W
-a) shift ; APPEND=yes ;;
; ^. ]1 w! I, j! A2 p9 F5 o-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;% B& D" }+ j2 M6 H; X. Y+ k8 N
-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
4 V$ y6 C+ r) z  k5 e3 ^*)  break ;;
6 Y2 I$ ^( s8 d! Vesac6 H+ y& T$ V  a. l: ?* V
done
/ ?: O0 q6 g! c3 g+ |/ v; P8 d" q6 \: v

9 u- g4 Z: P: m% v; C9 R: I$ f! K% U! `# A
) a5 Y) q0 b2 H8 @
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec24402 ~" z2 j% K3 k& X
0 J1 x; p% V3 q# ?8 w8 Y

6 s+ @% [1 B) Z. `+ x: J5 a1 z[ $# -lt 4 ] && exit 10 g$ M8 A; _5 x* f3 B5 D
[ $# -gt 6 ] && exit 1
" P( ]! \9 _; `9 P
0 H( H5 w# P8 ~+ b- e
1 v3 I; T5 l$ w+ D% N2 |1 pif [ "${ARCH}" -a "${ARCH}" != "$2" ]; then- i% C$ q* Y% [7 n/ E* c
echo "FaiLED: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2
9 w% ^/ ^: \$ u9 p! \exit 1
4 \* R4 ]$ X6 b5 u4 O8 Kfi9 _# n  F( G4 E3 U) W9 c7 p  K

1 w& E; `" M; e( H6 E) H! x1 Z. r* G- V9 m  y
//在终端打印Config  for gec2440  board....
1 c) O: ~+ n/ d  w* ?# b4 \echo "Configuring for ${BOARD_NAME} board..."
: q% E/ p3 z/ I  f, l9 g7 J
, v. c( i$ h9 ?' A: D  {8 E% S# G( J
#. n/ k/ F0 ~2 z
# 产生链接文件, J0 y% e8 Z# ?# Y' N% K
#" d! [1 `# k4 m( m1 E; T) ?$ j
if [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译
% t% o4 H& G, l3 n2 E1 t0 zmkdir -p ${OBJTREE}/include
6 C+ v. M" _/ q+ Tmkdir -p ${OBJTREE}/include2* v4 @7 h# Q- C( V- c
cd ${OBJTREE}/include27 l. [; n( w3 J. x. q% t
rm -f asm7 \# I, p& K3 b0 i5 r/ j# A
ln -s ${SRCTREE}/include/asm-$2 asm
3 k, E  I5 _, M  N+ PLNPREFIX="../../include2/asm/"/ P% f. a; I1 L6 F+ z) K
cd ../include8 j4 n- V+ }# I, Z& M5 S" ^- \
rm -rf asm-$2$ K# z3 h: o: R" l
rm -f asm
9 N+ q! U  D6 J8 V3 d! P2 w; U, ymkdir asm-$2
6 n) _# D/ h7 ?9 d# ?& c8 G2 W/ Sln -s asm-$2 asm; J, r& l4 @+ w( l& L0 j
1 L. K7 M0 L9 F6 U( ^: V8 G; K
  j' m" x8 G* L! W1 X7 f( K3 P8 v
else
7 [0 E3 M7 n+ Hcd ./include    //进入include
* q( {1 b( G. n  Drm -f asm3 p2 |  ^8 i0 P; C  H
ln -s asm-$2 asm    //ln -s  include/asm-arm   asm. l9 c! I+ t/ ^* u8 @# V
fi
! w3 M* j3 |# ]4 }" G1 E8 \( `+ d5 r' }5 I5 M

9 G' z* v) W4 t: W; J6 ?1 D' Vrm -f asm-$2/arch            //删除include/asm-arm/arch
2 t& T% I' [& o  s
0 U8 j( _6 V3 T: Q$ T$ x+ {% c& M" z
if [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面
" Z+ a& h3 M) s- g, Uln -s ${LNPREFIX}arch-$3 asm-$2/arch   8 j# L$ f* g) A( N
else
% O1 _$ k/ W$ Z; @ln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
/ J( p( Q- |7 ~' z# a/ H% Nfi3 ?# S+ ]: o# M3 k, u+ T7 `6 w
4 J  {1 J1 B3 D9 e0 ?
0 e& x# `2 D" S6 C9 r4 V
if [ "$2" = "arm" ] ; then
: u$ i: [9 X. h3 z  y5 a2 _* D2 [rm -f asm-$2/proc  //删除include/asm-arm/proc2 |8 Y( K$ p2 x* x2 l
ln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro
: t$ p, \/ T$ yfi
: k# I, o6 H( j/ Z1 ~! [: e& K! W/ `! Q! p

' ~9 B5 s- z8 }; y; z: }. z#5 z) b$ ^) P0 y5 S4 C
# Create include file for Make- H: ?( h  Q% \0 a; r* J4 E
#
: y! h9 z2 O+ K* @5 J0 J. Gecho "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk
- x$ R8 }& N# I; r0 I9 v8 Recho "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk
: H& k- E3 A2 W+ L% a% ?echo "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk5 `: N. n: ]% q% i- Z# [7 @
+ `0 t8 i4 {9 Q& [8 w# d
; h% l/ h9 @; @
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk5 W9 K+ @# E# {+ i5 K4 ~
//VERDOR=samaung,放入include/config.mk
# C* T1 I0 Z8 [3 y' b3 d[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk# d) E( ^$ o& T! x; c
//SOC=s3c24x0,放入include/config.mk
; C3 Q. o* l$ F  D' S, J7 d4 L## L$ x8 j4 S9 Y6 F" Q6 ]
# Create board specific header file/ A; S& ]; ?/ x1 O4 G8 m
#
) U0 u0 B. M! k+ rif [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no
) r0 `& c! z% o( t1 Pthen+ U! T9 {' b% l1 [
echo >> config.h5 @: u+ y3 M& r2 Z
else% r" u: u4 ~& ?, X( f& d3 p
> config.h  #产生config.h文件,位于include目录下- Y! o% ~, X& A& W: l/ ]
echo "/* Automatically generated - do not edit */" >>config.h- w2 S1 H1 X5 _* d$ |6 ?
2 g( }2 n+ U' d% c4 m/ ^
' o; d0 j  o, w- ~. W& I
for i in ${TARGETS} ; do" ?8 i: Y! o* _
echo "#define CONFIG_MK_${i} 1" >>config.h ;' R. ^8 x* f$ F/ l
//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件
( |7 W- H( j2 j7 L2 m$ `done
9 r. b/ ]9 p5 O, J* c% m  e& @$ f4 c0 L9 G
8 \. y# L# Z1 O; L& E6 H
echo "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>
) @3 @( ^* s2 {7 y0 O+ uecho "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>
0 b% L$ H+ _. r7 S. I# j- ^% c& e$ H& a
exit 0
3.上面红色部分就是改变部分。到现实中的源代码看看,
大家执行完make gec2440_config之后,到源代码看看。$ A+ E& O7 r1 ^* ^! M% J& n: t0 D
第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,
并加入include/config.mk文件中,
我的config.mk文件内容如下:
ARCH   = arm; [: n( ?( S7 A: s3 Z# {. V
  CPU    = arm920t9 F+ I4 V; p) \$ \: l
  BOARD  = gec2440, f; x6 r3 W( t1 Q0 E" s9 n
  VENDOR = samsung
9 V2 X+ F0 M9 g" O. B  SOC    = s3c24x0- k6 }/ }# F5 l3 b: U# Y
第二就是看一下链接文件,我的情况如下:
进入include目录下:
#ll
lrwxrwxrwx  1 root root      7 04-01 21:36 asm -> asm-arm
进入include/asm-arm目录下:
lrwxrwxrwx 1 root root     12 04-01 21:36 arch -> arch-s3c24x0
............
lrwxrwxrwx 1 root root      9 04-01 21:36 proc -> proc-armv
第三就是在include目录下产生新文件:config.h.里面包含几个头文件,我的是:   /* Automatically generated - do not edit */# Q6 z2 o: v' l7 x# d, x+ N1 H
  #include <configs/gec2440.h>, g5 x) w- D. r. m) p
  #include <asm/config.h>         

  J6 `9 N, d; `$ Z  v! S

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-4-23 15:30 , Processed in 0.067621 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表