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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
5 i" o7 s4 K) \
U-Boot-1.1.6根目录下的mkconfig同样也具有如同makefile的重要地位。进入mkconfig可以看到它的源代码并不多。
6 Y! @6 F8 }2 P+ x+ v. U' |/ D: q
+ J- k1 e0 O- c& L' [5 T8 ?      下面红色部分,均为我自己添加的注释,源文件里没有这些注释。
2 N. |8 y$ C( [9 s1 E
) X8 J: h! G6 O________________________________________________________________
1 L- S8 ~' S, L. ~5 A
% ~! c, j, B/ Y#!/bin/sh -e             //指定执行该脚本所使用的解释器,-e相当于/bin/bash7 W' w; E7 {( ]/ l& G

' H/ `* O4 H- q- J+ U  w# Script to create header files and links to configure6 v6 @( N0 ^9 _* v8 C- @/ U* E) F' J
# U-Boot for a specific board.; F& [; }' v0 B9 {+ }8 O* {# K
#1 V  z5 U2 ?: c6 G: Z4 X* H8 R
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
7 t. y- [# b! r. W* B( F#( \$ `( J$ e. }. s
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>  M) g' s& _: k
#& \: L5 u" H/ p  E6 _, J
9 [9 s, O8 R8 j+ V
APPEND=no # Default: Create new config file       //缺省创建一个新的配置文件,config.h) O' V8 y0 e$ Y# ^% b4 J# G' q
BOARD_NAME="" # Name to print in make output2 N3 q6 A; `' L9 W$ {& y

* Y4 d0 G8 k$ J5 h! M  k/ ]while [ $# -gt 0 ] ; do              //$# 是传递给脚本的参数个数/ E; ~- R) N$ E3 x; m8 g$ g
case "$1" in                           //$1是上文Makefile分析结果里面六个参数的第二个参数,$1=EmbedSky
9 g7 m, ?/ @- ?  a1 s --) shift ; break ;;                   //脚本case里面的每个模式行都是以双分号;;结束5 _. p; e- F  p0 D+ Z/ r
-a) shift ; APPEND=yes ;;
1 D3 e7 g# F- W$ j/ F$ k5 P
& [" L, L; |9 L/*$(1%%_config)原形为$(string%%substring),从string的右侧删除掉最后匹配substring的字符串*/7 J9 l/ a6 o/ V/ D+ [  z
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;7 j' p2 b/ M+ U  N
*)  break ;;
( c8 z$ ~! q; `- R7 E9 S7 W esac                                 //$1不满足以上条件,跳到done下面语句+ T# P3 |. n- e8 D# \' m% l
done8 a2 I. n+ f3 a. t% M

5 ]+ [& ]( p. S1 ~/*如果BOARD_NAME非空,则不执行后面语句,否则将参数1赋值给BOARD_NAME*/* K# B$ c$ X; P9 j) e% K

; E5 K9 B" N5 l5 _. h[ "${BOARD_NAME}" ] || BOARD_NAME="$1"   //执行完后,BOARD_NAME=EmbedSky- u! a9 h1 ?1 w8 s+ Y5 A  H

4 c: r" |" K8 P6 i[ $# -lt 4 ] && exit 1         //$#=6,即不小于4也不大于6,故不满足,跳过,然后打印$ i+ Y6 Y2 Z* u) T1 X# \0 {$ M# J
[ $# -gt 6 ] && exit 1
# x4 w& N3 P1 _) p; O3 P$ c- l& H1 S; N! e4 _
echo "Configuring for ${BOARD_NAME} board..."  N" T* s/ O" J" _" u' m
* R9 U; H! U+ S1 j
#' r7 K$ z. G9 H- b* |' I
# Create link to architecture specific headers
) c1 n; x3 i% i& K#
. X! \1 y9 C8 f, ]' i' q: d- Z/ F! J) W4 q& c; K
/*下面一句判断源代码目录和目标目录是否一样,如果不一样则执行else分支语句,我们一般选择在源代码目录下编译,故判断语句不满足,将执行else分支*/
7 _4 u4 f! w/ I  [* ?) d7 t7 t( Jif [ "$SRCTREE" != "$OBJTREE" ] ; then
+ C2 g, H! Q, y3 l mkdir -p ${OBJTREE}/include        //在目标目录下创建include文件夹5 A7 k8 j5 Y: \' x9 O
mkdir -p ${OBJTREE}/include2
& Z& F8 E; p* D8 e cd ${OBJTREE}/include2       //进入目标目录下的include2
) t0 p+ [. E: s. v3 E# O- g5 g. [ rm -f asm                                //删除asm链接
! [: |% b8 U1 c6 Z  Z6 G! i ln -s ${SRCTREE}/include/asm-$2 asm   //创建asm链接,指向根目录下include/asm-ARM2 {' @- j/ \+ Y1 {/ m' Z
LNPREFIX="../../include2/asm/"         //赋值给变量LNPREFIX8 b- [9 J' U" b: _0 P+ G/ ?
* z  i& f# {, `  s1 r$ z
/*下面五句是,进入根目录的include目录,删除asm-arm链接,删除asm,创建asm-arm,重新让asm指向asm-arm*/1 D2 T4 c& ]6 e$ f- y# ?
cd ../include
0 H0 y% s( I. V7 }9 I) M6 Z rm -RF asm-$2
) x9 e/ @" g" _4 @" w; E rm -f asm3 s' `* U+ v; F- F
mkdir asm-$2% I( P) I& B, z  u
ln -s asm-$2 asm5 P2 p' W; u; f
else# J7 i& [1 c  Q% {; n" [7 b/ ~
cd ./include
" f  @/ k* R; ]$ [7 z# T* X- u& U rm -f asm
  E, D$ l1 ~4 X ln -s asm-$2 asm
