一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

搜索
查看: 3265|回复: 0

u-boot的Makefile分析之一make smdk2410_config

[复制链接]
发表于 2017-5-3 11:10 | 显示全部楼层 |阅读模式
在编译U-BOOT之前,先要执行
# make smdk2410_config
定义:
smdk2410_config : unconfig
@$(MKCONFIG) $(@:_config=) ARM arm920t smdk2410 samsung s3c24x0
根据依赖关系,会先执行unconfig目标
定义:
unconfig:
" D4 W! y2 K: G: ^% n @rm -f $(obj)include/config.h $(obj)include/config.mk \# L1 n! C8 u* A7 l7 x
  $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \3 z+ }2 r4 r. F
  $(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep
注意不指定输出目标时,obj,src变量均为空,unconfig下面的命令清理上一次执行make *_config时生成的头文件和makefile的包含文件。主要是include/config.h 和include/config.mk文件
MKCONFIG 是顶层目录下的mkcofig脚本文件,后面五个是传入的参数
定义:
MKCONFIG := $(SRCTREE)/mkconfig
2 E6 Y2 Z% F% Z% dexport MKCONFIG
执行:
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 samsung s3c24x0
$(@:_config=) :Target
arm:Architecture
arm920t :CPU
smdk2410 :Board
samsung :VENDOR
s3c24x0:SOC
对于S3C2410和S3C2440,两种都被称为SOC(System on Chip),这上面除了CPU外,还集成了包括UART、USB控制器、Nand Flash控制器等设备(称为片内外设)。S3C2410的CPU为ARM920T。
$(@:_config=) 的结果就是将“smdk2410_config”中的“_config”去掉,结果为“smdk2410”。
所以“make smdk2410_config”实际上就是执行如下命令:
unconfig
./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0
再看mkconfig的作用:
#!/bin/sh -e
# Script to create header files and links to configure, ~5 H4 T# x3 f6 M
# U-Boot for a specific board.' l! a" r& }& _3 r* x6 Q
#
8 @4 T5 O) U2 D  ?: H# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]
: W# @! z" ^! a& i. w* b# U) z#
* q/ \/ [& z8 c& T( b# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
- \/ j; C2 `2 `9 v# H; ^#
APPEND=no # Default: Create new config file2 E- h/ M; Y- t
BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do
) Y8 l) g0 ~4 p case "$1" in6 M9 y9 g* d, H; p) k, b5 H
--) shift ; break ;;
. S3 K, @1 Y6 G6 z; P -a) shift ; APPEND=yes ;;
' D6 z! v! V  b2 i+ ]3 l- Z2 \& n -n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
$ H6 r. c2 `# z1 G- z+ P *)  break ;;
5 k$ O' x: s- c( q, B% D esac
" E' U- a- {0 Adone
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
[ $# -lt 4 ] && exit 15 U- G( T9 `5 W% x$ ^. a9 V* L  M
[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME} board..."
#
, f2 U7 `5 H' `2 s/ W0 O# Create link to architecture specific headers6 c# H3 a3 h1 u9 a7 l) |( R
#
5 H8 H& `$ D7 e6 @$ o2 ]if [ "$SRCTREE" != "$OBJTREE" ] ; then
5 r; s$ S  F6 ^; O2 x mkdir -p ${OBJTREE}/include
2 r, r/ ]: _9 a! q mkdir -p ${OBJTREE}/include29 X1 w" Y. T0 p7 r7 l
cd ${OBJTREE}/include2$ a2 Q/ ^2 ?3 S% p" e
rm -f asm' ^4 A1 k: ?7 d0 Q/ Z% }
ln -s ${SRCTREE}/include/asm-$2 asm* _1 k% R2 Y& x, D2 {0 a
LNPREFIX="../../include2/asm/"
- g- v- E- o8 |' w% f cd ../include
3 s  W& l' i3 w: v' H* ~* ? rm -rf asm-$2
$ Y& K& v" T- h. u2 Z- C rm -f asm
/ b; y) a. K0 t; ^! d6 }, ~3 G1 V mkdir asm-$2$ n  K  `. k$ b5 E% C4 e1 A
ln -s asm-$2 asm
+ Q, y' U: F( O' Y6 ?else
) B# }& Y0 ?: J0 i9 p( d cd ./include, e# o  i( d3 ~% L
rm -f asm
' ]. H# P: s8 O: c0 X7 k ln -s asm-$2 asm5 B) A/ c# R$ ^8 p, l5 q: o
fi
rm -f asm-$2/arch
if [ -z "$6" -o "$6" = "NULL" ] ; then
2 r0 L9 Y) C" B' j' X4 e ln -s ${LNPREFIX}arch-$3 asm-$2/arch3 J/ ]) \) @' t8 _8 d/ X/ s
else- s2 i) k1 W0 O2 F# Z+ n: f2 o
ln -s ${LNPREFIX}arch-$6 asm-$2/arch
0 Y) k, c% u9 F: N$ r4 afi
if [ "$2" = "arm" ] ; then
& X0 t( }' N/ q5 v, z* { rm -f asm-$2/proc3 P' \& B8 J: m/ F! Z$ @
ln -s ${LNPREFIX}proc-armv asm-$2/proc) j/ q, @. W: f: ]( W; R6 H
fi
#
6 k; w0 |1 R4 z# Create include file for Make4 n( T: `1 O! K1 H4 Z
#1 J0 S6 G6 X' Y5 U
echo "ARCH   = $2" >  config.mk/ z. k! V) B/ G. E4 N
echo "CPU    = $3" >> config.mk( s3 L$ t) ~& Y! k1 }
echo "BOARD  = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
#
2 S+ J2 H% f7 ]5 B* B# Create board specific header file) X0 g/ a4 s* }& ]8 {5 o
#( K+ L* L7 F! a  J
if [ "$APPEND" = "yes" ] # Append to existing config file
# j8 }: `* v5 c+ f" G  Xthen
9 p9 q/ G, K4 ?1 o" y6 q% h7 t echo >> config.h
% ?( }7 \! I. \! R" E; o0 x  h- melse( I3 R; M, R; `$ f- x4 Z
> config.h  # Create new config file
8 @4 ]/ O$ u& Y8 q4 [+ Zfi) \1 f8 i$ n: |! P
echo "/* Automatically generated - do not edit */" >>config.h
/ v  c- I* M& P" R8 o0 X; o6 pecho "#include <configs/$1.h>" >>config.h
; c0 \6 ~, W  @" Z/ y0 iecho "#include <asm/config.h>" >>config.h
exit 0

. ], d, l. D% b- e
执行./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0命令,假设执行
的是“./mkconfig $1 $2 $3 $4 $5 $6”,将产生如下结果。
  • 开发板名称BOARD_NAME等于$1。
  • 创建到平台/开发板相关的头文件的链接,如下所示:
    7 _9 a. k9 u# L7 R* Z, K. X
   ln -s asm-$2 asm
   ln -s arch-$6 asm-$6/arch
   ln -s proc-armv asm-$2/proc
   3.  创建顶层Makefile包含的文件include/config.mk,如下所示:
  ARCH = $2
  CPU = $3
BOARD = $4
VENDOR =$5
SOC =$6
    4.  创建开发板相关的头文件include/config.h,如下所示:
/* Automatically generated - do not edit */* `  A' F6 x& K/ b9 a
#include <configs/$1.h>
. b: K1 j+ N( O5 z2 y+ e' a% F

本版积分规则

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

GMT+8, 2025-8-20 09:11 , Processed in 0.034604 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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