一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

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

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

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

. ^) C/ p  |$ A
随便找个uboot源代码就可以啦。
  首先进入顶层Makefile。有很多相对不同板子的配置,如:
gec2440_config:unconfig
@$(MKCONFIG) $(@:_config=) ARM arm920t gec2440 samsung s3c24x0
; G0 a3 \2 @2 f: ~+ I9 s! o1 q
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...3 W5 c6 H- }* O, i- x9 x
     现在看看有发生那些变化。由于上面的命令相当于执行./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的内容:
. n3 m! T! {  B0 _& c% ]- i
APPEND=no # 这里记得APPEND初值为no
. L  L* {- n1 M, Q: a/ cBOARD_NAME=""% X6 `: P1 P  f, ]
TARGETS=""
5 O( p* E  Y9 e! b/ _- J
! t% L4 z* Y9 R7 Q9 z; H/ ]# ~& F7 x#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t
) H* W2 f7 P) e- S
$ W) K, U9 O5 D; N, ^while [ $# -gt 0 ] ; do: |7 v1 s) g" o5 i& A4 q' w& l
case "$1" in
- r; b% @9 d- P* P1 o8 e  j--) shift ; break ;;
2 [4 e$ W1 p4 J-a) shift ; APPEND=yes ;;( [2 M9 B- ?% j+ `; [. k
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;9 O* Z/ i! R  _3 Q, h) Y2 `
-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;  F! P9 g% \3 u6 g1 M, _
*)  break ;;
3 b* _8 y6 d" z- s) Fesac! B! C  f+ X2 ?
done
- v, {* z" v& K, m+ H( x% H( r, y, J. y* Q! S7 \9 p& b1 ?
: T3 b. C$ }/ D( g/ {+ R

, G+ a- ~$ W2 k# x0 Z* M" E! v7 G6 Y
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec24406 B6 P: [8 o7 O* d
, I' R3 l7 s/ r0 U
. t+ v5 C' t8 r6 c9 h9 {3 Q
[ $# -lt 4 ] && exit 1
3 i+ t- b4 S# N' t& }- ^[ $# -gt 6 ] && exit 17 b% ~+ X8 j! y* b  t! P/ u
$ \" H. M( e7 R% z

; I2 o. a9 h5 A7 c  x- A1 h" T& Mif [ "${ARCH}" -a "${ARCH}" != "$2" ]; then) v+ J- x; `& M3 q& n5 W
echo "FaiLED: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2
0 u- t0 n. C9 Fexit 1, r2 }, ^/ D* Y
fi, {2 \5 ]' g, L* C

( j/ V; ]6 {, \1 U2 s& N, x% E5 O: q
7 B+ _1 E  q; b, K2 V//在终端打印Config  for gec2440  board....
; G4 a. r: ]! S# Mecho "Configuring for ${BOARD_NAME} board..."9 R. {9 j- V7 D5 k, @1 C" y

