config.mk分析

本文档详细解析了U-Boot项目的config.mk文件,包括如何判断本地编译还是独立目录编译,设置了交叉工具编译链,并介绍了如何根据ARCH、CPU、SOC和BOARD生成特定的配置文件。此外,还解释了如何根据CONFIG_NAND_U_BOOT配置选择不同的链接脚本,以及TEXT_BASE在链接过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#用来判断是本地编译还是单独文件夹编译
ifneq ( ( O B J T R E E ) , (OBJTREE), (OBJTREE),(SRCTREE))
ifeq ( ( C U R D I R ) , (CURDIR), (CURDIR),(SRCTREE))
dir :=
else
dir := $(subst ( S R C T R E E ) / , , (SRCTREE)/,, (SRCTREE)/,,(CURDIR))
endif

obj := $(if ( d i r ) , (dir), (dir),(OBJTREE)/ ( d i r ) / , (dir)/, (dir)/,(OBJTREE)/)
src := $(if ( d i r ) , (dir), (dir),(SRCTREE)/ ( d i r ) / , (dir)/, (dir)/,(SRCTREE)/)

$(shell mkdir -p $(obj))
else
obj :=
src :=
endif

#设置交叉工具编译链(CROSS_COMPILE是我门前面所设置的前缀)
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

#在输出编译目录的include下生成autoconf.mk文件(作用:用来指导uboot编译的过程,生成这个文件的材料在include/configs/x210_sd.h里,x210_sd.h里的宏定义就是uboot移植的配置)
sinclude $(OBJTREE)/include/autoconf.mk

#在根目录下生成各自的config来包含各自的属性信息
ifdef ARCH
sinclude ( T O P D I R ) / (TOPDIR)/ (TOPDIR)/(ARCH)_config.mk # include architecture dependend rules
endif
ifdef CPU
sinclude ( T O P D I R ) / c p u / (TOPDIR)/cpu/ (TOPDIR)/cpu/(CPU)/config.mk # include CPU specific rules
endif
ifdef SOC
sinclude ( T O P D I R ) / c p u / (TOPDIR)/cpu/ (TOPDIR)/cpu/(CPU)/$(SOC)/config.mk # include SoC specific rules
endif
ifdef VENDOR
BOARDDIR = ( V E N D O R ) / (VENDOR)/ (VENDOR)/(BOARD)
else
BOARDDIR = $(BOARD)
endif
ifdef BOARD
sinclude ( T O P D I R ) / b o a r d / (TOPDIR)/board/ (TOPDIR)/board/(BOARDDIR)/config.mk # include board specific rules
endif

#判断是否定义CONFIG_NAND_U_BOOT=y,如果定义则执行LDSCRIPT := ( T O P D I R ) / b o a r d / (TOPDIR)/board/ (TOPDIR)/board/(BOARDDIR)/u-boot-nand.lds,如果没有定义则执行LDSCRIPT := ( T O P D I R ) / b o a r d / (TOPDIR)/board/ (TOPDIR)/board/(BOARDDIR)/u-boot.lds(u-boot-nand.lds和u-boot.lds都是uboot的编译链接脚本,用来配置uboot是nand编译还是inand编译)
ifeq ($(CONFIG_NAND_U_BOOT),y)
LDSCRIPT := ( T O P D I R ) / b o a r d / (TOPDIR)/board/ (TOPDIR)/board/(BOARDDIR)/u-boot-nand.lds
else
LDSCRIPT := ( T O P D I R ) / b o a r d / (TOPDIR)/board/ (TOPDIR)/board/(BOARDDIR)/u-boot.lds
endif

#判断TEXT_BASE是否不为空,如果是不为空则添加TEXT_BASE(TEXT_BASE是uboot的链接地址)
ifneq ( ( T E X T B A S E ) , ) C P P F L A G S + = − D T E X T B A S E = (TEXT_BASE),) CPPFLAGS += -DTEXT_BASE= (TEXTBASE),)CPPFLAGS+=DTEXTBASE=(TEXT_BASE)
endif

#如果TEXT_BASE不为空则将uboot链接到TEXT_BASE地址处
ifneq ($(TEXT_BASE),)
LDFLAGS += -Ttext $(TEXT_BASE)
endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值