参考:什么是U-Boot以及如何下载U-Boot源码?
作者:一只青木呀
发布时间: 2020-10-20 11:05:59
网址:https://blog.csdn.net/weixin_45309916/article/details/109176510
目录
- 前言
- 系统的启动过程
- uboot简介
- uboot源码下载
- 选择下载方式(我这里以FTP为例)
- 选择下载版本
- SecureCRT启动显示log
前言
在上一篇中我们学习了如何进行I.MX6U 的裸机开发,通过21 个裸机例程我们掌握了I.MX6U 的常用外设。通过裸机的学习我们掌握了外设的底层原理,这样在以后进行Linux 驱动开发的时候就只需要将精力放到Linux 驱动框架上,在进行Linux 驱动开发之前肯定需要先将Linux 系统移植到开发板上去。如果学习过UCOS/FreeRTOS 应该知道,UCOS/FreeRTOS 移植就是在官方的SDK 包里面找一个和自己所使用的芯片一样的工程编译一下,然后下载到开发板就可以了。那么Linux 的移植是不是也是这样的,下载Linux 源码,然后找个和我们所使用的芯片一样的工程编译一下就可以了?很明显不是的!Linux 的移植要复杂的多,在移植Linux之前我们需要先移植一个bootloader 代码,这个bootloader 代码用于启动Linux 内核,bootloader有很多,常用的就是U-Boot。
移植好U-Boot 以后再移植Linux 内核,移植完Linux 内核以后Linux 还不能正常启动,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。所以U-Boot、Linux kernel 和rootfs 这三者一起构成了一个完整的Linux 系统,一个可以正常使用、功能完善的Linux 系统。在本篇我们就来讲解 U-Boot、Linux Kernel 和rootfs 的移植,与其说是“移植”,倒不如说是“适配”,因为大部分的移植工作都由NXP 完成了,我们这里所谓的“移植”主要是使其能够在I.MX6U-ALPHA 开发板上跑起来。
在移植U-Boot 之前,我们肯定要先使用一下U-Boot,得先体验一下U-Boot 是个什么东西。I.MX6U-ALPHA 开发板光盘资料里面已经提供了一个正点原子团队已经移植好的U-Boot,本章我们就直接编译这个移植好的U-Boot,然后烧写到SD 卡里面启动,启动U-Boot 以后就可以学习使用U-Boot 的命令。
系统的启动过程
Linux 系统要启动就必须需要一个 bootloader (裸机程序)程序,也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设(前面学习了I.MX6ULL是内部BOOT ROM初始化DDR的,但是其他大部分ARM架构都是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简介
对比一下之前学习的BOOT ROM做的事情:ARM(IMX6U)裸机之I.MX6ULL启动头文件(bin里面)的详解
类似于我们电脑X86的BIOS。
SOC厂商,半导体厂商,比如NXP
开发板的厂商,比如正点原子
关于SOC:
这个词是System on Chip的缩写,意为片上系统,是将CPU、GPU、内存、基带和GPS模块整合在一起的解决方案,是将系统运行所需的芯片整合在一块芯片上。
我们熟知的骁龙855、苹果的A12、华为的麒麟980和三星的猎户座都是这个片上系统的代号,并非单指某个CPU或是GPU,相反,这些片上系统内其实有自己的CPU和GPU编号。比如A12的GPU是自研的G11P,骁龙855的GPU是Adreno 640。
uboot 的全称是 Universal Boot Loader, uboot 是一个遵循 GPL 协议的开源软件, uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、 USB 等高级功能。 uboot 官网为 http://www.denx.de/wiki/U-Boot/, 如图所示:
uboot源码下载
我们可以在 uboot 官网下载 uboot 源码,点击上图中的“Source Code”,打开如下图所示界面:
选择下载方式(我这里以FTP为例)
选择下载版本
上图就是 uboot 原汁原味的源码文件,目前最新的版本是 2020.10。但是我们一般不会直接用 uboot 官方的 U-Boot 源码的。 uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的(比如恩智浦)。既然是定制的,那么肯定对自家的芯片支持会很全,虽然 uboot 官网的源码中一般也会支持他们的芯片,但是绝对是没有半导体厂商自己维护的 uboot 全面。
SecureCRT启动显示log
拨码开关拨到从EMMC启动,因为前面将系统烧写进了EMMC里面,板子上电启动,SecureCRT显示启动log信息。