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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x

4 I/ L. ~3 N6 k( o- k  r& mU-Boot-1.1.6根目录下的mkconfig同样也具有如同makefile的重要地位。进入mkconfig可以看到它的源代码并不多。; u/ ^7 j: \! Q/ S) i; \* F

. W2 }0 {; K8 q& A      下面红色部分,均为我自己添加的注释,源文件里没有这些注释。
6 r# _$ r6 E, [4 a2 V6 q) a$ z# x  f6 n
________________________________________________________________
4 L2 i# O5 L- @6 b, D- N; J
% x/ E! M- p2 s! ?4 I#!/bin/sh -e             //指定执行该脚本所使用的解释器,-e相当于/bin/bash
! m: v- \0 d6 k9 y
. [1 C0 E1 y1 ~$ _- @# j# Script to create header files and links to configure0 E7 v& u- \6 a
# U-Boot for a specific board.  `) k% I0 O# C1 U& ?- S
#7 x) w" C  P1 g* X
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]" t1 k, V- r$ ~+ w- U- N
#" E9 x" D  e2 Z  o1 p0 V4 v
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
) [) N8 G( Y' I/ U. b) @2 C3 e#; d6 U% N  o5 M# H4 o) w
8 o$ n. k* N* h
APPEND=no # Default: Create new config file       //缺省创建一个新的配置文件,config.h9 y" T0 C  m  Q" I6 J- O
BOARD_NAME="" # Name to print in make output' X- l% w* n! V5 e

" h3 @, m# @7 S" _' A& pwhile [ $# -gt 0 ] ; do              //$# 是传递给脚本的参数个数
  ~& I, J0 u: E- o  i- @ case "$1" in                           //$1是上文Makefile分析结果里面六个参数的第二个参数,$1=EmbedSky
5 j5 C& L. B1 v' t, J; N --) shift ; break ;;                   //脚本case里面的每个模式行都是以双分号;;结束
' S/ G+ i# z0 T% }1 G -a) shift ; APPEND=yes ;;
' h' c# Z. E: }" j* s' h2 d: C, W% @2 w5 c, C
/*$(1%%_config)原形为$(string%%substring),从string的右侧删除掉最后匹配substring的字符串*/: r6 D1 W1 Z- U! R' c
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
+ R) D- U. z3 | *)  break ;;% B! v7 r) W1 F( l0 y
esac                                 //$1不满足以上条件,跳到done下面语句
% h4 e$ n9 E* ?% Y! m3 Fdone8 F7 f0 B) h0 `2 _* W: O

* q; `! |  H4 e/ ^4 S/ h  j& D/*如果BOARD_NAME非空,则不执行后面语句,否则将参数1赋值给BOARD_NAME*/
0 q/ G8 g  g3 l0 `
* J! V9 O6 _& G; e[ "${BOARD_NAME}" ] || BOARD_NAME="$1"   //执行完后,BOARD_NAME=EmbedSky4 H' y% ^& k7 z3 @! }" @

+ e& @( o6 S! x: J8 u; Z, {2 v! N[ $# -lt 4 ] && exit 1         //$#=6,即不小于4也不大于6,故不满足,跳过,然后打印
3 h; t/ T) _, I$ d; O[ $# -gt 6 ] && exit 1' N3 j& E/ [7 N) b; e  M# O/ v- j
3 Y' S- a7 ]+ Y
echo "Configuring for ${BOARD_NAME} board..."
# ~" k& n/ y* g2 b
% M  N+ B, T/ m+ X( W* i#: e4 a) F" ?* W$ T( k+ B
# Create link to architecture specific headers+ v: g4 F+ A+ r! Z6 \% F
#
6 D  F3 J  B* }9 b! I. y) _& i8 P& [- _1 W5 E" z
/*下面一句判断源代码目录和目标目录是否一样,如果不一样则执行else分支语句,我们一般选择在源代码目录下编译,故判断语句不满足,将执行else分支*/
+ U2 R. N, }5 e6 Y6 r, A$ Iif [ "$SRCTREE" != "$OBJTREE" ] ; then9 t% U. r$ n( ~7 {
mkdir -p ${OBJTREE}/include        //在目标目录下创建include文件夹
5 j+ h. e7 K# L mkdir -p ${OBJTREE}/include20 X7 i/ |* G' `8 ]4 l" B5 Q4 y
cd ${OBJTREE}/include2       //进入目标目录下的include2
( V/ J/ ~! ?2 Z9 ?! n0 ?8 m. p5 S rm -f asm                                //删除asm链接: D8 z! n5 F7 x6 N! J
ln -s ${SRCTREE}/include/asm-$2 asm   //创建asm链接,指向根目录下include/asm-ARM
9 c" x4 `- s& h% ]' A  y LNPREFIX="../../include2/asm/"         //赋值给变量LNPREFIX" c% a9 `3 i/ [; L

- N$ T* q% Q8 h" D/*下面五句是,进入根目录的include目录,删除asm-arm链接,删除asm,创建asm-arm,重新让asm指向asm-arm*/6 R+ g2 t! m8 ]5 s$ s& \
cd ../include1 J0 r; ~% r( g" J) e3 o$ H
rm -RF asm-$2% I$ ~& p: y7 z" o6 W
rm -f asm, K- c9 [7 |7 l; d& ]
mkdir asm-$2
. p: w; P8 |, z4 y0 ` ln -s asm-$2 asm
; _" w% i# Y! X, o/ c( D! Aelse8 u( t' N& M8 ]+ D/ c" t& L+ N% _
cd ./include" q! K% ~$ ^" w0 ?9 W/ F
rm -f asm+ |$ T8 b7 m  U
ln -s asm-$2 asm
$ l0 K7 v7 S2 I/ ^) Q+ }5 Efi
$ M5 t- v4 G- F1 W) L) i, m3 H# Z! [
rm -f asm-$2/arch       //删除include目录asm-arm目录下的arch: O* z! w5 U. q1 W% i7 {* |; Q1 u

