uboot 的主Makefile分析

本文详细分析了U-Boot的主Makefile,包括版本号设置、编译主机信息导出、静默编译、编译方式配置、配置脚本、交叉编译工具链前缀、链接脚本等内容,阐述了U-Boot编译过程中的关键步骤和可移植性实现。
摘要由CSDN通过智能技术生成

1. uboot版本号设置

VERSION = 1
PATCHLEVEL = 3
SUBLEVEL = 4
EXTRAVERSION =
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
VERSION_FILE = $(obj)include/version_autogenerated.h

设置uboot的版本号,version_autogenerated.h在编译后自动生成,里面的内容为 #define U_BOOT_VERSION "U-Boot 1.3.4",以宏定义的方式定义uboot的版本号。

2. 导出编译主机的CPU架构和操作系统

HOSTARCH := $(shell uname -m | \
	sed -e s/i.86/i386/ \
	    -e s/sun4u/sparc64/ \
	    -e s/arm.*/arm/ \
	    -e s/sa110/arm/ \
	    -e s/powerpc/ppc/ \
	    -e s/ppc64/ppc/ \
	    -e s/macppc/ppc/)

HOSTOS := $(shell uname -s | tr '[:upper:]' '[:lower:]' | \
	    sed -e 's/\(cygwin\).*/cygwin/')

export	HOSTARCH HOSTOS

(1) 在shell中符号|叫做管道,把管道前的运算式的输出作为后面一个运算式的输入,sed可以实现字符替换;

(2)tr '[:upper:]' '[:lower:]'是将大写字符替换为小写字符;

(3)export    HOSTARCH HOSTOS是导出环境变量,分别是主机系统架构和主机操作系统,后面会用到。

3.静默编译

# Allow for silent builds
ifeq (,$(findstring s,$(MAKEFLAGS)))
XECHO = echo
else
XECHO = :
endif

编译时使用 make -s, 使用 ifeq (,$(findstring s,$(MAKEFLAGS))) 来判断是否有属性s,如果有,则XECHO为空,不打印编译信息。

4. 实现两种编译方式,原地编译和设置输出目录编译

ifdef O
ifeq ("$(origin O)", "command line")
BUILD_DIR := $(O)
endif
endif

ifneq ($(BUILD_DIR),)
saved-output := $(BUILD_DIR)

# Attempt to create a output directory.
$(shell [ -d ${BUILD_DIR} ] || mkdir -p ${BUILD_DIR})

# Verify if it was successful.
BUILD_DIR := $(shell cd $(BUILD_DIR) && /bin/pwd)
$(if $(BUILD_DIR),,$(error output directory "$(saved-output)" does not exist))
endif # ifneq ($(BUILD_DIR),)

OBJTREE		:= $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))
SRCTREE		:= $(CURDIR)
TOPDIR		:= $(SRCTREE)
LNDIR		:= $(OBJTREE)
export	TOPDIR SRCTREE OBJTREE

 配置输出目录,可以防止污染源代码。

OBJTR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值