分析顶层Makefile:
117行包含了配置过程生成的config.mk文件:
include $(OBJTREE)/include/config.mk
选择对应的交叉编译工具链
ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),ppc)
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = powerpc-linux-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
……
endif
组织链接对象
OBJS = cpu/$(CPU)/start.o #组织链接文件,第一个是start.o
ifeq ($(CPU),i386)
OBJS += cpu/$(CPU)/start16.o
……
组织库文件
LIBS = lib_generic/libgeneric.a
LIBS += board/$(BOARDDIR)/lib$(BOARD).a
……
生成bin文件的依赖是$(obj)u-boot
生成$(obj)u-boot的依赖是各个子目录、目标文件、库文件、链接文件
$(obj)u-boot.bin: $(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
……
$(obj)u-boot: depend version $(SUBDIRS) $(OBJS) $(LIBS) $(LDSCRIPT)
UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) |sed -n -e 's/.*\(__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
分析Makefile逐一替换依赖项,可以得到链接命令
配置后执行make命令,在输出内容的最后也可以看到链接命令
链接命令的一部分是:
arm-linux-ld -Bstatic -T /home/book/Desktop/new_pro/two/u-boot-1.1.6/board/smdk2410/u-boot.lds -Ttext 0x33F80000 $UNDEF_SYM cpu/arm920t/start.o
从链接命令可以知道
1、链接脚本:u-boot-1.1.6/board/smdk2410/u-boot.lds
2、链接的第一个文件:cpu/arm920t/start.S
结合链接脚本可以知道,链接地址为:0x33F80000 + 0x00000000