显然,执行# make smdk2410_config时,先执行unconfig目标,注意不指定输出目标时,obj,src变量均为空,unconfig下面的命令清理上一次执行make *_config时生成的头文件和makefile的包含文件。www.linuxidc.com主要是include/config.h 和include/config.mk文件。
然后才执行命令
@$(MKCONFIG) $(@:_config=) arm arm920t smdk2410 NULL s3c24x0 MKCONFIG 是顶层目录下的mkcofig脚本文件,后面五个是传入的参数。
#包含顶层目录下的config.mk,这个文件里面主要定义了交叉编译器及选项和编译规则 # load other configuration include $(TOPDIR)/config.mk
下面分析config.mk的内容:
@包含体系,开发板,CPU特定的规则文件:
ifdef ARCH #指定预编译体系结构选项 sinclude $(TOPDIR)/$(ARCH)_config.mk # include architecture dependend rules endif ifdef CPU #定义编译时对齐,浮点等选项 sinclude $(TOPDIR)/cpu/$(CPU)/config.mk # include CPU specific rules endif ifdef SOC #没有这个文件 sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk # include SoC specific rules endif
ifdef BOARD #指定特定板子的镜像连接时的内存基地址,重要! 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