一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3447|回复: 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:
9 M9 G, N9 J' }/ L5 @: K4 A# v6 F @rm -f $(obj)include/config.h $(obj)include/config.mk \
) q  h1 k) w3 c1 W# J# I, }  $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \5 ^- N4 X' C( n1 m! C
  $(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
8 K: ]# P7 s5 T% \0 ~1 ?2 e2 h2 Xexport 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 configure7 {( D; g, a9 v, Q
# U-Boot for a specific board.
! Q* D6 U9 v, u. R* H3 Y8 w#* t, a6 N! ^, p5 M9 C
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]' a: x$ d: Y; Q6 T& \
#3 U' L$ T7 t$ E  o  @3 u; _8 s+ Z" N$ \
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>4 @/ w5 |$ |0 Z& f
#
APPEND=no # Default: Create new config file* r0 F2 C! w/ x8 t( p0 Q, d" n
BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do
( E; E- R9 I) W1 B0 A, d5 ? case "$1" in5 J( j/ h. M0 P* e
--) shift ; break ;;+ @4 z: s( z' X: A) |  z/ `( Q
-a) shift ; APPEND=yes ;;9 y7 ^9 S* ^  H  O/ o
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;
) F+ \, `/ v7 T$ ^5 n2 ], H *)  break ;;# Y7 @5 X; G; ^6 b5 @7 l/ Y. h
esac/ K9 l+ I) H! J5 \, D8 J) o2 {0 o
done
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
[ $# -lt 4 ] && exit 1* O0 C2 F# a  A; {: _7 Q& V" z
[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME} board..."
#
  b2 d' Z+ H2 a! Y# Create link to architecture specific headers) V8 d' I! i* S: q
#" y- J$ A/ `0 C% w4 ^. G2 M- P
if [ "$SRCTREE" != "$OBJTREE" ] ; then- P0 X7 A- C: ^1 A5 ]' f
mkdir -p ${OBJTREE}/include5 g' h0 |! D4 ^7 _
mkdir -p ${OBJTREE}/include2# j" {5 Q+ a: f, v) c
cd ${OBJTREE}/include21 l( q! K( Q* _4 F, G9 _( H. B
rm -f asm* X- o- G. @% E& a) o( M  ?. E
ln -s ${SRCTREE}/include/asm-$2 asm
$ z( ]! u# s% ^( S! H% z LNPREFIX="../../include2/asm/"
5 P3 g# k# u6 K3 |* C, a cd ../include
5 E% _7 F1 X- ~0 ~% Q  _7 u% X rm -rf asm-$2
, Y6 N+ D/ X2 [8 j7 r  ~) v7 A- B rm -f asm
& Z" C$ y& R# }+ D' V; U; X! \$ k! f mkdir asm-$2
. J+ w; Q  T; n% D ln -s asm-$2 asm
' f6 G4 Z: t. K7 d; Melse  s/ ?1 f4 _# Q
cd ./include( ~+ ~# r( T& i! n6 I. |4 `4 w
rm -f asm* v& F, ?+ L0 C/ f/ @
ln -s asm-$2 asm
- b/ x) W+ b! ?fi
rm -f asm-$2/arch
if [ -z "$6" -o "$6" = "NULL" ] ; then
4 _2 I" e! Y1 ]  Z. k, R ln -s ${LNPREFIX}arch-$3 asm-$2/arch
, d. ?4 O7 F+ O4 e- belse) B9 q' Z( g% H1 p1 E
ln -s ${LNPREFIX}arch-$6 asm-$2/arch8 K5 _) k6 D1 W" T! G7 ]9 F
fi
if [ "$2" = "arm" ] ; then) v5 I6 o) L( V1 m* R) l" Z
rm -f asm-$2/proc. b0 y# ?* A3 h  A2 i3 |: N
ln -s ${LNPREFIX}proc-armv asm-$2/proc; v; I) I9 S+ i2 Z# j" G; g9 K- l
fi
#
8 _1 l8 Q9 m; o3 u  o# Create include file for Make4 v  |- O( m( {6 H" F
#$ N2 v6 Z* R, W+ `4 y
echo "ARCH   = $2" >  config.mk  ~) R* K. G' y# h+ D! G8 W
echo "CPU    = $3" >> config.mk! Z$ ~, l8 \: j; ~& n) U
echo "BOARD  = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
#( V9 K9 b/ K* ]3 N! h( L9 ?1 W
# Create board specific header file- `" A9 E0 H5 P* C( B* O
#
- S6 F- f5 U; B9 B5 Lif [ "$APPEND" = "yes" ] # Append to existing config file
3 N7 t5 m: o, n1 `then* e$ M# ?( g6 t4 C, R2 P+ P( O
echo >> config.h# g# s# k6 C  B! V+ e: w7 \
else2 w+ P+ W: A2 j; L7 \1 X% x7 @- ]
> config.h  # Create new config file
- v) ]3 B3 N% z5 v4 Dfi
$ r3 D% G# r, q$ Secho "/* Automatically generated - do not edit */" >>config.h# X9 [# M/ v# p" s% Z
echo "#include <configs/$1.h>" >>config.h4 [! ]/ E# i# s1 k0 @
echo "#include <asm/config.h>" >>config.h
exit 0

' b7 Y) m" k4 J
执行./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0命令,假设执行
的是“./mkconfig $1 $2 $3 $4 $5 $6”,将产生如下结果。
  • 开发板名称BOARD_NAME等于$1。
  • 创建到平台/开发板相关的头文件的链接,如下所示:
    & Z5 u2 _. o3 c. r& I
   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 */
5 s$ [" u% b/ u/ a#include <configs/$1.h>
4 W3 W6 ^. T) q  n; q

本版积分规则

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

GMT+8, 2025-10-27 12:38 , Processed in 0.029279 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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