UBOOT编译配置过程解析

**

主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)
发布了27 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_24622489/article/details/86649108