一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3667|回复: 0

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

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

6 ~2 o# d+ `6 e
随便找个uboot源代码就可以啦。
  首先进入顶层Makefile。有很多相对不同板子的配置,如:
gec2440_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t gec2440 samsung s3c24x0

! [8 t! y( P- 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...
% ~7 t% E  N4 G8 I
     现在看看有发生那些变化。由于上面的命令相当于执行./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的内容:
. f) \( }2 q: g- ~1 [
APPEND=no # 这里记得APPEND初值为no5 b. `$ y- ~; h) z7 S( C
BOARD_NAME=""& ^+ i% K/ n( b+ h7 I, D7 R
TARGETS=""- d. u2 L! d* V/ [

0 x! }8 c5 |8 U8 X& V+ j' Y/ N- f3 {#下面一段代码不执行(while---done),由于./mkconfig  arm arm920t gec2440 samsung s3c24x0没有--、-a、-n、-t- h3 w* X% F9 f% W
, m. y* E1 ^* v5 b0 |* v' P, D
while [ $# -gt 0 ] ; do
! S: R( @& {5 q1 F; a4 `6 o$ Xcase "$1" in+ e& H; Q! c, a' H* R! c6 @
--) shift ; break ;;& F' z. u; R  f' u0 O0 U
-a) shift ; APPEND=yes ;;) v8 E; V; {3 `8 z/ w, K3 l7 ?
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;9 S* @7 m0 \- H
-t) shift ; TARGETS="`echo $1 | sed 's:_: :g'` ${TARGETS}" ; shift ;;
+ k2 s" K; R' Z: W*)  break ;;
" B/ R/ T* w/ i) Y- O4 w. ]% h, lesac9 o# v$ X# q, U2 D' A7 _/ W/ j
done
/ {+ d! a' N& W' J6 G
) ]! H( p+ h+ I) [* \% h% H$ L2 F. B& A3 {  q# S0 t0 R2 B
% s# P# T# x/ Y9 |: v# j

: O0 [, U3 @8 O4 _8 w. w[ "${BOARD_NAME}" ] || BOARD_NAME="$1"  //BOARD_NAME=gec2440
" e) V& w% r/ a: o' a! Y
5 X( Q0 `5 ]2 o9 U5 J( O2 O
& t* `  L- \6 K: s# h0 i[ $# -lt 4 ] && exit 1
5 R9 @# C% e7 T& ?" B7 ^7 Z[ $# -gt 6 ] && exit 1: @& Q/ L+ w4 m( g! ^4 B

# }( `* c( i- u1 R+ z( ?1 }/ q: K$ D6 y- D. t/ l+ t
if [ "${ARCH}" -a "${ARCH}" != "$2" ]; then
; A. B# q2 u, E5 W. y( techo "Failed: \$ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}" 1>&2+ _1 _. t7 j* u* p' F
exit 13 X! z8 ?5 h, q2 Y' C
fi
* r/ y2 V8 v* t6 I( p3 K
! ^+ _0 j' l! d% [" `1 @5 u
) F6 _  {; j$ x) U! j//在终端打印Config  for gec2440  board....
# M; w/ J; L( m! N  a" fecho "Configuring for ${BOARD_NAME} board..."5 d8 V/ R9 U" J0 b
* F1 b6 x/ }4 z6 z- f

& I7 e( w" R, X) \: O9 o" K% o4 M/ y#
" c, ~; i% f/ C% a9 \# K# 产生链接文件( |( t8 J  f% R- c
#
* ~' c' c8 ]. F7 q* qif [ "$SRCTREE" != "$OBJTREE" ] ; then   //是否在源代码目录下编译Uboot,不是就执行下面,else就是表示是在源代码目录编译
2 o( P2 @  z+ f3 V+ `* u: Imkdir -p ${OBJTREE}/include
/ {5 n0 Q/ y8 y. pmkdir -p ${OBJTREE}/include2
; |1 V* l8 a' r, R% R( Fcd ${OBJTREE}/include2
( C+ ]/ E! H# {0 xrm -f asm
' [  H3 l3 N& t: Zln -s ${SRCTREE}/include/asm-$2 asm
/ z1 A# {5 E( N- q5 K. yLNPREFIX="../../include2/asm/"# |6 \, h, G8 T1 k: \
cd ../include
; _2 n9 W' S3 A3 \1 \% {6 E. X6 prm -rf asm-$28 Z& j5 z9 @1 ?5 {" t, v
rm -f asm
0 G1 t6 Y6 w7 s3 K" xmkdir asm-$2
/ J+ R5 \- a( r* g: [$ `ln -s asm-$2 asm2 b4 Y. }7 e, P1 A! p& X& i

- @  [" r( k+ z- a( q# R' K6 n$ @0 \' K  q
else6 Y) \( r! j! z/ b! G
cd ./include    //进入include4 V7 Q; C' {0 t$ P
rm -f asm
0 v% v) j$ ^: M. Z+ Xln -s asm-$2 asm    //ln -s  include/asm-arm   asm
. L1 {4 C1 X- |; wfi
9 O) C, b. l; r% L+ Z* D) U4 t) C
: O  q5 I/ [: o3 B
2 }# c8 R, S' F, Prm -f asm-$2/arch            //删除include/asm-arm/arch: l" M3 Y) b7 x4 {

" R2 |7 e: C. Y$ F. Q% l  A- z
- m* u  ]: u7 g# @: e$ A# ?if [ -z "$6" -o "$6" = "NULL" ] ; then   //由于$6=s3c24x0,执行而else下面$ N& i: D$ }8 q8 h/ N9 u6 r
ln -s ${LNPREFIX}arch-$3 asm-$2/arch   
& }% {. T' @3 }2 l/ E. Xelse
2 }8 g) b. N2 G* \3 q1 Aln -s ${LNPREFIX}arch-$6 asm-$2/arch  //ln -s include/arch-s3c24x0  include/asm-arm/arch
1 _8 v+ s; J; w$ A4 Q/ U& dfi+ G: p& g. Q9 a/ [
$ R8 \9 ~& j2 U" Y* T1 Z' m

/ B0 ]8 ]7 z3 x& |! jif [ "$2" = "arm" ] ; then
- d, |8 C) s; [3 w' Hrm -f asm-$2/proc  //删除include/asm-arm/proc
) [6 R% e2 U6 C7 |ln -s ${LNPREFIX}proc-armv asm-$2/proc  //ln -s include/proc-arm asm-arm/pro$ I6 M7 Q, u" F2 p* Y3 b7 h$ v5 m
fi1 I- H. F) N. x4 Q4 I

