Linux系统移植:正点原子 U-Boot 移植

文章目录

  • Linux系统移植:正点原子 U-Boot 移植
    • 一、What‘s U-Boot ?
      • 1.1 U-Boot 简介
      • 1.2 U-Boot 选择
    • 二、正点原子 U-Boot 编译
      • 2.1 编译环境
      • 2.2 编译脚本
    • 三、U-Boot 烧写与启动

Linux系统移植:正点原子 U-Boot 移植

一、What‘s U-Boot ?

1.1 U-Boot 简介

Linux 系统启动需要一个 bootloader 程序,芯片上电以后先运行一段 bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将 Linux 内核从 flash (NAND, NOR FLASH,SD,MMC 等)拷贝到 DDR 中,最后启动 Linux 内核;这段 bootloader 程序有很多种,比如 U-Boot、vivi、RedBoot 等,U-Boot 就是其中一种。

uboot 的全称是 Universal Boot Loader,uboot 是一个遵循 GPL 协议的开源软件,uboot 是一 个裸机代码,可以看作是一个裸机综合例程,uboot 官网为 U-Boot 官网,我们可以在官网下载到其源码!
Linux系统移植:正点原子 U-Boot 移植_第1张图片

一般来说,uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去;同时半导体厂商也会针对自己的芯片选择一个版本的 uboot 自己去维护,该 uboot 的适配程度要高于 uboot 官方的代码,比如 NXP 的 uboot 维护地址如下:NXP Uboot Git Src

这个厂商的 Uboot 一般是支持其对应芯片的评估板的,但如果我用的是正点原子的板子,其 uboot 和正点原子的开发板有一定的冲突,所以正点原子也有一套修改后的 uboot!综上,我们有三套 uboot 可以使用:

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

1.2 U-Boot 选择

官方的 uboot 我们一般不使用,支持太少,让他们厂商去折腾就行,我们如果要使用正点原子的开发板,那么就使用正点原子的 uboot (本质就是在半导体厂商的 uboot 上修改的),如果要使用 NXP 的芯片做自己的开发,那么一般使用 NXP 的 uboot 来进行修改移植,就是常说的 uboot 移植!

正点原子的 uboot 我已经放到 CSDN 上 U-Boot下载链接

二、正点原子 U-Boot 编译

2.1 编译环境

在 Ubuntu 环境中使用如下命令安装 ncurses 库

sudo apt-get install libncurses5-dev

安装完成如下:

Linux系统移植:正点原子 U-Boot 移植_第2张图片

自己选择一个位置创建一个文件夹,然后将正点原子的 uboot 源码上传到系统中

Linux系统移植:正点原子 U-Boot 移植_第3张图片

然后我们对其进行解压

tar -vxjf uboot-imx-2016.03-2.1.0-g8b546e4.tar.bz2

解压完成后,可以看到当前目录下的 uboot 源码:

Linux系统移植:正点原子 U-Boot 移植_第4张图片

2.2 编译脚本

源码和编译环境准备完成之后,我么编写一个 shell 脚本用于编译

对于开发板是 512MB(DDR3) + 8GB(EMMC) 的核心板,编译脚本如下

1 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
2 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
3 make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12

编译脚本关键字含义如下:

ARCH:指定编译目标架构为 arm 架构

CROSS_COMPILE:指定使用的交叉编译器

后面的则是编译指令,distclean 为清除工程,mx6ull_14x14_ddr512_emmc_defconfig 是配置 uboot,-j12是使用 12 个核心来多进程编译,加快编译速度(核心根据自己虚拟机分配的核心数目来自己设置)

以在编译 uboot 之前,要根据自己的需求配置 uboot,mx6ull_14x14_ddr512_emmc_defconfig 就是正点原子针对 I.MX6U-ALPHA 的 EMMC 核心板编写的配置文件

脚本编写完成,我们设置脚本为可执行文件:

Linux系统移植:正点原子 U-Boot 移植_第5张图片

执行脚本文件,完成编译:

Linux系统移植:正点原子 U-Boot 移植_第6张图片

可以看到,多了许多 uboot 文件,其中 uboot.bin 为编译后文件,而 u-boot.bin 文件编译后,会在 u-boot.bin 的开头添加一个大小为 1K 的 IVT 头,用于告诉 BOOT ROM 找到 uboot 的位置和函数,要运行在什么模式,DRAM的配置数据等,这个新生成的文件就是 u-boot.imx 文件,两个文件都可以用于烧写启动

三、U-Boot 烧写与启动

上节提到 uboot 最终编译的文件就是 uboot.bin 文件,他本质上就和裸机程序没什么区别,我们为了方便观察现象,直接使用 imxdownload 工具将 uboot.bin 文件下载到 SD 卡上,然后从 SD 卡启动,通过串口直接观察 uboot 的运行结果

下载到SD卡指令:

./imxdownload uboot.bin /dev/sdb

串口查看 uboot 启动信息

图片暂未插入

你可能感兴趣的:(#,Linux驱动开发,stm32,arm,嵌入式硬件,uboot,kernel)