7 S' W9 I# n  l* X3 ]( \. kfi" `1 t& Z# ?! C. X

/ q4 N; A9 e* b9 `# Srm -f asm-$2/arch       //删除include目录asm-arm目录下的arch
# b" `+ Q9 h* ]* P& `& K. Y. f" @7 ]5 d3 I# t; h
/*-z表示如果 $6 为空则为真,-o表示或运算,$6=s3c24x0,故执行else后面语句*/
2 D9 N+ ^7 K- r
6 E* r& c' E) @% T( Lif [ -z "$6" -o "$6" = "NULL" ] ; then
5 F6 @" Y/ ~+ C' I ln -s ${LNPREFIX}arch-$3 asm-$2/arch
0 `) T& p1 ^5 Delse                                                         
( Y3 B  V5 u( Y5 D  e ln -s ${LNPREFIX}arch-$6 asm-$2/arch   //asm-arm/arch链接指向asm/arch-s3c24x03 S5 {5 m9 x9 I0 ]) ?
fi! @0 a- y' w7 q

9 z$ a3 ~1 O7 U7 v7 X9 w/*$2=arm,满足条件,删除asm-arm/proc,asm-arm/proc链接指向asm/proc-armv*/& H7 n6 k8 T% j$ \$ d8 k$ }
7 n) b, ?" M+ ^" q! Y8 Z
if [ "$2" = "arm" ] ; then
, U% ]. w7 e* n; \8 F' y, m& u rm -f asm-$2/proc
8 d0 a6 m, Y) k/ e ln -s ${LNPREFIX}proc-armv asm-$2/proc7 D% x7 @& X' ]- h% }
fi
4 O3 X7 e0 l5 V# S0 r- i2 Z$ I2 `$ Q" w5 c& @9 i
#0 S( z+ \% H/ [& t7 U- H
# Create include file for Make
2 [8 _' E! Z% D( K; j2 f# |0 h) K# @#6 G' V2 D; x/ [: Q% U7 |' A4 m
9 C/ y6 f% X4 x4 X7 E
/*下面五句是创建顶层Makefile包含的文件  include/config.mk */
. p" o8 o* z: C9 F& k) P& Wecho "ARCH   = $2" >  config.mk       //    >是将内容输出到某个文件的重定向符号
2 |  G+ a' m' lecho "CPU    = $3" >> config.mk       //  >>是将内容追加输出到某个文件末尾的重定向符号, k# p4 l" A& G1 i. ^3 v5 @
echo "BOARD  = $4" >> config.mk# a2 s8 c. N% ^" |# {# J7 N9 u

# [! @  u; b/ K$ p6 @( k[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk  //$5=NULL,所以此句不满足" Q! |1 v. \7 n* c

  g' {. C6 u, N) |6 G1 r[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
# x1 `, L8 K2 z: j* k8 X/ ~
  A0 ^; j4 T6 N4 @# Q- \#
1 J+ I; u% o. z( \# Create board specific header file9 s0 L, {1 R9 C/ c
#7 v& \( I3 ^4 M  w
if [ "$APPEND" = "yes" ] # Append to existing config file    //APPEND缺省为no,故创建一个新的config.h文件, B) d  G8 y+ h( Y
then9 p; M, E" U8 U( e) J" n
echo >> config.h& _0 h  r5 a+ w3 Z1 V$ g
else
  O$ V! n9 d, g > config.h  # Create new config file5 O8 S9 W7 I! m' t1 ]
fi
/ }; w5 u* ~2 u0 Y- k, C  i# G& i4 c1 u; K2 I' a: M1 @: u
/*config.h文件里面的内容包含以下二句*/- {9 g. ], {7 ^+ ?! J4 K, {
: N, ]) ?5 U9 C! v) g
/*  Automatically generated - do not edit
8 E, m2 ?& h+ H! U: V# `/ `4 d4 j/ D$ s( g
    #include <configs/$EmbedSky.h>       */
4 ?* l9 L: A3 ~# }& recho "/* Automatically generated - do not edit */" >>config.h9 ~; O  U# `2 L& }1 Q
echo "#include <configs/$1.h>" >>config.h$ C2 T- {( H5 X* ]8 V6 s) |1 h5 A

. g6 E5 @; N  Q5 Cexit 0  //结束,退出) t6 S$ m" p4 t5 P! A+ K, m4 M
* @) j3 x# S# T  ]0 I: B+ M3 K
———————————————————————————————————' i* M9 |  V3 @( m" W; f* c4 d

