一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 4085|回复: 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:4 U+ K+ L5 o4 i6 k4 z# D
@rm -f $(obj)include/config.h $(obj)include/config.mk \
# q) Z3 y2 y2 U, O  $(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \2 S) i2 \  w8 g3 `
  $(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; _5 T+ }- s' M! q# O9 H9 P3 I) `
export 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
6 l3 \* p  H9 r3 A' y# U-Boot for a specific board.
7 }+ i# K% r, E/ }9 }7 }; h#9 Q9 D( |/ \$ |
# Parameters:  Target  Architecture  CPU  Board [VENDOR] [SOC]% p' e2 J& N0 w
#  Y  p- p3 F' k6 w% o7 P
# (C) 2002-2006 DENX Software Engineering, Wolfgang Denk <wd@denx.de>
2 t+ x' f3 ]. k9 a; i5 V  m#
APPEND=no # Default: Create new config file& G4 H. u/ ?- }% M6 J7 |6 K
BOARD_NAME="" # Name to print in make output
while [ $# -gt 0 ] ; do. y0 c5 `0 W: D. r: N; b4 B6 K
case "$1" in
! E: @3 m# a4 B% n4 O --) shift ; break ;;
. n! y1 p2 m3 G: H9 L" F* j7 e -a) shift ; APPEND=yes ;;  V: d+ g  f3 r- B. p6 k9 `4 |, q
-n) shift ; BOARD_NAME="${1%%_config}" ; shift ;;, _6 p! f6 R, [* t: c
*)  break ;;
6 {; D; U0 o* {& Q, o! T esac1 z+ n/ K( K: a. h, E) R0 v7 M7 A
done
[ "${BOARD_NAME}" ] || BOARD_NAME="$1"
[ $# -lt 4 ] && exit 1
9 ]: }3 D' U2 S. |5 k3 q  ~4 G[ $# -gt 6 ] && exit 1
echo "Configuring for ${BOARD_NAME} board..."
#
+ ~" o* X  J9 M' L* p# Create link to architecture specific headers
. A. \: w! H, P9 P: P; X. [#& N$ d' s1 c4 K4 h: k% X6 i* w' [; H
if [ "$SRCTREE" != "$OBJTREE" ] ; then
) s! X8 C- \0 @$ ^9 { mkdir -p ${OBJTREE}/include
3 ^) S  v% D9 X* R3 i+ | mkdir -p ${OBJTREE}/include2+ `4 ^) I0 N5 q; Q
cd ${OBJTREE}/include2
( w5 M0 F% W# ^4 K1 ~ rm -f asm
8 d; w) t' M5 V( f& n4 i# { ln -s ${SRCTREE}/include/asm-$2 asm
  W3 e( Z) C, Y- R& W6 ]5 w LNPREFIX="../../include2/asm/"
# Z$ J7 G5 L8 j8 I% z cd ../include
4 \* a) U& i( \1 D5 P& M! D4 x rm -rf asm-$2
8 l. i1 t9 A# W! h3 o rm -f asm
8 @) ~, ]0 V: [1 D, t* E# i mkdir asm-$2+ P/ `# W) H: i5 k$ L: Q
ln -s asm-$2 asm3 o- d5 N& `3 G8 @+ D+ r" _( G. x9 V
else
+ j  r' Y/ n# A( w% \ cd ./include1 r1 @0 ^- B3 `5 f6 K: C5 i
rm -f asm
4 _( l* @* F9 \/ t  m) x# k ln -s asm-$2 asm
% i& I9 ~! F7 X& V  {- hfi
rm -f asm-$2/arch
if [ -z "$6" -o "$6" = "NULL" ] ; then; `. Z- R/ l  I6 \) V' z8 F' q
ln -s ${LNPREFIX}arch-$3 asm-$2/arch8 m, g# c5 ?+ E, z
else
* k$ f& E& M) @+ e( t* O1 P ln -s ${LNPREFIX}arch-$6 asm-$2/arch1 [8 S7 L( {8 v' Q! w& N4 x
fi
if [ "$2" = "arm" ] ; then5 [) L  k! w- D- E$ e
rm -f asm-$2/proc
" J7 |* P, W" W& N; p- D8 l ln -s ${LNPREFIX}proc-armv asm-$2/proc$ L5 v1 x! t% L8 h
fi
#4 R$ Q4 S8 [" L
# Create include file for Make, e- f+ x  Z/ N% Q3 \9 C
#
1 C; T1 q4 z0 |* |6 H; {$ U, a4 pecho "ARCH   = $2" >  config.mk0 U' A9 S7 @: ]2 H) Q
echo "CPU    = $3" >> config.mk
. b' M: Y: ?' q% q9 e) b0 Aecho "BOARD  = $4" >> config.mk
[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk
[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk
#
  G: {- |) u- ~; F+ \" {; B# Create board specific header file, m# E, k. n5 d
#8 w  a  ]5 b+ O0 t0 x$ E# M
if [ "$APPEND" = "yes" ] # Append to existing config file
& f! \# ?% K; xthen
) f" z" s4 J2 ~' c9 J+ P# H echo >> config.h
. d/ i9 C9 z& z- h9 eelse
9 e+ P6 b& O5 ^; g > config.h  # Create new config file
$ f" {) d; \# K7 Bfi
* f9 r+ Q/ L$ W$ ?9 [echo "/* Automatically generated - do not edit */" >>config.h. I0 u2 l7 H5 K9 X
echo "#include <configs/$1.h>" >>config.h
* c- l' V  d4 y4 O6 u, G3 Kecho "#include <asm/config.h>" >>config.h
exit 0

3 ~) E$ O3 A" o; Z
执行./mkconfig smdk2410 arm arm920t smdk2410 samsung s3c24x0命令,假设执行
的是“./mkconfig $1 $2 $3 $4 $5 $6”,将产生如下结果。
  • 开发板名称BOARD_NAME等于$1。
  • 创建到平台/开发板相关的头文件的链接,如下所示:0 ?+ A2 x# X0 x0 W' e1 }( B" m! F
   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 */
  G* m+ Y+ H) e6 n: w1 E3 U' F0 Y#include <configs/$1.h>
% }5 P5 w/ l1 ~- }! n0 h

本版积分规则

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

GMT+8, 2026-7-13 09:11 , Processed in 0.029144 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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