- A  R7 |7 L, A& @) z/*-z表示如果 $6 为空则为真,-o表示或运算,$6=s3c24x0,故执行else后面语句*/
1 d3 y/ G+ M1 }! [9 C: n& _* B: o$ G8 Z
if [ -z "$6" -o "$6" = "NULL" ] ; then
& p' s7 j# S2 `4 ~ ln -s ${LNPREFIX}arch-$3 asm-$2/arch
8 f  X: a$ Y  N  |* Felse                                                         
7 o2 g  D% R% x( C1 ?, |+ [. P5 ^9 j ln -s ${LNPREFIX}arch-$6 asm-$2/arch   //asm-arm/arch链接指向asm/arch-s3c24x0
0 q( t( q- c+ k* O6 q! l, p, Nfi- h) J; z) S+ u: I. _( ]
' Z/ i0 o3 q0 G9 v- g
/*$2=arm,满足条件,删除asm-arm/proc,asm-arm/proc链接指向asm/proc-armv*/
! I; c5 Y6 l' `" R/ H' i3 B
% Q4 [8 A7 v7 k) Jif [ "$2" = "arm" ] ; then
+ n: Y) y: }/ q7 U3 g' X rm -f asm-$2/proc
3 n) ?, Z! r+ X ln -s ${LNPREFIX}proc-armv asm-$2/proc
6 [' ]/ b9 t) [1 x; }  \( |fi7 H; m& E4 x$ ?, T# q2 k; E( E
0 \$ t, }  c5 J6 e$ }  h7 s
#
4 B/ V% {' l  c# Create include file for Make) Z+ J7 f& ]: u/ l6 P& L& @1 I
#* M2 O0 \) c3 p
' h' N" |' E1 r$ i3 t
/*下面五句是创建顶层Makefile包含的文件  include/config.mk */
  T& S( A6 V" H- N0 E0 D0 Jecho "ARCH   = $2" >  config.mk       //    >是将内容输出到某个文件的重定向符号
, `' J0 s, W7 x0 k3 Z, I% o2 fecho "CPU    = $3" >> config.mk       //  >>是将内容追加输出到某个文件末尾的重定向符号  s. T+ Y  D, V+ J$ b
echo "BOARD  = $4" >> config.mk
: m* w6 C. m, B6 Y6 n: t* n) Z& O5 |0 T  _! W& a* z
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk  //$5=NULL,所以此句不满足
! C) x  Y' T, b5 b; G6 g
% h1 i0 f* O- B[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
, C6 M+ R  U+ N0 p4 B
% [) p; L6 U0 z0 W" q$ |9 j#
! l5 M4 @% O: A# Create board specific header file
4 Z9 [4 q% T9 B! a6 O" |#; M# _1 K1 e( v" S' D
if [ "$APPEND" = "yes" ] # Append to existing config file    //APPEND缺省为no,故创建一个新的config.h文件1 n& i( s& M4 u
then% |0 N9 }" F9 s0 v: n: `
echo >> config.h
) q" A, i" ]7 e1 {- O( G+ belse
, T+ z6 y& g3 I4 j5 p: Q  b > config.h  # Create new config file
+ W; O" u% a/ v! e2 e& P4 X5 ofi
$ b6 c& n7 p2 m% q( n& g* k( w
5 V$ I* M! n6 }' I3 m; x/*config.h文件里面的内容包含以下二句*/
+ X+ o; M9 O9 v0 ~; J, |! z
) P2 m1 b4 |( T/ {4 l, ^/*  Automatically generated - do not edit6 D+ H( J1 ^* U' A! I) U9 e

# c) o5 N# R1 p; d9 o7 _    #include <configs/$EmbedSky.h>       */. e0 Y" L3 b7 F$ G. W7 k
echo "/* Automatically generated - do not edit */" >>config.h) I3 P& v4 u1 Y! _% R
echo "#include <configs/$1.h>" >>config.h6 q( F, z+ q: o
1 [- a2 }, ?8 e# T3 D
exit 0  //结束,退出
, ?6 N$ C4 g7 k* o( @
* d  Z- v8 c: g' K———————————————————————————————————
' S$ e9 M% M8 W/ J: ~8 \' [  p6 w: \8 K' ?) y$ R& E
总结:
- h8 J" Z  [2 A. K# @9 z# Z8 F8 J$ ^: K* [2 Q$ X6 J
配置命令“make EmbedSky_config”实际的作用就是执行
2 `7 M, W0 o+ d" r( o# k& C1 x3 a+ Y& v9 P
. i1 g) N- `; t/ ^- A: h2 E./mkconfig EmbedSky arm arm920t EmbedSky NULL  s3c24x0 这个命令,将产生以下结果
) O5 V$ r! A& r. J0 F* I0 }" p* G, J
(1)、开发板名称BOARD_NAME=$1;& Z, j/ X; s5 ^2 q  x/ B
4 I9 n- S. }3 S
(2)、创建到平台/开发板相关的头文件的链接,如下:
: @: h1 |" a- g, c4 L) b' a( e' y# u" U1 B
            ln -s  asm-arm   asm' g. n9 N/ }) o% ]

+ A# H4 Y" A% b$ }8 M            ln -s   arch-s3c24x0   asm-arm/arch
: R9 }" E) \# K4 l" n" Q
1 D; j9 @; B  W% g            ln -s  proc-armv   asm-arm/proc
5 p: i1 R% e8 [6 T
# H( L3 o/ E9 L' _(3)创建顶层Makefile 包含的文件 include/config.mk,config.mk内容如下:# f: _0 m5 Q% b# M. Q8 _1 \5 s  t' z

0 v& `$ G: A- H2 i& I5 B           ARCH = arm
5 K8 Y) G  x: u0 C4 N$ ~* Y1 a( D/ @- ~* `, y. w9 I
           CPU = arm920t
1 g6 R' A4 \* Z& r, ?. G3 f1 G6 ]7 X! p
           BOARD = EmbedSky+ {, Q5 s$ j3 D

$ i2 M: C/ P- J4 m4 G$ U           SOC = s3c24x07 l2 e2 H+ A4 D

& E( Z% M% c1 F8 `3 i7 E% o(4)、创建开发板相关的头文件 include/config.h  S3 N5 E8 M6 ~4 ^& i2 F3 ^1 O  P

( K6 v+ o( N9 D9 V* P9 }  H1 D       从以上4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在 include/configs 目录下面也要新建一个文件 <board_name>.h,里面存放的就是开发板<board_name>的配置信息,里面包含二种宏定义类一种是CFG类另一种是CONFIG类。
4 X+ K! a' o- ]9 F
/ Y; d* P. V6 R/ f
! H  \' H6 f# `2 ^% t  u6 S/ c3 Z5 {/ x% `: G+ N+ B. ~* s
9 a0 e/ [$ X5 `; T! ^. `; C
) E, z2 R' Z, v1 D
这节就讲到这里吧,祝大家学习愉快。
) q9 r5 w  i/ y$ D0 Y7 n1 f
# v; I' `- Z8 R3 ^& `$ `

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-26 12:42 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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