找回密码
 注册
关于网站域名变更的通知
查看: 271|回复: 1
打印 上一主题 下一主题

TQ2440之U-Boot-1.1.6之顶层目录下的mkconfig

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-4-24 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
+ Y& }) N. I" t* t  e/ s7 m# e+ `$ T
U-Boot-1.1.6根目录下的mkconfig同样也具有如同makefile的重要地位。进入mkconfig可以看到它的源代码并不多。% K; M1 u9 V" l8 A
# b+ D& I. I! P) d% [2 I
      下面红色部分,均为我自己添加的注释,源文件里没有这些注释。( n8 @- g6 @3 `2 D) j6 x

, h9 G* k5 m) p4 `( j! w! y3 f' \________________________________________________________________* h. r0 _" d( O7 N% l; q. D4 U! x
1 A( w5 W1 d3 L3 |) c( c# a/ J  M" [
#!/bin/sh -e             //指定执行该脚本所使用的解释器,-e相当于/bin/bash
% M7 t$ x5 ~1 z. B% H2 d4 Q
9 A3 S) M$ h- W! n0 r; ~' ]0 c: N# Script to create header files and links to configure
6 N  A% o3 ?; k, N$ c9 @6 p/ w# U-Boot for a specific board.8 g8 ~' {- P: c6 I6 ?: Q
#
5 Y: @! ^% u% \2 q* ?% O* q+ E% ^# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
- v- o: B) D  h" M" F- ?0 W3 h#/ a4 H  @4 w, i- W9 R: r  H
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>. {6 Z" \5 f( G+ w2 B6 V
#, g( i7 q6 _# e

0 M- i. l# {% @( a. hAPPEND=no # Default: Create new config file       //缺省创建一个新的配置文件,config.h
- _# y6 ?. K; jBOARD_NAME="" # Name to print in make output3 a2 ^  o% S9 P5 p3 r: |: J  Q- i2 t
2 _4 k1 K, ^1 K( a, z+ R1 s! U
while [ $# -gt 0 ] ; do              //$# 是传递给脚本的参数个数, F. Y$ ^! X8 s; A$ D, W) S
case "$1" in                           //$1是上文Makefile分析结果里面六个参数的第二个参数,$1=EmbedSky
+ Z! g. Q) x! N8 g4 Q3 J --) shift ; break ;;                   //脚本case里面的每个模式行都是以双分号;;结束, W  D( G* a+ p% c9 o7 b1 g
-a) shift ; APPEND=yes ;;
- G; V4 X" G8 W( V
# O# S7 O. y( ?6 u0 P' L8 ?* B, K. C$ a/*$(1%%_config)原形为$(string%%substring),从string的右侧删除掉最后匹配substring的字符串*/: e8 }$ x( z7 V; T/ m+ Y
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
0 o: z# d6 f  @! k0 b& _ *)  break ;;
5 ~. g  H  w. n( ~/ w esac                                 //$1不满足以上条件,跳到done下面语句& {' T* r5 Y0 \/ \  R
done5 G* h( ~- ^# S
' h% d8 Z9 a) Q( N4 L! n% v
/*如果BOARD_NAME非空,则不执行后面语句,否则将参数1赋值给BOARD_NAME*/) E0 i) z) `  o5 @) O
7 v+ J* x2 x4 c# b; Z
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"   //执行完后,BOARD_NAME=EmbedSky: r: L4 o: a8 D% F) _$ j$ g# y" C
3 ^; l" u  `: f! w' E
[ $# -lt 4 ] && exit 1         //$#=6,即不小于4也不大于6,故不满足,跳过,然后打印! r0 H; z3 ~5 p; n' A  [
[ $# -gt 6 ] && exit 1' ]8 |2 X+ k2 W/ a& p
& k, C) f: _8 u7 g
echo "Configuring for ${BOARD_NAME} board..."
/ r1 V3 p8 w8 D! R; [) ~# g4 n% d' S2 ~6 E
#% e  N+ E2 p* F) f. @; Y  E2 K
# Create link to architecture specific headers% e+ ]. ?* n% }6 `& ^2 N
#) n8 o7 ^, h% ^) }7 o' s
# _0 x  O; N' U9 o9 Q* _/ a
/*下面一句判断源代码目录和目标目录是否一样,如果不一样则执行else分支语句,我们一般选择在源代码目录下编译,故判断语句不满足,将执行else分支*/
9 q+ a- N# l! M. Y: P! Y% Y0 Xif [ "$SRCTREE" != "$OBJTREE" ] ; then
8 g: y) Y( M6 P) n% z3 ^$ U mkdir -p ${OBJTREE}/include        //在目标目录下创建include文件夹/ @+ p( e" R; C1 r# b
mkdir -p ${OBJTREE}/include2) P' Z" T2 P) S2 d+ J$ F. b/ f
cd ${OBJTREE}/include2       //进入目标目录下的include2
1 h1 [  \6 n# }$ u, o0 R rm -f asm                                //删除asm链接
' w1 D: K# Y, j$ ]$ z8 M ln -s ${SRCTREE}/include/asm-$2 asm   //创建asm链接,指向根目录下include/asm-ARM
3 [7 i* ~7 S7 ~' ]  ^4 b LNPREFIX="../../include2/asm/"         //赋值给变量LNPREFIX4 v6 G1 V8 j2 `$ ]
. J* W* x0 n- Q. t/ d; c6 k
/*下面五句是,进入根目录的include目录,删除asm-arm链接,删除asm,创建asm-arm,重新让asm指向asm-arm*/! M- @: _9 V* T0 I* K9 y8 k
cd ../include, e+ i3 w) f6 c% y2 H2 ^
rm -RF asm-$2
  [+ y; }3 @. u4 U) f& e rm -f asm
