一乐电子

一乐电子百科

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

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

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

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

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

/ [. h8 z' O3 a6 z0 h) }# y
随便找个uboot源代码就可以啦。
  首先进入顶层Makefile。有很多相对不同板子的配置,如:
gec2440_config:unconfig
@$(MKCONFIG) $(@:_config=) ARM arm920t gec2440 samsung s3c24x0
# M) A6 A* \4 w6 N
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...
6 P8 q5 O# {4 L# V3 t/ K2 ]
     现在看看有发生那些变化。由于上面的命令相当于执行./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的内容:

- r* S) J. S( pAPPEND=no # 这里记得APPEND初值为no0 K! ^7 X  g) ?! ]* P/ J
BOARD_NAME="") t( R5 T  {# i1 I3 w# I5 G9 f9 m
TARGETS=""; ?! \. ?$ p( E8 v. j0 @2 j6 D5 _
" @# v/ U% J. E5 R6 v; q: Z5 A
#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t
& m* L3 f6 r% Q0 x9 X# O+ i; G; q0 Q; _7 v7 P: U' c" b- u6 u
while [ $# -gt 0 ] ; do6 P  g2 H% z/ }- v
case "$1" in: J; t/ ^) r1 v$ R/ ?
--) shift ; break ;;3 g, m9 V3 Q  i
-a) shift ; APPEND=yes ;;
4 e; ?4 ^: R$ T# q6 v  i. f-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
$ _: w; \; _5 \' M/ ~* d-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
/ [* M) y" n4 l: f9 [! y*)  break ;;+ X4 _3 t! C( N2 H0 T$ [8 ?
esac
% C! j& ]: B* a8 gdone
/ K5 [1 @  R  j7 K) k! p; V; m1 }# K. Z. ?! N9 n

