u-boot编译链接过程分析(ARM)

本文详细介绍了u-boot在ARM平台的编译过程,从config.mk配置,到LDFLAGS、AFLAGS、CFLAGS的设置,再到连接编译阶段的.o和.a文件处理,最后总结了整个uboot编译的四个步骤,帮助读者理解u-boot的构建机制。
摘要由CSDN通过智能技术生成

1.config.mk

通常配置文件生成之后,即可使用make all进行编译,在如下Makefile里面

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

ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = ppc_8xx-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-linux-
endif
......
# load other configuration
include $(TOPDIR)/config.mk

包含了之前我们生成的include/config.mk,并且在以后还能使用ARCH、CPU、BOARD、SOC

然后确定编译平台和所使用的交叉编译工具,然后包含了顶层的config.mk,看顶层config.mk如下几行

#
# Include the make variables (CC, etc...)
#
AS	= $(CROSS_COMPILE)as
LD	= $(CROSS_COMPILE)ld
CC	= $(CROSS_COMPILE)gcc
CPP	= $(CC) -E

当我们编译的时候使用CROSS_COMPILE=arm-linux-,就会自动编译为相应工具,比如gcc就为arm-linux-gcc

2. LDFLAGS、AFLAGS、CFLAGS

LDFLAGS += -Bstatic -T $(LDSCRIPT) $(PLATFORM_LDFLAGS)
ifneq ($(TEXT_BASE),)
LDFLAGS += -Ttext $(TEXT_BASE)

这里LDSCRIPT如下

ifndef LDSCRIPT
#LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds.debug
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds
endif

这里使用LDSCRIPT := $(TOPDIR)/board/$(BOARDDIR)/u-boot.lds

这里TOPDIR就是当前目录,而BOARDDIR为下面所示

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
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值