新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > u-boot的Makefile分析

u-boot的Makefile分析

作者:时间:2018-09-11来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/201809/388885.htm

mkconfig脚本文件的执行至此结束,继续剩下部分。

3)包含include/config.mk,其实也就相当于在里定义了上面四个变量而已。

4) 指定交叉编译器前缀:

ifeq ($(ARCH),arm)#这里根据ARCH变量,指定编译器前缀。
CROSS_COMPILE = arm-linux-
endif

5)包含config.mk:

#包含顶层目录下的config.mk,这个文件里面主要定义了交叉编译器及选项和编译规则
# load other configuration
include $(TOPDIR)/config.mk

下面config.mk的内容:

   @包含体系,开发板,CPU特定的规则文件:

ifdefARCH #指定预编译体系结构选项
sinclude $(TOPDIR)/$(ARCH)_config.mk# include architecture dependend rules
endif
ifdefCPU #定义编译时对齐,浮点等选项
sinclude $(TOPDIR)/cpu/$(CPU)/config.mk# include CPUspecific rules
endif
ifdefSOC #没有这个文件
sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk# include SoCspecific rules
endif

ifdefBOARD #指定特定板子的镜像连接时的内存基地址,重要!
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk# include board specific rules
endif

@定义交叉编译链工具


# Include the make variables (CC, etc...)
#
AS= $(CROSS_COMPILE)as
LD= $(CROSS_COMPILE)ld
CC= $(CROSS_COMPILE)gcc
CPP= $(CC) -E
AR= $(CROSS_COMPILE)ar
NM= $(CROSS_COMPILE)nm
STRIP= $(CROSS_COMPILE)strip
OBJCOPY = $(CROSS_COMPILE)objcopy
OBJDUMP = $(CROSS_COMPILE)objdump
RANLIB= $(CROSS_COMPILE)RANLIB

@定义AR选项ARFLAGS,调试选项DBGFLAGS,优化选项OPTFLAGS

 预处理选项CPPFLAGS,C编译器选项CFLAGS,连接选项LDFLAGS

 LDFLAGS += -Bstatic -T $(LDSCRIPT) -Ttext $(TEXT_BASE) $(PLATFORM_LDFLAGS) #指定了起始地址TEXT_BASE

@指定编译规则:

$(obj)%.s:%.S
$(CPP) $(AFLAGS) -o $@ $
$(obj)%.%.S
$(CC) $(AFLAGS) -c -o $@ $
$(obj)%.%.c
$(CC) $(CFLAGS) -c -o $@ $

回到顶层makefile文件:

6)U-boot需要的目标文件。

OBJS = cpu/$(CPU)/start.o # 顺序很重要,start.o必须放第一位

7)需要的库文件:

LIBS = lib_generic/libgeneric.a
LIBS += board/$(BOARDDIR)/lib$(BOARD).a
LIBS += cpu/$(CPU)/lib$(CPU).a
ifdef SOC
LIBS += cpu/$(CPU)/$(SOC)/lib$(SOC).a
endif
LIBS += lib_$(ARCH)/lib$(ARCH).a
LIBS += fs/cramfs/libcramfs.a fs/fat/libfat.a fs/fdos/libfdos.a fs/jffs2/libjffs2.a
fs/reiserfs/libreiserfs.a fs/ext2/libext2fs.a
LIBS += net/libnet.a
LIBS += disk/libdisk.a
LIBS += rtc/librtc.a
LIBS += dtt/libdtt.a
LIBS += drivers/libdrivers.a
LIBS += drivers/nand/libnand.a
LIBS += drivers/nand_legacy/libnand_legacy.a
LIBS += drivers/sk98lin/libsk98lin.a
LIBS += post/libpost.a post/cpu/libcpu.a
LIBS += common/libcommon.a
LIBS += $(BOARDLIBS)

LIBS := $(addprefix $(obj),$(LIBS))
.PHONY : $(LIBS)

根据上面的include/config.mk文件定义的ARCH、CPU、BOARD、SOC这些变量。硬件平台依赖的目录文件可以根据这些定义来确定。SMDK2410平台相关目录及对应生成的库文件如下。
board/smdk2410/ :库文件board/smdk2410/libsmdk2410.a
cpu/arm920t/ :库文件cpu/arm920t/libarm920t.a
cpu/arm920t/s3c24x0/ :库文件cpu/arm920t/s3c24x0/libs3c24x0.a
lib_arm/ :库文件lib_arm/libarm.a
include/asm-arm/ :下面两个是头文件。
include/configs/smdk2410.h

8)最终生成的各种镜像文件:

ALL = $(obj).srec $(obj).bin $(obj)System.map $(U_BOOT_NAND)

all:$(ALL)

$(obj).hex:$(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O ihex $ $@

$(obj)u-boot.srec:$(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O srec $ $@

$(obj)u-boot.bin:$(obj)u-boot
$(OBJCOPY) ${OBJCFLAGS} -O binary $ $@



关键词: Makefile u-boot 分析

评论


相关推荐

技术专区

关闭