Mekefile中所做的事情

1:经过之前的分析我们知道Makefile主要做的事情有:

(1):首先配置makefile

make x210_sd_config

配置时实际上执行的是:./mkconfig xd_210 arm s5pc11x x210 samsung s5pc110

./mkconfig 为一个shell脚本;

xd_210 arm s5pc11x x210 samsung s5pc110为6个参数传入mkconfig脚本中;

在把"TEXT_BASE = 0xc3e00000" 写入board/samsung/x210/config.mk文件中;

(2):mkcofig脚本做的事情:

生成4个连接文件,分别为:

asm文件连接到asm-arm

reg.h文件连接到s5pc110.h

asm-arm/arch文件连接到arch-s5pc11x

arm-arm/proc文件连接到proc-armv

输出5个变量到config.mk文件中

ARCH   = arm

CPU    = s5pc11x

BOARD  = x210

VENDOR = samsung

SOC    = s5pc110

最后创建config.h文件夹;

echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h

把/* Automatically generated - do not edit */

#include <configs/x210.h>

写入config.h文件中。

(3)配置以后就可以进入主makefile文件中了

主makefile中做的事情:

a:设置了HOSTARCH HOSTOS两个环境变量 比如说用的armcpu,;linux系统则

HOSTARCH = arm

HOSTOS = linux

b:可以设置静默编译:make -s即可

c:设置生成uboot.bin的目录 make clean、 x210_sd_config 以及make 是都要加上 O=/XX/XX

d:设置了一个环境变量 REMOTE_BUILD

e:输出ARCH CPU BOARD VENDOR SOC 5个环境变量

f:设置交叉编译工具链:CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

g:执行/topdir/config.mk文件:配置交叉工具链

HOSTCC = gcc

HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
HOSTSTRIP = strip

AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
CPP = $(CC) -E
AR = $(CROSS_COMPILE)ar
NM = $(CROSS_COMPILE)nm
LDR = $(CROSS_COMPILE)ldr
STRIP = $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB = $(CROSS_COMPILE)RANLIB

export CONFIG_SHELL HPATH HOSTCC HOSTCFLAGS CROSS_COMPILE \
AS LD CC CPP AR NM STRIP OBJCOPY OBJDUMP \
MAKE
export TEXT_BASE PLATFORM_CPPFLAGS PLATFORM_RELFLAGS CPPFLAGS CFLAGS AFLAGS

等等。。。。。。

BOARDDIR = $(VENDOR)/$(BOARD)

h:设置目标、依赖、规则

OBJS  = cpu/$(CPU)/start.o

LIBS:个目录下的子makefile 库文件

LIBBOARD:board/samsung/x210/ 目录下的makefile

SUBDIRS = tools \
examples \
api_examples

api 工具 实例

$(obj)u-boot: depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)

 

 

最后生成 autocofig.mk、 autocofig.mk.dep两个文件;

--------------------------在结束的位置说一下uboot中的连接脚本-------------------------------

$(obj)u-boot:        depend $(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT)
        UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \
        sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\
        cd $(LNDIR) && $(LD) $(LDFLAGS) $$UNDEF_SYM $(__OBJS) \
            --start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \
            -Map u-boot.map -o u-boot
$(LD) $(LDFLAGS)
$(LDFLAGS)变量在/topdir/config.mk中

LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
ifneq ($(TEXT_BASE),)
LDFLAGS += -Ttext $(TEXT_BASE)
endif

$(LDSCRIPT) 这个变量为连接脚本变量

ifndef LDSCRIPT
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
endif
endif

LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds 连接脚本在/board/samsung/x210/u-boot.lds

 TEXT_BASE = 0xc3e00000

TEXT_BASE与连接脚本同时存在的话,以TEXT_BASE中的值为准;

posted @ 2017-02-05 13:30  biaohc  阅读(459)  评论(0编辑  收藏  举报