一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4076|回复: 0

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

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

) b" d' D! o% ]* j4 @) L. ^* H
随便找个uboot源代码就可以啦。
  首先进入顶层Makefile。有很多相对不同板子的配置,如:
gec2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t gec2440 samsung s3c24x0

1 @2 s% n0 ]4 S' z
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...; p7 F; [/ T5 J; a3 G1 r
     现在看看有发生那些变化。由于上面的命令相当于执行./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的内容:

9 A) q2 D# U( f& x/ q5 bAPPEND=no # 这里记得APPEND初值为no/ i$ `' n1 f6 s  T1 `$ i
BOARD_NAME="", p+ d. i, F9 @  c3 w: u
TARGETS=""5 P, ~* t1 j6 G2 k7 i, r5 J6 ]
- g# S9 h' B  `
#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t9 s5 L, c9 u8 ]6 N: X2 m( r

; U2 _+ H7 E1 u7 S- z- Cwhile [ $# -gt 0 ] ; do9 K3 Z9 w* ^/ K; M  `6 V
case "$1" in
1 I" z- D  J: t% R2 m. r' R$ m) t--) shift ; break ;;
6 V0 }1 m5 q; a8 B/ F4 D+ e4 l-a) shift ; APPEND=yes ;;  }" ]3 m- n% @5 o% M' w8 p
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
' d  N2 G2 [7 O3 K" L8 ]$ r-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
) _; _( v1 N3 A, c! H/ P- S*)  break ;;
3 J7 {2 t; g. M2 j  M7 vesac  O+ x! Q4 D% R7 f2 i
done
; v2 l9 }! i9 l" ~7 ~
" H# S8 ~+ ]$ e* @
  `, Z% X/ G) X5 N3 [" O, d2 b
9 Y2 H, i& z% c7 a5 V1 Y4 Y: @/ E3 R# c
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec2440
: j! b* N; n  B: E  J  s3 @7 k/ d8 L2 M7 P! x+ B# v
+ a1 M4 Z/ L! Y1 N& d
[ $# -lt 4 ] && exit 1
9 \# T9 g' A% r4 M! [, k9 P[ $# -gt 6 ] && exit 1: s% O) ]6 h4 ~
4 F% b( p  C+ H7 a) b/ d
- S0 m8 }# L$ S. t
if [ "${ARCH}" -a "${ARCH}" != "$2" ]; then
" {$ a- e: s/ m( v! zecho "Failed: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2
6 k5 e& u# d" Mexit 1
. B- o+ \- O/ O+ l1 w) Gfi
; w* N% g; m5 A9 u+ F' y: G+ w+ c* \5 A8 {
1 Q; a4 U/ r: d5 B, {
//在终端打印Config  for gec2440  board....
# h! T9 O2 {+ r" ?echo "Configuring for ${BOARD_NAME} board...". J$ T5 G1 W) Y$ D
3 f0 }9 Z0 |) d! g
5 {7 r: t9 O+ D/ G# K4 N+ Y
#
" @+ S: F' d5 n7 L5 f  B4 i# 产生链接文件0 o2 b5 B1 I- j: v
#
1 |( x1 k$ c* ?( A6 |% y* Fif [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译; m' z  q! B! ^/ A' ?2 ~1 k, d
mkdir -p ${OBJTREE}/include7 s$ x* L% s& m3 o% c
mkdir -p ${OBJTREE}/include29 _/ U8 N" [" a: j
cd ${OBJTREE}/include25 X+ b# f! o4 N9 R" _" ^  d' Z
rm -f asm/ p/ C4 p$ Y! v  ?) T4 r4 }* P
ln -s ${SRCTREE}/include/asm-$2 asm0 E. ^6 n1 i7 ]/ Z! k
LNPREFIX="../../include2/asm/"
  A8 C6 C, m! u) T& Z$ e( pcd ../include; m( o; U! x- }3 `1 o7 M3 H
rm -rf asm-$2* Z8 x% L7 w# n+ }- P  l, J9 B
rm -f asm
; C; M$ U1 V2 g' p/ {mkdir asm-$25 z$ s6 X$ L) e
ln -s asm-$2 asm2 s9 K: R: H0 J# P6 W7 t) z

