系统移植篇01:U-boot使用实验的准备
在移植U-Boot之前,我们肯定要先使用一下U-Boot,得先体验一下U-Boot是个什么东西。
I.MX6U-ALPHA 开发板资料里面已经提供了一个已经移植好的 U-Boot,
本章我们就直接编译这个移植好的 U-Boot,然后烧写到 SD 卡里面启动,启动 U-Boot 以后就可
以学习使用 U-Boot 的命令。
1.U-boot简介:
Linux 系统要启动就必须需要一个 bootloader 程序,也就说芯片上电以后先运行一段bootloader程序。
这段bootloader程序会先初始化DDR等外设,然后将Linux内核从flash(NAND,NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核。
当然了,bootloader 的实际工作要复杂的多,但是它最主要的工作就是启动 Linux 内核,bootloader 和 Linux 内核的关系就跟 PC 上的 BIOS 和 Windows 的关系一样,bootloader 就相当于 BIOS。所以我们要先搞定bootloader,很庆幸,有很多现成的 bootloader 软件可以使用,比如 U-Boot、vivi、RedBoot 等等,其中以 U-Boot 使用最为广泛,为了方便书写,本书会将 U-Boot 写为 uboot。
uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot 是一
个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、USB 等高
级功能。uboot 官网为 http://www.denx.de/wiki/U-Boot/,如图所示:
我们可以在 uboot 官网下载 uboot 源码,点击图 30.1.1 中左侧 Topics 中的“Source Code”,
打开如图 所示界面:
点击图 30.1.2 中的“FTP Server”,进入其 FTP 服务器即可看到 uboot 源码,如图 所
示:
图 中就是 uboot 原汁原味的源码文件,目前最新的版本是 2019.04。但是我们一般不会直接用 uboot 官方的 U-Boot 源码的。
uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的。既然是定制的,那么肯定对自家的芯片支持会很全,虽然 uboot 官网的源码中一般也会支持他们的芯片,但是绝对是没有半导体厂商自己维护的 uboot 全面。
NXP 就 维 护 的 2016.03 这 个 版 本 的 uboot , 下 载 地 址 为 :
http://git.freescale.com/git/cgit.cgi/imx/uboot-imx.git/tag/?h=imx_v2016.03_4.1.15_2.0.0_ga&id=
rel_imx_4.1.15_2.1.0_ga,下载界面如图 所示:
图 30.1.4 中的 uboot-imx_rel_imx4.1.15_2.1.0_ga.xx(xx 为 zip、tar.gz 或 tar.bz2)就是 NXP 官
方维护的 uboot,后面我们学习 uboot 移植的时候就是使用的图 30.1.4 中的 uboot,下载 uboot-
imx-rel_imx_4.1.15_2.1.0_ga.tar.bz2。
图中的uboot基本支持了NXP当前所有可以跑Linux的芯片,而且支持各种启动方式,比如EMMC、
NAND、NOR FLASH 等等,这些都是 uboot 官方所不支持的。但是图 30.1.4 中的 uboot 是针对
NXP 自家评估板的,如果是我们自己做的板子就需要修改 NXP 官方的 uboot,使其支持我们自
己做的板子,I.MX6U 开发板就是自己做的板子,虽然大部分都参考了 NXP 官方的I.MX6ULL EVK 开发板,但是还是有很多不同的地方,所以需要修改 NXP 官方的 uboot,使其适配我们的 I.MX6U 开发板。所以当我们拿到开发板以后,是有三种 uboot 的,这三种 uboot的区别如表所示: