一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3659|回复: 0

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

[复制链接]
发表于 2017-5-2 16:49 | 显示全部楼层 |阅读模式
! x' ]- U* N! ?+ Q/ T1 {
随便找个uboot源代码就可以啦。
  首先进入顶层Makefile。有很多相对不同板子的配置,如:
gec2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t gec2440 samsung s3c24x0
: Q+ O8 @2 G  S; R# [2 [
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...# B$ H5 ^2 A3 C; ?. z+ 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的内容:

! h" E4 N0 F- H3 A0 o& y8 uAPPEND=no # 这里记得APPEND初值为no7 c- R( U, E: {5 A6 t& {. Q
BOARD_NAME="", R4 E3 n; x, P& F7 k2 Z
TARGETS=""6 n7 h5 t  Y  G! L& T" j7 E
* m( h' |/ u" [, B1 c
#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t/ o- C" K+ F  |

0 B, {4 Q3 {. n2 L6 D5 {while [ $# -gt 0 ] ; do
7 ^/ B7 [# Z$ N# V2 G5 Wcase "$1" in
7 J2 W( U; n5 V4 h3 K: h; l--) shift ; break ;;7 Q9 s  J/ [$ [' W$ u' S
-a) shift ; APPEND=yes ;;
6 }; x4 f2 f, X& m, }-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
/ _2 H/ w7 x. ?! i! L2 {# K-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
4 I" ^4 B7 ]2 G: D& m: B( y0 n! b1 f*)  break ;;
1 X5 D+ }# n: B9 z/ V8 Oesac
: e! o. _$ d/ U8 o8 m: A9 \done/ I8 N, k% n* G1 t5 i9 }8 o+ P+ Z3 [
0 q$ |2 Z: \5 w7 l0 B& g, u

' E" {8 u# H+ \/ b6 J2 s) ^
; m0 o0 Q" c4 O4 A/ J$ A8 e: t* C& R. a8 c" _+ p, q
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec2440
- h. m' C5 p* H( X  N* e" o* X1 W- Y" x% a

, E( M( C  A3 W8 `3 n' h[ $# -lt 4 ] && exit 1+ E% ]: E8 X2 `5 e* C
[ $# -gt 6 ] && exit 1: \' b# D) N$ B( k* N4 `6 s# |6 b- X

: c& @& ^: g9 T6 f2 U  N# }  T
4 G  k( t! a  X8 F9 X& Y' Xif [ "${ARCH}" -a "${ARCH}" != "$2" ]; then: t0 M+ y) _0 K/ A& O
echo "Failed: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2; H6 G- Y2 U$ x' o$ O
exit 1
  J$ U0 x& i) s2 u5 Ifi; m$ N; Z; t0 l4 @' u: i6 `

6 W& @; f) _* B: y! S
& ^6 H1 p" ^5 ~) ?//在终端打印Config  for gec2440  board....# j2 Q+ R$ k! A% R2 b0 D% J! S
echo "Configuring for ${BOARD_NAME} board..."
7 z3 R# P+ e9 t9 X. v) t4 }" L% L8 b" S9 X3 I
$ X) D6 k: @# B5 j6 L2 F
#9 F( o% u( Y: @" V
# 产生链接文件
' o. Y& F- L" n" e: Q( }( E: R#3 |$ ]8 b% n# I
if [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译9 p! }. w! u- _9 F
mkdir -p ${OBJTREE}/include
  U( l% S! b# R! Smkdir -p ${OBJTREE}/include2
9 J1 j' }; L5 m6 n$ {* k; scd ${OBJTREE}/include2" F/ n" Q0 K( b+ O% ?6 H
rm -f asm
! r4 Y% s, r7 Q! e4 K. Yln -s ${SRCTREE}/include/asm-$2 asm
" D# b& C4 A0 J. m5 a, V5 c5 hLNPREFIX="../../include2/asm/"
/ Y6 n* l6 i' |# zcd ../include; N6 v1 K' y# ?  `9 L6 M) r
rm -rf asm-$2
* X% G8 N& A5 K; y& _8 h7 Brm -f asm
! d( i3 P, M5 {. H& s9 [* C* Vmkdir asm-$28 {% o3 D. D9 @) C' i
ln -s asm-$2 asm# B' O# r9 U- W- v" Q/ ~4 }; i
: x/ a; X" k) P/ H' m. D* B5 s
+ a. @$ o8 r: e( k  q
else# ^. A' T- v7 c8 ~
cd ./include    //进入include
) u* C0 J0 o/ z+ j# `rm -f asm1 x6 g1 t1 g0 t, U) N6 }
ln -s asm-$2 asm    //ln -s  include/asm-arm   asm& ]" u. Q2 X3 V4 B
fi
3 s$ y; A8 [; D# O6 v0 V# k
" _! ?# F, ?7 I% I2 ]6 h  f& p+ I
  ]! \7 ^' N, c: jrm -f asm-$2/arch            //删除include/asm-arm/arch; ^$ X/ b; Q+ a( ^& S7 P2 }% z( y
6 w) q$ |* c; v$ H( F* m* B

0 a, E8 e. E/ O1 p& `# [; _9 Cif [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面
- o7 f) Q1 t1 k  j- H4 f8 Lln -s ${LNPREFIX}arch-$3 asm-$2/arch   
) G% P5 m. H4 h8 Oelse8 L( t4 d) e, r  ]6 z# A
ln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
" p8 U. e' {. z& w% Ifi
, y% V& g* w6 i
2 U8 }% n5 @) e" [- ^, a9 S/ ]- C4 r# K: i( r+ N( \2 e
if [ "$2" = "arm" ] ; then
/ X" K& R: n* G% P, F* [rm -f asm-$2/proc  //删除include/asm-arm/proc2 E& G8 w  p6 P9 J
ln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro
+ _! ]+ c4 T+ J6 n7 }5 rfi" R! i$ J+ t7 d! q4 H9 @

( N3 q: ?/ h8 k% V* i7 w, Y) }6 h8 Q% H7 V; N( q
#
9 B7 S7 E3 A: O3 I- h, C# Create include file for Make
% E/ a) n$ a( t& R* k9 n' {#
9 A6 i- Z7 j% W$ ~% [1 gecho "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk" N5 g' @) a8 a8 |! J
echo "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk
1 _/ a. c& L1 o$ A) ~+ S. Jecho "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk2 K7 e$ M( K* \1 ~' W3 S
9 }6 h3 _1 F5 K2 C$ k

  ]" d) Q6 ]' @+ P* E- _7 d[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
. Q9 ?3 N7 B0 b! o4 Q. ?! G//VERDOR=samaung,放入include/config.mk$ G' O$ h( g- c0 _
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
9 P7 c' f: z% Q6 B//SOC=s3c24x0,放入include/config.mk+ b; G0 Z. b) {6 ]! J1 d
#
8 n/ {+ S1 r6 i5 m+ o, H9 w# Create board specific header file
. Q, @7 C& O, ^6 h( Q0 F#6 L6 D- K" e8 z$ I* I
if [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no
1 K$ |: ^' A0 u( a% Lthen
& P! l2 d; U- n) y, \echo >> config.h
3 X& w- C( _& C  [! Qelse3 K6 x4 e5 a1 u; s8 R
> config.h  #产生config.h文件,位于include目录下+ Y- G" T$ m0 o) ~/ m
echo "/* Automatically generated - do not edit */" >>config.h/ X- D) z" E! r9 k7 E

6 p4 o/ Y$ {, X7 K
; J0 [. X2 Z( pfor i in ${TARGETS} ; do
$ w  i! S1 y/ `! U% P) k6 e9 ?( T# fecho "#define CONFIG_MK_${i} 1" >>config.h ;
  g+ j- z& Z# m2 O- [//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件- m9 }5 ~& f6 Z; y1 q1 ^
done
3 T$ S, G  W! k& q8 P) s6 b5 g7 D% @, |: X/ F) x8 y

5 o5 k9 [+ |- o/ Y; mecho "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>5 U& T" W' x, g3 k6 l3 ~
echo "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>5 h9 D! _0 S  x: u
( i  B0 C1 x  }* c( H9 J& [: m) ~
exit 0
3.上面红色部分就是改变部分。到现实中的源代码看看,
大家执行完make gec2440_config之后,到源代码看看。9 {- e, q% v9 f$ n& h- M; a
第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,
并加入include/config.mk文件中,
我的config.mk文件内容如下:
ARCH   = arm9 e" a! N" p8 K) N  G& ^  V5 _* I; |
  CPU    = arm920t; M. h$ i, A3 v# n
  BOARD  = gec2440
  ]2 y( z8 _* G# _7 ^. Y% e  VENDOR = samsung5 ?& d0 d% k0 w  }
  SOC    = s3c24x0
' j+ w) L* T% f/ T/ ?* i$ G
第二就是看一下链接文件,我的情况如下:
进入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 */( P3 y- j, y5 ^7 ]+ {: Y
  #include <configs/gec2440.h>
& h$ n0 [2 V/ r* I7 n+ R# ]  #include <asm/config.h>         
- o! Z: M& M6 Y, s

本版积分规则

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

GMT+8, 2025-10-27 12:57 , Processed in 0.029611 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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