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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
( g# _6 l: Y2 I% W$ u
U-Boot-1.1.6根目录下的mkconfig同样也具有如同makefile的重要地位。进入mkconfig可以看到它的源代码并不多。
+ D2 G4 |6 W0 M# y3 l2 r/ v- N6 ^5 D
      下面红色部分,均为我自己添加的注释,源文件里没有这些注释。
' P* L1 L4 [$ w* G5 |& `* B$ }% E
________________________________________________________________+ L+ m5 F1 u- f$ v' ~+ R: h2 s( q

) i( q, ]  ?7 A& e! n8 o. \9 k#!/bin/sh -e             //指定执行该脚本所使用的解释器,-e相当于/bin/bash2 I5 V6 l! I, x6 g! v+ A& V2 _$ k

. Y" u- w/ Y" Y( i0 \: r/ Y# Script to create header files and links to configure  `! p$ [1 Z/ R5 l
# U-Boot for a specific board.
7 v# x  _6 n/ t2 ]( K1 C' I% Z#
+ E* ^- p" K5 L/ h# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
' ?  Q8 _6 B/ L, G7 c7 P#/ H- u. C; E3 P1 m9 N4 x1 r
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>1 G! E* A/ T7 D) d9 ^5 M* ~) e7 P+ _
#* g- `* l1 I+ D2 B, }: j2 U

1 ?$ Y2 Y; N4 p9 e. f. @APPEND=no # Default: Create new config file       //缺省创建一个新的配置文件,config.h
/ O. ~+ @5 x# HBOARD_NAME="" # Name to print in make output
9 X" p! D$ k6 k( d% Y
& H! J7 p8 Q. Iwhile [ $# -gt 0 ] ; do              //$# 是传递给脚本的参数个数
5 t& V+ Q% F3 R+ s+ m case "$1" in                           //$1是上文Makefile分析结果里面六个参数的第二个参数,$1=EmbedSky
# w5 J& M# T0 i: n7 m/ @3 |( _! ]  j --) shift ; break ;;                   //脚本case里面的每个模式行都是以双分号;;结束
" Q* r2 i& v3 |! q -a) shift ; APPEND=yes ;;) t, m# F/ B1 h

' _7 z) I: [6 a" J1 v0 a9 N6 w/*$(1%%_config)原形为$(string%%substring),从string的右侧删除掉最后匹配substring的字符串*/
3 Q, Y* h5 ?# i) H: ]' @) N5 j -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;7 }& p1 p- l7 B) Q6 N) n
*)  break ;;
" S5 t  H: A/ o/ C esac                                 //$1不满足以上条件,跳到done下面语句
  a/ S) @9 g" C) ^1 Ldone