, y+ n- j. T2 j. H6 c7 W" M% T# _" O
5 r: E( ^# {4 m
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec24400 H; y, y4 d0 h* u2 h; O6 p

. Q  Y/ D5 |) y! F" L6 b0 l
& {% c- i" z7 w3 f" B[ $# -lt 4 ] && exit 1
' |, ?3 ?- n$ V0 _8 L2 i" f5 F* K[ $# -gt 6 ] && exit 1- T; p; L3 X- z# q+ L
! H; a- A3 {5 k( Z. Y
& t( k5 p+ i9 X4 Q- B# b5 f! y5 U
if [ "${ARCH}" -a "${ARCH}" != "$2" ]; then
7 b" P" {( V# `: z  P  hecho "FaiLED: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2
3 E' C* {% ~8 Y( Oexit 1
% G% s2 K+ r4 Yfi2 S# K8 e# x1 Y2 Q0 N( Z2 f9 c
, N8 o0 Y" {/ }, U+ V. {
. I- L! V5 R' `) O9 v3 t2 S# h' [5 G
//在终端打印Config  for gec2440  board....* }$ R; w+ o/ ^8 }4 x
echo "Configuring for ${BOARD_NAME} board...") [6 f# ?! t# W3 p# u
2 `2 n0 `( }* U. n# j2 \- C5 ^, J  d
- o  }& F! }) \! h2 U# B- _
#
( h" W4 I; O3 Q. ~# 产生链接文件/ {2 A& E6 k; X1 ]% q. w8 c' r
#6 s: i( k  q1 ]. O/ Q
if [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译
$ @! s) ~; J8 \, P& umkdir -p ${OBJTREE}/include: R& b1 b- r" u; [, \) I- o8 N
mkdir -p ${OBJTREE}/include2
( e" L& f1 I/ R9 r0 g$ O  \cd ${OBJTREE}/include2
1 i0 V+ D1 e. Q/ _9 g9 Frm -f asm/ K( ~2 s, w% S/ @
ln -s ${SRCTREE}/include/asm-$2 asm( q; R! E& d9 n
LNPREFIX="../../include2/asm/"
% D9 p) l/ e5 L+ E/ T8 C% P. Ycd ../include
5 x% @2 p; v8 X% n+ drm -rf asm-$2
8 |1 a0 ]1 b7 G5 k: h- ]% k" c2 w+ [0 wrm -f asm
" M7 I( i4 J& R1 O# {9 i1 M+ Q2 Qmkdir asm-$2
8 f& a, r* `- j. _ln -s asm-$2 asm# k. }, L. l9 u( V! n& j6 Y4 w7 d# X5 e! c
  `; [2 ^2 e! d1 w/ F. H

- z! K* k/ J& Z% q; R: R$ qelse$ ^4 R! v! T  d7 N
cd ./include    //进入include' A2 h  Y. z7 S: {) B. P5 o+ J& @
rm -f asm
- v) C- F/ Q9 [, n, x5 C  v% }ln -s asm-$2 asm    //ln -s  include/asm-arm   asm( C# [% q5 ]' g' r: Z
fi2 d& g! `" \/ N5 O
0 f# E, V1 w2 ^

; U# p# o/ u5 b7 _! U5 ?: J/ qrm -f asm-$2/arch            //删除include/asm-arm/arch
: i5 f( O# |1 \0 A1 r
/ V! _' F) c) s" Y( \) H" Z; \" @( E$ ?
if [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面
0 @. o- @- q! D. f* E+ \! K: {ln -s ${LNPREFIX}arch-$3 asm-$2/arch   
& ]+ U' Q' c- L; W* C2 Telse9 V2 E1 U# m$ i* S, e: F
ln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
, n" v0 |, P$ Ofi! f) O1 J! [; p/ w: F
: T. P7 _# ?$ w
) S3 O5 _4 j1 ?+ K5 Y
if [ "$2" = "arm" ] ; then
; B* e( ^* T/ D/ V8 g1 O& |1 q3 mrm -f asm-$2/proc  //删除include/asm-arm/proc
) A+ F9 ~2 q" s" H, V  `ln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro2 w- ^) y; m& T& {& _
fi6 m1 l7 Y! h2 H, q

; u" p. A$ s% C9 b$ p0 {* G4 j# T/ }5 g" f# `$ q3 e
#( A6 ~: L$ B7 c% f  n3 V- E
# Create include file for Make
& R- N1 C7 s) L1 ]" ~4 Y' S% u#
$ ~+ m/ Z4 l8 n2 `* X* n* Zecho "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk6 W9 j* L9 O* V7 D6 k! X
echo "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk
5 I; w4 K% t0 h/ |# l% lecho "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk
  F& L& q' d# T% P& ~# ^" ^2 d5 X" l" y- T9 J! m* m
8 \. o2 T3 ]& K) T# {% m% G
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
: X( c% j  l4 p( U1 b5 e- K//VERDOR=samaung,放入include/config.mk
4 _2 p; z1 m! l[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk$ N! _3 T4 }9 P2 H  L3 y3 [" e$ {; }- `
//SOC=s3c24x0,放入include/config.mk
1 o3 G7 Z1 A! D1 B#
! R' m% u6 Q, `0 N( P: @1 Q( m; K. @7 H# Create board specific header file
  K1 @4 Y. `: R1 P1 J* f2 w#( Z, U0 l. i8 f
if [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no
+ Q) o8 \9 ~: Fthen
  v$ J$ a$ |- b% e2 C0 n3 becho >> config.h
& z3 A2 E5 W& S7 e9 S, S( B7 O$ S. I+ }else( h0 y+ g7 I; d3 w
> config.h  #产生config.h文件,位于include目录下
& ~8 s# |2 B& F  mecho "/* Automatically generated - do not edit */" >>config.h) m8 Z- Z: P- R; n6 @

- v8 E' d. Z+ q6 |: e
# s+ w. v; Z9 m, N3 w* I/ e( I7 [for i in ${TARGETS} ; do
8 h9 p4 H% i+ R/ o, e1 M- t% A4 u$ K# `; qecho "#define CONFIG_MK_${i} 1" >>config.h ;
$ E2 n6 m* z: b  k- o//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件
/ W6 N) f. D( v, E  @done! X9 E/ u; ?* b2 ?5 S/ [# i9 d

& |4 g! ^0 Q( m9 z4 z9 F( A: I/ Q. N3 l1 w! i
echo "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>2 k6 e0 a1 X- x1 W2 A' M+ R, ]
echo "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>
3 M, {/ {2 e  E7 H, R) P$ q# I2 V
exit 0
3.上面红色部分就是改变部分。到现实中的源代码看看,
大家执行完make gec2440_config之后,到源代码看看。! D5 o0 w  \( ~/ ^4 |5 \0 q' n
第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,
并加入include/config.mk文件中,
我的config.mk文件内容如下:
ARCH   = arm
$ s1 o1 ?8 S# T" |# W1 o  CPU    = arm920t: }8 t5 }8 X0 O: ^7 r- s
  BOARD  = gec24409 a1 O1 q) T  X  ?: l! q
  VENDOR = samsung
* z( M6 A- t( V+ u. p. T% E4 b  SOC    = s3c24x0
( Q; ~  R( T& d" C; 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 */" u/ P# e6 |3 a
  #include <configs/gec2440.h>8 S! ~7 B* m3 Y- h: \
  #include <asm/config.h>         
7 n% ~( G" M7 @8 H( E' _, u( Z- V

本版积分规则

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

GMT+8, 2024-4-26 12:32 , Processed in 0.064589 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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