" N4 y4 G7 A, J1 F/ J  D& A
, [% y: [! m  ~* t) x6 eelse
  R3 |/ r3 B- Mcd ./include    //进入include
! r4 [5 ^$ r3 f0 R2 R: ]# Orm -f asm
' |8 w5 U( e9 l2 @5 E! Z  `& Tln -s asm-$2 asm    //ln -s  include/asm-arm   asm5 N/ f3 Y4 B$ X- U5 q4 Q
fi
" o5 @9 T; N; ]. {; R: N0 g& b/ u2 m3 P5 _- A6 w( v% f; ^; W
+ {; }& Q9 f9 Q& u0 x0 x
rm -f asm-$2/arch            //删除include/asm-arm/arch+ R2 U% y* N4 {" H! p2 f. S

" C0 M5 {6 u" s6 a* o; V4 A5 m0 E$ D+ y* \1 P1 Y& E. v
if [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面
. f. T5 ^5 ?" d% s6 xln -s ${LNPREFIX}arch-$3 asm-$2/arch   6 f- P2 p) D# l$ Y1 x; a! y$ n
else
( l, t( B2 h! Z5 j3 Zln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
/ J4 E8 E2 x) f' Q! b9 A3 pfi
) i8 \2 ]/ ^: V' Z) Q5 ]5 r8 A! V% d0 g" k$ O

: O3 S* D+ }( z' X. y0 N2 zif [ "$2" = "arm" ] ; then
/ T2 L5 G7 I$ p: Y2 Yrm -f asm-$2/proc  //删除include/asm-arm/proc* B/ i& b. T1 _- D$ [# r( S( H/ o
ln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro$ H: p$ ~! `# Q( B$ ], h. Q3 o
fi' o* j5 }4 M  l; r; i, W, x

& _/ G# r' O: _: g1 A# {7 C5 O& N1 c, K+ S6 `
#
2 }; N" Z3 u6 w/ ?8 _# t# Create include file for Make
7 z, r1 }: w& y) @. |#% s1 z* U+ N8 t; {6 ^. F
echo "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk
: {  X/ l* N# W% @. E& Xecho "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk
7 H" }/ D: w1 H- o% A8 yecho "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk, A) ~3 E/ ~; C$ }% {

9 x0 N6 F) f+ S
" X7 x3 Y4 }1 y6 p- q: B. x[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk- t3 V1 I* G* o$ Y& I' n
//VERDOR=samaung,放入include/config.mk5 P$ r; M+ Q) C8 Z. l1 z( i1 M- K
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
8 o5 ]! F' S* Z3 S1 K, i( t//SOC=s3c24x0,放入include/config.mk
9 _! s0 }9 C/ y, i6 q" U#
+ V" u' f' _6 a% T8 i# Create board specific header file
. q  L9 O- g9 a- [5 B9 n#; k6 b( {7 i6 e' H' A
if [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no
# q) l& f* A6 f1 D# ^2 [% `then
+ U/ k4 w& |- s1 d) s# Necho >> config.h7 ~3 d: P' j2 {# `
else0 A+ b& U$ y$ W% k" g5 T
> config.h  #产生config.h文件,位于include目录下
- P, [1 h9 C: ^: T2 g9 yecho "/* Automatically generated - do not edit */" >>config.h
8 ~1 x+ }( q9 L5 C
% }( ?7 z1 @" ~8 V4 W. Q! |! x; u+ [
for i in ${TARGETS} ; do
3 d' u: T, d' v. Y3 ~echo "#define CONFIG_MK_${i} 1" >>config.h ;# n  g* p' G% G6 R. d  I
//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件; r# v+ w3 }! Q9 H
done$ D9 r9 N; X% a6 S

) |9 U5 j0 |5 J6 b7 U( P( O' Y0 s' }  a$ J% i
echo "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>
% Y) @* @0 U( |; R: t# Qecho "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>8 o1 P  v4 C; l, ?' u" ^& `

( E9 X( s; }- _1 Texit 0
3.上面红色部分就是改变部分。到现实中的源代码看看,
大家执行完make gec2440_config之后,到源代码看看。
, h# A7 d5 Q5 ]9 v
第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,
并加入include/config.mk文件中,
我的config.mk文件内容如下:
ARCH   = arm
2 k( k/ H9 R) e% }/ H. {6 J* i: b  CPU    = arm920t+ J: k3 L. V* _  x0 J3 x- D# ]
  BOARD  = gec2440
' m  f3 ^  l1 J  VENDOR = samsung% h+ h2 H7 [$ F. V' v+ b. W# ?, `
  SOC    = s3c24x0, S3 h( X$ a7 [9 X: J3 x: @7 j  b  @
第二就是看一下链接文件,我的情况如下:
进入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 */
5 p* z: c  N2 _+ D( j  #include <configs/gec2440.h>7 T' Z& J) W" J  C3 O
  #include <asm/config.h>         

* r3 I' C; N5 M" v! x" K- t

本版积分规则

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

GMT+8, 2026-4-17 16:28 , Processed in 0.030874 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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