**
主Makefile 内容解析
**
U_BOOT_VERSION = 1.3.4
VERSION_FILE = $(obj)include/version_autogenerated.h
HOSTARCH := i386
HOSTOS := linux
export HOSTARCH HOSTOS
MKCONFIG := $(SRCTREE)/mkconfig //主要建立了各种符号链接到arm
,然后生成下面ARCH等相关配置信息的config.mk文件
export MKCONFIG
ifeq ($(obj)include/config.mk,$(wildcard $(obj)include/config.mk))
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export ARCH CPU BOARD VENDOR SOC
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/4.4.3/bin/arm-none-linux-gnueabi-
endif
export CROSS_COMPILE
# load other configuration
include $(TOPDIR)/config.mk
//主要内容都是和编译相关的,这里面指定了链接脚本和链接地址
OBJS = cpu/$(CPU)/start.o
...
LIBS = lib_generic/libgeneric.a
....
ALL += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(U_BOOT_NAND) $(
U_BOOT_ONENAND) $(obj)u-boot.dis
all: $(ALL)
x210_sd_config : unconfig
@$(MKCONFIG) $(@:_config=) arm s5pc11x x210 samsung s5pc110
@echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
make x210_sd_config 等价与
mkconfig x210_sd arm s5pc11x x210 samsung s5pc110
echo "TEXT_BASE = 0xc3e00000" > $(obj)board/samsung/x210/config.mk
**
mkconfig脚本内容
***************************************************************************
**mkconfig x210_sd arm s5pc11x x210 samsung s5pc110
** $0 $1 $2 $3 $4 $5 $6
/***********************mkconfig脚本内容******************************/
mkconfig脚本中大致内容:
BOARD_NAME=x210_sd
echo "Configuring for x210_sd board..."
cd ./include
rm -f asm
ln -s asm-arm asm
rm -f regs.h
ln -s s5pc110.h regs.h
rm -f asm-arm/arch
ln -s arch-s5pc11x asm-arm/arch
rm -f asm-arm/proc
ln -s proc-armv asm-arm/proc
echo "ARCH = arm" > config.mk
echo "CPU = s5pc11x" >> config.mk
echo "BOARD = x210" >> config.mk
echo "VENDOR = samsung" >> config.mk
echo "SOC = s5pc110" >> config.mk
> config.h
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/x210_sd.h>" >>config.h
总结make x210_sd_config 所做的事情:
1.在include 目录下建立符号链接,全部指向与arm 和 s5pc11x相关架构
ln -s asm-arm asm
ln -s arch-s5pc11x asm-arm/arch
ln -s proc-armv asm-arm/proc
2.创建include/config.mk文件,里面是ARCH CPU BOARD VENDOR SOC 相关信息,这些信息用来指导编译过程。
ARCH = arm
CPU = s5pc11x
BOARD = x210
VENDOR = samsung
SOC = s5pc110
3.创建include/config.h头文件,里面内容包含了include/configs/x210_sd.h配置头文件
/* Automatically generated - do not edit */
#include <configs/x210_sd.h>
**
所以要再board目录下创建一个新的单板还需要在include/configs/下创建一个配置文件BOARD_NAME.h
根目录下的config.mk文件解析
**
主要是根据include/config.mk中的配置信息来决定编译连接的相关设置
# clean the slate ...
PLATFORM_RELFLAGS =
PLATFORM_CPPFLAGS =
PLATFORM_LDFLAGS =
ifeq ($(ARCH),arm)
ifeq ($(CROSS_COMPILE),powerpc-netbsd-)
PLATFORM_CPPFLAGS+= -D__ARM__
endif
HOSTCC = gcc
HOSTCFLAGS = -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer
HOSTSTRIP = strip
cc-option = $(shell if $(CC) $(CFLAGS) $(1) -S -o /dev/null -xc /dev/null \
> /dev/null 2>&1; then echo "$(1)"; else echo "$(2)"; fi ;)
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
sinclude $(TOPDIR)/$(ARCH)_config.mk
sinclude $(TOPDIR)/cpu/$(CPU)/config.mk
sinclude $(TOPDIR)/cpu/$(CPU)/$(SOC)/config.mk
BOARDDIR = $(VENDOR)/$(BOARD)
BOARDDIR = $(BOARD)
sinclude $(TOPDIR)/board/$(BOARDDIR)/config.mk
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
OBJCFLAGS += --gap-fill=0xff
CPPFLAGS += -DTEXT_BASE=$(TEXT_BASE)