4 b) L) Y# l" |8 |) R/ q
0 k, L, _" ^" W# W$ a8 {#+ ]# E4 F8 ]- _8 j% p# r+ {0 C
# Create include file for Make
7 Q+ @% j% y# \- `6 y#
6 |7 C7 |+ H% E! {1 n6 Y8 v% I& Vecho "ARCH   = $2" >  config.mk   //ARCH=arm,放入include/config.mk
, P; T7 P8 Z! b1 |/ Qecho "CPU    = $3" >> config.mk  //CPU=arm920t,放入includde/config.mk( q" e% V& b$ b; z
echo "BOARD  = $4" >> config.mk //BOARD=gec2440,放入include/config.mk! K$ V4 X2 |3 m' G
: K9 O" u4 Y) Z! F* G% s

6 D4 H3 [7 w( E* a, u) H, l% K[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk' ?; j& U! C8 F/ f6 ~6 {' q
//VERDOR=samaung,放入include/config.mk
& T6 N% [, U( w) Y6 T[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk+ l- d' W% ^: m" V/ y- t$ v7 V
//SOC=s3c24x0,放入include/config.mk$ d& f6 h, ]& Y% `
#
  w- V  @# ?0 o1 a, y* s, ~# Create board specific header file5 o# s( \+ P0 b
#
, |. T% e8 X! I2 C8 w$ S$ Vif [ "$APPEND" = "yes" ] # 有第一行知道,APPEND=no; f9 P( o! S% }  G8 e
then
, {$ _$ Y; U0 [1 Y  y+ Oecho >> config.h. T+ J. B9 Q  n/ }0 W3 l9 j) P
else" x' o% j- t+ n6 o" I* \+ [' a
> config.h  #产生config.h文件,位于include目录下$ E* h" D6 C0 l/ d5 D1 F
echo "/* Automatically generated - do not edit */" >>config.h
( j' x2 d' }( `+ B9 f$ J6 T0 i- f9 I" [+ @- t' o& s
; p) J& P0 \+ Y
for i in ${TARGETS} ; do6 ^, l4 c# @5 l+ v0 W
echo "#define CONFIG_MK_${i} 1" >>config.h ;
/ W& o. {6 |/ ]( g: B//将"#define CONFIG_MK_${i} 1加入上面产生的config.h文件
# \. u; h9 B2 P1 r* m4 [! X' v( ^+ Wdone
5 S& x& F: i) _( ]; y/ k% t
8 u! x* v- X( u8 B5 H& ^+ [1 P) u7 j
echo "#include <configs/$1.h>" >>config.h  //config.h文件包含头文件"#include <configs/gec2440.h>
4 ]2 `. J. ?% m, t2 D! U' N: ?. necho "#include <asm/config.h>" >>config.h //config.h文件包含头文件"#include <asm/config.h>/ o3 C' a# I- }' n4 z
+ @, d& ^! U& |2 q5 Z5 h
exit 0
3.上面红色部分就是改变部分。到现实中的源代码看看,
大家执行完make gec2440_config之后,到源代码看看。$ a1 w1 w" |( ]- q' }
第一就是ARCH、CPU、BOARD、VERDOR、SOC被赋值,
并加入include/config.mk文件中,
我的config.mk文件内容如下:
ARCH   = arm1 ~6 G( x3 b" e" G+ S5 u2 L) x7 Q
  CPU    = arm920t! D5 g6 Y  @3 U
  BOARD  = gec2440( T$ L; f: f9 g0 m6 z3 I; i, c
  VENDOR = samsung) Y7 z+ z: ?  R! f4 I
  SOC    = s3c24x0
6 a5 ^3 a+ B' N
第二就是看一下链接文件,我的情况如下:
进入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 */
) ?) G  M( W/ a0 p8 t  #include <configs/gec2440.h>
8 S) |( O  C! q' r# v  #include <asm/config.h>         
- D) J5 Z" G: ^0 L0 v; K

本版积分规则

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

GMT+8, 2025-10-28 20:10 , Processed in 0.028899 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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