uboot的makefile分析

先从配置命令开始分析:

Make distclean

Make wjy2440_config

Make

 

1、先在顶层Makefile中搜索distclean关键字

distclean: clobber unconfig

搜索clobber unconfig这两个依赖

unconfig:

@rm -f $(obj)include/config.h $(obj)include/config.mk \

$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \

$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep

从这里可以知道unconfig主要是删除一些配置脚本

 

clobber: clean

@find $(OBJTREE) -type f \( -name '*.depend' \

-o -name '*.srec' -o -name '*.bin' -o -name u-boot.img \) \

-print0 \

| xargs -0 rm -f

@rm -f $(OBJS) $(obj)*.bak $(obj)ctags $(obj)etags $(obj)TAGS \

$(obj)cscope.* $(obj)*.*~

@rm -f $(obj)u-boot $(obj)u-boot.map $(obj)u-boot.hex $(ALL)

@rm -f $(obj)u-boot.kwb

@rm -f $(obj)u-boot.imx

@rm -f $(obj)tools/{env/crc32.c,inca-swap-bytes}

@rm -f $(obj)arch/powerpc/cpu/mpc824x/bedbug_603e.c

@rm -fr $(obj)include/asm/proc $(obj)include/asm/arch $(obj)include/asm

@rm -fr $(obj)include/generated

@[ ! -d $(obj)nand_spl ] || find $(obj)nand_spl -name "*" -type l -print | xargs rm -f

@[ ! -d $(obj)onenand_ipl ] || find $(obj)onenand_ipl -name "*" -type l -print | xargs rm -f

@[ ! -d $(obj)mmc_spl ] || find $(obj)mmc_spl -name "*" -type l -print | xargs rm -f

这里也是清除上次编译生成的文件

 

2、在Makefile搜索wjy2440_config关键字

wjy2440_config: unconfig

@mkdir -p $(obj)include $(obj)board/samsung/wjy2440

@mkdir -p $(obj)nand_spl/board/samsung/wjy2440

@echo "#define CONFIG_NAND_U_BOOT" > $(obj)include/config.h

@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

@echo "RAM_TEXT = 0x33000000" >> $(obj)board/samsung/wjy2440/config.tmp

@$(MKCONFIG) wjy2440 arm arm920t - samsung s3c24x0

@echo "CONFIG_NAND_U_BOOT = y" >> $(obj)include/config.mk

wjy2440_config主要是依赖unconfig,先执行unconfig,删除配置的脚本文件。然后在执行下面的语句,最终执行@$(MKCONFIG) wjy2440 arm arm920t - samsung s3c24x0,其他的命令主要是为了支持从nandflash启动。

3、现在分析@$(MKCONFIG) wjy2440 arm arm920t - samsung s3c24x0这里我们主要是MKCONFIG不知道是什么意思。在查找MKCONFIG

MKCONFIG := $(SRCTREE)/mkconfig

是根目录下的mkconfig文件 

@$(MKCONFIG) wjy2440 arm arm920t - samsung s3c24x0这个命令相当于执行

Mkconfig wjy2440 arm arm920t - samsung s3c24x0

 

4、分析mkconfig文件

 

 

看到$1=”-A”想到在makefile中有:

%_config:: unconfig

@$(MKCONFIG) -A $(@:_config=)

%_config--这个应该是所有没有配置的make ***_config都会执行这个语句,S1=-A

猜下这里的意思,在board.cfgmakefile中如果是没有定义***config执行这条语句,然后在mkconfig中会报错。

 

 

 

执行完这个字include/config.mk文件下生成

 

 

 

 

BOARDDIR=samsung/wjy2440

 

 

新建config.h这个文件在include

 

 

向config.h追加以下内容

 

 

到这里配置过程全部分析完了

 

5、分析编译过程,也就是执行make命令的时候

打开根目录下的makefile,一直找下来发现第一个目标是all

 

 

这里主要是包含几个配置文件

 

接下来找链接脚本

 

 

LDSCRIPT在之前是没有定义的,所以

LDSCRIPT = arch/samsung/cpu/arm920t/u-boot.lds

但是配置了splnandflash启动,在include/config.mk 中最后追加CONFIG_NAND_U_BOOT=Y, 由于在编译完成的时候,LDSCRIPT =............u-boot-nand.lds

 

打开arch/samsung/cpu/arm920t/u-boot.lds的链接脚本

 

这里找到了第一个执行的程序arch/arm/cpu/arm920t/start.S

 

回到根目录的makefile

 

OBJS  = arch/arm/cpu/arm920t/start.o 

这里第一个目标是编译目标也是start.s

 

一直读,找到这个

 

现在就要去找ALL依赖

ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map

 

u-boot.srec 

 

其中OBJCOPY = arm-linux-objcopy

再去找依赖的u-boot

$(obj)u-boot: depend \

$(SUBDIRS) $(OBJS) $(LIBBOARD) $(LIBS) $(LDSCRIPT) $(obj)u-boot.lds

$(GEN_UBOOT)

ifeq ($(CONFIG_KALLSYMS),y)

smap=`$(call SYSTEM_MAP,u-boot) | \

awk '$$2 ~ /[tTwW]/ {printf $$1 $$3 "\\\\000"}'` ; \

$(CC) $(CFLAGS) -DSYSTEM_MAP="\"$${smap}\"" \

-c common/system_map.c -o $(obj)common/system_map.o

$(GEN_UBOOT) $(obj)common/system_map.o

Endif

 

其中

GEN_UBOOT = \

UNDEF_SYM=`$(OBJDUMP) -x $(LIBBOARD) $(LIBS) | \

sed  -n -e 's/.*\($(SYM_PREFIX)__u_boot_cmd_.*\)/-u\1/p'|sort|uniq`;\

cd $(LNDIR) && $(LD) $(LDFLAGS) $(LDFLAGS_$(@F)) $$UNDEF_SYM $(__OBJS) \

--start-group $(__LIBS) --end-group $(PLATFORM_LIBS) \

-Map u-boot.map -o u-boot

 

$(obj)u-boot.bin: $(obj)u-boot

$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@

$(BOARD_SIZE_CHECK)

 

到此,makefile已经全部分析完成。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值