3 n9 e1 m, ?4 e% q3 f6 r/ C+ M8 N# z& r% B- @& E
/*如果BOARD_NAME非空,则不执行后面语句,否则将参数1赋值给BOARD_NAME*/
/ z# o- `" b8 _& K  ?9 C1 P, p8 r9 }& X# G, [# X
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"   //执行完后,BOARD_NAME=EmbedSky) }+ n! X' @6 y! U! I
7 k2 A5 d' s" V& b+ U
[ $# -lt 4 ] && exit 1         //$#=6,即不小于4也不大于6,故不满足,跳过,然后打印# N% ^3 R& R6 S3 H
[ $# -gt 6 ] && exit 1
/ T' U( J2 @/ x) g! c( @1 U# V: [4 G) {) d& a
echo "Configuring for ${BOARD_NAME} board..."
3 Q" g/ c. u- _- o$ p! f6 }) A4 v2 }# H' w
#9 L" T$ Z. x% I. U, b
# Create link to architecture specific headers
6 X# z9 D% q9 Y6 j1 ~" o$ }4 T# a4 X#
* ?, I! ]/ k; b/ b' @* ^: R+ H
5 }) @. s5 p' _6 Q/*下面一句判断源代码目录和目标目录是否一样,如果不一样则执行else分支语句,我们一般选择在源代码目录下编译,故判断语句不满足,将执行else分支*/& R! i" I: i  l3 n7 X4 x! I
if [ "$SRCTREE" != "$OBJTREE" ] ; then& K% L  a- x# z. T& V- p
mkdir -p ${OBJTREE}/include        //在目标目录下创建include文件夹
+ B9 h( `/ }0 T: i0 D- X5 W mkdir -p ${OBJTREE}/include2
6 W/ |3 L, G# V cd ${OBJTREE}/include2       //进入目标目录下的include28 X# s1 c2 ^+ `
rm -f asm                                //删除asm链接5 u' I+ d) {$ e( U! T
ln -s ${SRCTREE}/include/asm-$2 asm   //创建asm链接,指向根目录下include/asm-ARM
; U" Q6 S. B' x5 E. p0 ?8 m LNPREFIX="../../include2/asm/"         //赋值给变量LNPREFIX
- F2 n* [$ x3 K  S; m& k3 @
* \& T% i+ o/ Z/*下面五句是,进入根目录的include目录,删除asm-arm链接,删除asm,创建asm-arm,重新让asm指向asm-arm*/4 T( _" _8 B$ ]# |& z; n
cd ../include9 f6 w7 c+ g6 U* H
rm -RF asm-$26 @1 P( |0 I+ K5 L, ~* c: Q
rm -f asm# j; P6 L2 q) u- m
mkdir asm-$2
. K2 w0 S- {% N: ~0 b4 J. X3 {6 z ln -s asm-$2 asm) f) x' R) R2 j. N* C
else
4 z/ T3 ?* k3 U5 {; O$ @ cd ./include; J" `/ w( W* t
rm -f asm( r9 \, f7 B- L, A  R
ln -s asm-$2 asm0 H0 n1 x2 J5 j" K
fi
( Z1 u7 I2 @7 [1 \6 ?) K
- M3 M" [1 T1 N* T, Trm -f asm-$2/arch       //删除include目录asm-arm目录下的arch
5 \9 f. n  \' n* b. \3 y- G" u
, G# ^4 e: S, d/*-z表示如果 $6 为空则为真,-o表示或运算,$6=s3c24x0,故执行else后面语句*/) G3 v" k4 B" t  ?4 p$ R0 b) ]/ E
3 G* C. e3 W; i) O! ?# a; P" d
if [ -z "$6" -o "$6" = "NULL" ] ; then
0 ~* G5 J% \4 }: r ln -s ${LNPREFIX}arch-$3 asm-$2/arch1 V: m$ U3 z5 A+ M- o& L$ A6 u  G
else                                                         
& Z0 b+ S: V. m# u ln -s ${LNPREFIX}arch-$6 asm-$2/arch   //asm-arm/arch链接指向asm/arch-s3c24x0! Q% l( [  w% q: T1 Y; D
fi9 N$ ]. I9 `0 y/ M; ~; Q  q# }

  C4 U& H! M( V2 F6 n8 M/*$2=arm,满足条件,删除asm-arm/proc,asm-arm/proc链接指向asm/proc-armv*/
% ~" P+ Z0 `8 L  g6 K  P- y% w, @! w
if [ "$2" = "arm" ] ; then+ t' F" L- n. r% Q" B! p) V! h( v
rm -f asm-$2/proc
, f) k3 t$ M: e( ~6 {7 A+ X ln -s ${LNPREFIX}proc-armv asm-$2/proc6 x, U' G& X$ f$ h7 Z
fi, {4 d2 X8 C" p8 Z$ q
1 O/ V/ f- E: d9 V4 g3 K3 w7 b
#
- \7 t4 ]7 n& h$ c- E; e/ n  K# Create include file for Make
* q0 B/ T+ R6 d#
' c# f1 }( o' h; H4 S) q2 P4 B4 y! k" }2 x9 E
/*下面五句是创建顶层Makefile包含的文件  include/config.mk */
% N& U$ m& t+ kecho "ARCH   = $2" >  config.mk       //    >是将内容输出到某个文件的重定向符号1 Q4 W1 H9 u1 E% j1 s
echo "CPU    = $3" >> config.mk       //  >>是将内容追加输出到某个文件末尾的重定向符号
( d9 l; b1 H. b, L- ~echo "BOARD  = $4" >> config.mk% b' P' f, g2 @) `
: D" R2 V3 }+ k# [* O9 e) `7 c
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk  //$5=NULL,所以此句不满足8 {+ j7 |. ^# M, n
% K+ B/ }( ^7 d* S; y
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk& K" T9 L: ~2 m$ P; e: B4 s( |

- S2 |) O4 d. F# ?9 Z+ J#
7 @( I3 [, p$ m2 A# Create board specific header file. W5 \' e# p6 o5 Q1 X6 z
#
5 c; B3 P3 a' i( R* hif [ "$APPEND" = "yes" ] # Append to existing config file    //APPEND缺省为no,故创建一个新的config.h文件3 B1 K9 S- @% e% B0 c
then
6 g) n/ e% C/ [) r2 \9 R/ ?* L echo >> config.h& B& `( S8 j0 h0 s0 I; R
else2 l( @+ N3 r. }! I" K& S, x' l! l
> config.h  # Create new config file- |9 I: I" v- D, Y
fi$ s4 P2 v0 ^+ c- t

" |# Z* _8 |% A3 o0 k6 u- |- y/*config.h文件里面的内容包含以下二句*/
9 w6 W; ]6 T5 b& G6 H: k& l/ A3 ~( O/ ?1 s$ B3 T
/*  Automatically generated - do not edit
1 W7 t2 W. j) F. K7 S* r5 \7 b. B! f  D' f# p5 p
    #include <configs/$EmbedSky.h>       */
7 a! T1 c# |0 L& w  becho "/* Automatically generated - do not edit */" >>config.h
$ J4 j9 c: Y& m2 xecho "#include <configs/$1.h>" >>config.h
5 n/ @8 K" e4 `) N) a5 C5 l! S; K
exit 0  //结束,退出
, D9 Q8 Z: K  g: |# i
; Z: x1 a2 U0 ~9 P" B———————————————————————————————————1 _- _: C6 ^+ }4 B+ H# Z
4 Z( m- n- `, E& a$ P  N+ u" b
总结:4 A+ z/ M6 G* t4 {+ m+ d
6 ?& F' `$ L; y' v& I* X
配置命令“make EmbedSky_config”实际的作用就是执行
" ~1 h1 H* d: r* o% T  \" {5 W
- t. E2 D9 {  P) u./mkconfig EmbedSky arm arm920t EmbedSky NULL  s3c24x0 这个命令,将产生以下结果& o: T. Q. W, N
) A8 O& W1 l; K
(1)、开发板名称BOARD_NAME=$1;1 n' F1 F3 u' |
: |" h6 z( K2 l8 G& ?* i  N
(2)、创建到平台/开发板相关的头文件的链接,如下:
1 Z6 _7 G1 X3 E
$ m( n: D' |" g# F            ln -s  asm-arm   asm
" X+ ~, O( s& x, I$ [
2 X+ ?/ Z1 q+ S% i5 D            ln -s   arch-s3c24x0   asm-arm/arch" k0 r2 m( f. _. b. x3 R, }" i8 U
' \! h. Y  D6 G3 N4 c
            ln -s  proc-armv   asm-arm/proc
3 j+ p7 F0 g, L1 a- [% F- U9 B" \% p9 p! L: H. U
(3)创建顶层Makefile 包含的文件 include/config.mk,config.mk内容如下:
( X' b. z4 K! ?+ w" u
+ D9 n% a: K! c) R           ARCH = arm. e7 F# ~+ X- r# M) }

3 g2 z/ X1 ?' r5 ^7 r7 J/ J! k           CPU = arm920t
. Y( y, v; D! a, Q$ s5 o7 C( g! Z8 e3 m
           BOARD = EmbedSky$ p& c9 W/ Y* w$ {3 B

& g: W2 C# }7 M3 ~           SOC = s3c24x0
$ m$ a2 e, R1 o! h6 A. Y
& i& @/ G1 C4 W  i+ s2 V! J) G(4)、创建开发板相关的头文件 include/config.h3 c/ o  d( d* X& }& t) d4 [/ N. d
" ~+ O% ^0 t4 P' Q' ^% }" j
       从以上4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在 include/configs 目录下面也要新建一个文件 <board_name>.h,里面存放的就是开发板<board_name>的配置信息,里面包含二种宏定义类一种是CFG类另一种是CONFIG类。6 x( o1 t, D  H8 w7 S9 O# f- P- Q

5 [+ M5 E$ [6 U
! f, O4 s8 |- f! {3 x; y( c2 o' G; C9 W: {( ~9 t3 {0 Z4 ~9 k
$ B' L7 t# O2 q

6 F4 o1 n, A1 m5 w1 ?, r8 F$ ?. G这节就讲到这里吧,祝大家学习愉快。
. g; E8 b( c4 v8 w; e# c4 b( A, S

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-26 00:28 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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