uboot移植——uboot顶层Makefile详解(代码实例)

本文详细介绍了U-Boot引导加载器的基本概念、作用及其在不同场景下的应用形式。接着,重点分析了U-Boot顶层Makefile的结构,包括版本号、编译选项、编译方法、编译目录管理、目标平台定义以及编译工具的设定等关键部分,揭示了Makefile如何指导编译过程并适配不同硬件平台。
摘要由CSDN通过智能技术生成


1.u-boot简介

    uboot的全称是Universal Boot Loader,是一个遵循GPL的开源软件,是一个裸机代码,可以看做是一个裸机综合例程。
    uboot起到的作用就是在芯片上电以后,uboot会初始化DDR等外设,然后将Linux内核从flash拷贝到DDR中,最后启动Linux内核,简而言之,是起到一个引导的作用。
    uboot官方的源码是给半导体厂商准备的,半导体厂商会下载uboot源码然后将自己相应的芯片移植进去。也就是说这个uboot相当于是为这家厂商定制的,由他们自己维护。
    我们使用的板子一般不是半导体厂商的评估板,都是参考官方开发板进行了相应的修改。所以对于uboot也需要进行相应的修改以适应开发板。

种类 名称
uboot官方的uboot代码 由uboot官方维护的版本,更新快,基本包含所有常用芯片
半导体厂商的uboot代码 半导体厂商维护的一个uboot,专门针对自家芯片,在对自家芯片的支持上比uboot官方好
开发板厂商的uboot代码 开发板厂商在半导体厂商提供的uboot基础上加入对自家开发板的支持

2.u-boot顶层Makefile分析

    在阅读uboot源码之前,需要先查看一下uboot根目录下的Makefile文件,即顶层Makefile文件,以下按Makefile文件内容顺序分析。(以三星x210开发板官方uboot为例)。

2.1版本号

    顶层Makefile一开始是版本号。

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

(1)uboot的版本号分3个级别:

  • VERSION:主板本号
  • PATCHLEVEL:次版本号
  • SUBLEVEL:再次版本号
  • EXTRAVERSION:另外附加的版本信息
    这4个用.分隔开共同构成了最终的版本号。

(2)Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号。
(3)include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编译过后的uboot中就有了。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。
(4)验证方法:自己修改主Makefile中几个Version有关的变量,然后重新编译uboot,然后烧录到SD卡中,从SD卡启动,然后去看启动时uboot打印出来的版本信息,看看变化是不是和自己的分析一致。

2.2HOSTARCH和HOSTOS

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中执行uname -m得到i686,得到的值其实你当前执行这个命令的电脑的CPU的版本号。
(2)shell中的|叫做管道,管道的作用就是把管道前面一个运算式的输出作为后面一个的输入再去做处理,最终的输出才是我们整个式子的输出。
(3)HOSTARCH这个名字:HOST是主机,就是当前在做开发用的这台电脑就叫主机;ARCH是architecture(架构)的缩写,表示CPU的架构。所以HOSTARCH就表示主机的CPU的架构。
(4)这两个环境变量是主机的操作系统和主机的CPU架构,得出后保存备用,后面自然会用到。

2.3静默输出

ifeq (,$(findstring s,$(MAKEFLAGS))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值