uboot主编译脚本分析

这里是对uboot的Makefile做的一个比较详细的分析

生成版本信息

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

软件都是有不同版本的,uboot也不例外,在makefile开头几行就定义了版本信息,并导出到一个头文件中

导出架构信息

HOSTARCH := $(shell uname -m | \
	sed -e s/i.86/i386/ \
    ...

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

export	HOSTARCH HOSTOS

获得当前主机的架构和系统,导出到环境变量备用

静默安装

静默安装原理很简单,只不过是把echo替换成了*?

静默安装时脚本就不会输出那么多没用信息了

uboot链接文件产生位置

# U-boot build supports producing a object files to the separate external
# directory. Two use cases are supported:
...

和其他大型的项目类似,uboot也可以把链接文件输出位置重定义到某个位置

而且uboot提供了两种方式重定义输出

# 1) Add O= to the make command line
# 'make O=/tmp/build all'
#
# 2) Set environement variable BUILD_DIR to point to the desired location
# 'export BUILD_DIR=/tmp/build'
# 'make'

实现的过程

这部分看看脚本就会明白,这里大概说一下

先判断定义的是O还是直接定义的BUILD_DIR,定义的是O的话就把O的值赋给BUILD_DIR(非空)

接下来就定义并导出了OBJTREE(BUILD_DIR设置过来的链接文件的位置) SRCTREE(当前目录设置来的源码目录) TOPDIR(当前目录设置为顶层) LNDIR(OBJTREE保存为链接文件位置)

定义并导出MKCONFIG(SRCTREE下的mkconfig脚本,用于配置uboot)

如果OBJTREESRCTREE不等就定义并导出REMOTE_BUILD,并obj := $(OBJTREE) src := $(SRCTREE)

配置交叉编译工具链

从*$(obj)include/config.mk导入ARCH CPU BOARD VENDOR SOC这几个变量,config.mk这个文件是make x210_sd_config*产生的,x210_sd_config在Makefile的最后一部分有定义,这是为了确保Makefile的通用性

x2
上一篇: 体验deepin系统
下一篇: pid是什么
greedyhao
博客等级 码龄10年 301粉丝 75原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值