/ x; n  q! p( `+ }! V4 {, \( F, M总结:
0 n; o5 d+ j# D1 N6 a
6 D/ X7 ^' E  V" j& D 配置命令“make EmbedSky_config”实际的作用就是执行
9 T* S( m! i) {4 b' X2 b  A0 n( N
0 ]7 B* H1 ?& B8 ]5 M- o; x./mkconfig EmbedSky arm arm920t EmbedSky NULL  s3c24x0 这个命令,将产生以下结果, H2 a6 Y' X5 ?# H  _' _/ P
; R2 ?( N$ b% G" }# |; B4 |
(1)、开发板名称BOARD_NAME=$1;& F! {+ E3 j  _8 r
" |- K4 L* ]; o7 I2 K
(2)、创建到平台/开发板相关的头文件的链接,如下:
* |( Z" C. n& ], u3 m$ x8 |9 F
            ln -s  asm-arm   asm: z3 B" m/ p/ v2 Z$ d
* M& }3 \* ~: b) B
            ln -s   arch-s3c24x0   asm-arm/arch% V6 k( g$ X% @: I
7 E, X# }' {" U- Q
            ln -s  proc-armv   asm-arm/proc
9 n9 Q+ z! K. v- e3 ^2 p: m" Z) N6 m1 ?
(3)创建顶层Makefile 包含的文件 include/config.mk,config.mk内容如下:4 v& @7 a6 M1 E4 d5 j+ H

+ C1 T4 W- O9 j1 r           ARCH = arm
1 {$ k/ [  z$ F2 q7 N6 X0 Y; j0 x
           CPU = arm920t
$ k% D: x0 _6 b" i# v& A2 ?7 j# R: ]9 F! U4 q$ w" }. m
           BOARD = EmbedSky
. q( L1 W6 {* h( a# S4 V8 i1 `+ L+ B6 G
           SOC = s3c24x0
8 X) r$ p1 g% d  E6 M+ B' r! x8 q9 V/ Y7 \- n: \, A- f: m
(4)、创建开发板相关的头文件 include/config.h- Q' Z/ M4 v) e

) o& l0 g5 a& A1 e, q0 y& W       从以上4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在 include/configs 目录下面也要新建一个文件 <board_name>.h,里面存放的就是开发板<board_name>的配置信息,里面包含二种宏定义类一种是CFG类另一种是CONFIG类。
' c3 Z5 l( w' G9 H8 D: a( t2 H! z* b% o& N: J+ I2 ?5 h
/ X1 Q  t" B4 @; ]1 s2 j
: ^. w" P# w3 r! H9 C2 ?
* Q% c) e6 W, w5 Y) i5 F) ^  n" _

& H4 J( s+ r+ U' O# h& h* V这节就讲到这里吧,祝大家学习愉快。' y% i( h( ]( k% D
& `9 G/ V" i) q  g

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-25 23:05 , Processed in 0.156250 second(s), 24 queries , Gzip On.

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

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

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