9 H, t+ R: c* x. |" t, v mkdir asm-$2
$ I' C; o% E' E2 {' e ln -s asm-$2 asm
  l7 K6 P8 H4 Z7 Jelse
; u7 a" m. k8 L cd ./include1 }. q1 W* X# ^& A7 K* @/ I) a
rm -f asm
6 t, s4 O3 t4 L1 [4 n ln -s asm-$2 asm
, \* W% W& }8 s  pfi
+ ?% P0 X- Y! N9 r/ e
- V0 @# Q9 ]+ i. w* rrm -f asm-$2/arch       //删除include目录asm-arm目录下的arch
0 O9 r# {' p% t) X! _
3 [/ t3 j, S- o1 K, v/*-z表示如果 $6 为空则为真,-o表示或运算,$6=s3c24x0,故执行else后面语句*/
* G, r& `0 q' X) a# Q) v
+ O" S% C/ ]0 x5 e* Y3 Iif [ -z "$6" -o "$6" = "NULL" ] ; then- I; m- ^+ @) d2 G, a7 [8 d4 A
ln -s ${LNPREFIX}arch-$3 asm-$2/arch0 S: P# w1 D+ `+ b5 \! h
else                                                          # h3 [2 R8 z/ A4 ?8 q
ln -s ${LNPREFIX}arch-$6 asm-$2/arch   //asm-arm/arch链接指向asm/arch-s3c24x0
0 P* ?% j4 e# Q6 K; V1 O/ _, c/ cfi+ }( h' l- N, b* H( M
9 i4 |5 l% \7 a+ F6 g* W" r
/*$2=arm,满足条件,删除asm-arm/proc,asm-arm/proc链接指向asm/proc-armv*/. X6 t6 F' E4 ?
: @' R% y9 G& c- |! U2 H# b* H
if [ "$2" = "arm" ] ; then: [) P3 M1 D; c
rm -f asm-$2/proc
" r% x! h0 h1 R' T ln -s ${LNPREFIX}proc-armv asm-$2/proc! T$ Z( j- l2 g/ }
fi) Q0 z* ~* B+ j2 P- R. d% Q

4 A; }# o: ]% i#
6 {( f2 X/ B0 s4 U! g7 `1 V. D1 Z1 {# Create include file for Make" b. V5 x; l$ A9 y# ]+ `( \8 m3 q
#0 X, i) R* w, ^8 Y

3 T6 m. E: R  o$ r3 s/*下面五句是创建顶层Makefile包含的文件  include/config.mk */) |  z6 o' a% Z/ s
echo "ARCH   = $2" >  config.mk       //    >是将内容输出到某个文件的重定向符号& A- F9 @( l  l3 S5 h6 o
echo "CPU    = $3" >> config.mk       //  >>是将内容追加输出到某个文件末尾的重定向符号  @- P% B5 g* \6 }! Q, n4 s
echo "BOARD  = $4" >> config.mk$ x3 {; R3 h  w, ^
# J$ \# I7 N4 k9 K1 g
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk  //$5=NULL,所以此句不满足/ [/ J3 r3 x3 R: c# \

0 Y( S2 H, v2 {- z8 x2 m. Z[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk8 w$ e# n$ P5 b- t9 V9 z+ n
( j0 W% v- k6 Z6 u7 v
#6 g* u) B0 \, k
# Create board specific header file6 P" e* F- S. F  M+ E7 S1 B: {
#6 l- K5 k9 A; }( F' e% H, f
if [ "$APPEND" = "yes" ] # Append to existing config file    //APPEND缺省为no,故创建一个新的config.h文件  Z+ N) m2 C& e+ n: w) h+ I
then
5 Y( G% \! y: o, B( q. l echo >> config.h. a3 Y: H$ |9 }4 `
else
3 c2 @) c" Y! N; a& A > config.h  # Create new config file
7 ?( @! P! `" @1 `/ f3 ^- bfi
! |  T# \  @0 q0 Z
$ e& F  Y; d$ e4 r. u/*config.h文件里面的内容包含以下二句*/8 n! S9 _4 v- f1 Z) c; Q
0 L  ^( f  t2 Q7 w! [4 @
/*  Automatically generated - do not edit
) T# b# S: Z- h% I1 y& F* m: A: K) t7 |; z
    #include <configs/$EmbedSky.h>       */
& V5 V3 R; c, ~& Decho "/* Automatically generated - do not edit */" >>config.h
- y1 g2 s7 Z& jecho "#include <configs/$1.h>" >>config.h, G8 p9 |, A' v1 Z2 @. S
+ r3 c. ^5 o0 e. l: k
exit 0  //结束,退出2 d, \+ L6 U$ [, H! }* {

( a# G# U; P- h+ F1 Y2 o: }———————————————————————————————————4 J) J4 Z6 L; j/ k
4 M+ D$ V3 G; M
总结:) {$ ?( K( t& Q# w& D* I

! d' ?% k/ Z; N4 z/ b7 O4 e# w 配置命令“make EmbedSky_config”实际的作用就是执行/ I( g$ Y1 U- S3 s

  \6 w- W: C$ q  ?5 n1 s./mkconfig EmbedSky arm arm920t EmbedSky NULL  s3c24x0 这个命令,将产生以下结果$ P; e0 v1 Q% r' H1 Z2 T
. ]3 p# W$ g7 N% D& o0 H2 Z
(1)、开发板名称BOARD_NAME=$1;  m/ T2 T: @# H1 M3 i6 y5 {) O

  v% j7 Z' S% A* n2 \5 Z(2)、创建到平台/开发板相关的头文件的链接,如下:, C+ j" ]3 K, `: H3 O
% x8 H4 _% u: y* H0 T+ h) u' G
            ln -s  asm-arm   asm
6 N* f# }4 C" i6 z4 N) u
- T8 K' c, G# ~$ `2 Z            ln -s   arch-s3c24x0   asm-arm/arch+ x9 ?/ C0 u9 z, L3 e* G2 C

9 Q, ?$ u, y* u  o: F2 J2 p            ln -s  proc-armv   asm-arm/proc
6 I3 l# t9 J0 y3 R7 u, j
7 e0 x1 T; [6 A: h  k* k( w# G1 O0 ~" @(3)创建顶层Makefile 包含的文件 include/config.mk,config.mk内容如下:
9 \$ O7 m9 C3 ~5 I/ |4 v1 P. C2 N( D' O: H
           ARCH = arm0 Q* Y3 Y# k, m
" o5 ~/ p" p; F' i6 p
           CPU = arm920t) l) X( n2 R+ W. _! \* k

2 m: X+ g4 h1 C           BOARD = EmbedSky/ j8 ~! Y$ r+ [$ Q. L

' Z  B3 ]- s2 L9 \- r7 c7 V. ~           SOC = s3c24x0
/ B/ O% _6 S1 z$ L( u0 S& t5 C. L9 `& z* n0 ~5 c
(4)、创建开发板相关的头文件 include/config.h. c8 {5 S7 E, I# A. V) i4 q1 X
+ E- V; R: L  ?% f% X# ~( K5 O* t
       从以上4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在 include/configs 目录下面也要新建一个文件 <board_name>.h,里面存放的就是开发板<board_name>的配置信息,里面包含二种宏定义类一种是CFG类另一种是CONFIG类。6 i. b, B& Q- J3 K$ M: @) a  P

! o" H5 u/ t- h* |! E( s
4 M5 }( p2 ]8 j. Q. I6 ?; H3 u! U4 n1 H4 W! ^' B$ C

; K8 Y- U' m- ?  z" X
: e5 z8 p! v) ^! _5 u; N: P; f这节就讲到这里吧,祝大家学习愉快。7 x0 f3 |+ }2 @* \, C
  R3 ]$ Q: j' {+ [4 i$ q; `

该用户从未签到

2#
发表于 2020-4-24 15:10 | 只看该作者
U-Boot-1.1.6之顶层目录下的mkconfig
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-26 02:06 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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