2 x9 i" L- O5 u& u
8 c" G" D* T  ^; O) v" s* |" N- l2 v#
3 b1 {3 I: ~1 r1 R8 _% `: J# 产生链接文件
( K3 q8 u& W; p. S#
. O* q8 b9 R8 ]' h- L5 oif [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译6 P, T4 l. Q7 c* v# v- A' H, s
mkdir -p ${OBJTREE}/include
0 j2 r/ Z9 |. K+ i( a, X3 L; n2 _mkdir -p ${OBJTREE}/include2
/ q( g/ R& {: R6 X1 Ocd ${OBJTREE}/include2
7 t; [1 x2 k- N; Jrm -f asm7 a. Z; a; O. i  i3 z+ }
ln -s ${SRCTREE}/include/asm-$2 asm5 i4 ~- v# [! g- T' ?+ Z, E5 _
LNPREFIX="../../include2/asm/"2 k1 g3 F5 E: t& g* X0 F3 j
cd ../include6 v" V3 ^7 [7 \) y& G
rm -rf asm-$2: O6 l2 H: D) D
rm -f asm1 p4 w/ a) Y% b/ P
mkdir asm-$2
9 ~" X6 }9 c& N" v: z7 Vln -s asm-$2 asm
1 G; y0 I% k. V% |6 [  t$ ?. o+ V1 k0 \) f
% P( A2 `( q% `/ ^& J4 f  I2 p
else
2 v- s+ P. ^4 Z3 l8 \- @( z; \cd ./include    //进入include
1 J& Y! {3 u9 b/ ?) ~) b9 nrm -f asm
# X- V- _9 S* a, R& zln -s asm-$2 asm    //ln -s  include/asm-arm   asm, w3 Z7 B- i, Z& a. {8 F2 F3 c
fi
! E4 I$ L' @1 s& V9 _6 {- {/ l
: K' W* G4 l& }0 n  R* d0 M4 C
0 T3 q  k  T2 [rm -f asm-$2/arch            //删除include/asm-arm/arch
7 ~3 r' k# b$ s9 c4 v; q7 M. Q8 f( t0 f# {) v0 d! X, o

! `% C; l1 q" qif [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面
0 U0 n! j+ I8 b) Q0 Y! j+ d/ gln -s ${LNPREFIX}arch-$3 asm-$2/arch   4 B, o6 u3 ~5 T5 ?( [3 W  X
else! @! j" `, }( V% H' s- p2 x
ln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
. z% \6 Z* N/ g, ~fi
+ K) p* |$ A. {1 h$ p
3 ~7 f4 N( d, W1 }' S( T6 \1 u! _+ f7 J" Z* D$ ?& f5 U
if [ "$2" = "arm" ] ; then- y5 H. S+ s/ X6 L
rm -f asm-$2/proc  //删除include/asm-arm/proc
; @+ v: s4 R8 n8 D6 ?5 y; E- hln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro. P; @2 q% l, m, c
fi/ @5 b* g5 k2 _7 h$ f

! {5 ~- u# y, x6 v! q1 n: Q$ P( C) z: ?0 w+ h1 Z
#1 y# |3 p. J" O# ^, Q
# Create include file for Make
* h4 }! s& ~8 @" l' Z$ E#$ g% L' V: R3 B
echo "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk
4 V" E6 P$ [* }5 A4 Decho "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk
- b8 e6 v* @! Hecho "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk
7 P! r# {7 ^& ^) c+ X9 n" h6 R! d: |# g& c0 t
. O4 Z2 _% \8 M( G- u. d7 a
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
/ P* T$ v  c+ W//VERDOR=samaung,放入include/config.mk
7 V0 a/ [, F, q. U[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk' B5 J5 Q* ]; U4 Y6 C5 E% W
//SOC=s3c24x0,放入include/config.mk
2 ^$ H: Z& k% c9 s1 r8 v8 R#
3 {; B* \8 I" L3 O# Create board specific header file- T& j( h: ^0 |
#; ?7 D  o( X6 N/ l7 `* {
if [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no
  `7 \3 _1 h1 @9 D) U$ B/ vthen
3 j' |  {" J; S$ U) M( Y7 Pecho >> config.h
7 ]& q/ w+ b7 l7 z) b) @8 X- Xelse  q: X/ t. o3 S' w# |1 H' p' u6 K# B
> config.h  #产生config.h文件,位于include目录下: I" l5 J* @8 R& a
echo "/* Automatically generated - do not edit */" >>config.h5 ?# q0 u4 P+ Q/ D6 N3 J

  h1 z, W! Z% w6 u+ _6 G1 Z4 i6 T2 x+ \% [) L! |6 L
for i in ${TARGETS} ; do
. K, l: J7 Z4 T4 \* Recho "#define CONFIG_MK_${i} 1" >>config.h ;
" o& j2 V1 Y, ?; O' A( O//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件
3 s$ w. S& J3 W) o6 zdone
2 _4 T) N4 V; @; X0 ]  r8 j2 x. e2 I2 h0 q+ q: _

4 w) W7 G  L* \6 h7 ?( decho "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>: X5 [4 ]& h1 }# F) u
echo "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>6 m# e) U# a6 R1 O& a6 N  h: P
1 t0 W7 s1 d3 d& b
exit 0
3.上面红色部分就是改变部分。到现实中的源代码看看,
大家执行完make gec2440_config之后,到源代码看看。3 D3 G' O# v7 R0 K: q* C
第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,
并加入include/config.mk文件中,
我的config.mk文件内容如下:
ARCH   = arm/ U# a6 U: }% F& M& w2 A4 `
  CPU    = arm920t" I  f+ |, Q0 m
  BOARD  = gec2440: R) F& x# N3 l. A
  VENDOR = samsung2 q0 {. K5 l- t' B
  SOC    = s3c24x0
# F! z4 v0 ]- T! ?1 k6 n# o: a* a
第二就是看一下链接文件,我的情况如下:
进入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 */
$ @; V4 @. i8 I* z2 {4 `  #include <configs/gec2440.h>" C2 G3 a6 W& O6 w: A, R
  #include <asm/config.h>         

  z8 o7 D3 Q1 n* o

本版积分规则

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

GMT+8, 2025-4-28 04:18 , Processed in 0.045148 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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