linux系列目录:
linux基础篇(一)——GCC和Makefile编译过程
linux基础篇(二)——静态和动态链接
ARM裸机篇(一)——i.MX6ULL介绍
ARM裸机篇(二)——i.MX6ULL启动过程
ARM裸机篇(三)——i.MX6ULL第一个裸机程序
ARM裸机篇(四)——重定位和地址无关码
ARM裸机篇(五)——异常和中断
linux系统移植篇(一)—— linux系统组成
linux系统移植篇(二)—— Uboot使用介绍
- 一、Uboot介绍
- 二、uboot烧录与启动
- 1. 获取uboot
- 2. uboot目录结构
- 3. 编译uboot
- 4. 烧写uboot到 SD 卡
- 三、uboot常用命令使用
- 1. 帮助命令
- 2. 信息查询命令
- 3. 内存操作命令
- 4. 网络操作命令
- 5. EMMC 和 SD 卡操作命令
- 6. 文件系统操作命令
- 7. BOOT 操作命令
- 8. 其他常用命令
一、Uboot介绍
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 使用最为广泛。
uboot 的全称是 Universal Boot Loader, uboot 是一个遵循 GPL 协议的开源软件, uboot 是一个裸机代码,可以看作是一个裸机综合例程。现在的 uboot 已经支持液晶屏、网络、 USB 等高级功能。 uboot 官网为 http://www.denx.de/wiki/U-Boot/
我们一般不会直接用 uboot 官方的 U-Boot 源码的。 uboot 官方的 uboot 源码是给半导体厂商准备的,半导体厂商会下载 uboot 官方的 uboot 源码,然后将自家相应的芯片移植进去。也就是说半导体厂商会自己维护一个版本的 uboot,这个版本的 uboot 相当于是他们定制的。
NXP 就 维 护 的 2016.03 这 个 版 本 的 uboot , 下 载 地 址 为 :
https://source.codeaurora.org/external/imx/uboot-imx/
如果是我们自己做的板子就需要修改 NXP 官方的 uboot,使其支持我们自己做的板子,这三种 uboot的区别如表所示:
野火提供的 uboot 下载链接:
https://gitee.com/Embedfire/ebf_linux_uboot
git clone https://gitee.com/Embedfire/ebf_linux_uboot.git //切换 ebf_v2020_10_imx 分支 git checkout ebf_v2020_10_imx2. uboot目录结构
其中与移植官方uboot需要修改的文件夹有以下几个:
- board
不同开发板的代码,移植uboot的时候新建开发板bsp也是在这里对应的芯片厂商下面新建。其中的mx6ullfire就是野火开发板的文件
2.configs
存放不同开发板的uboot配置文件,命名规则统一为xxx_defconfig,xxx表示为开发板名称。其中mx6ull_fire_mmc_defconfig就是野火开发板的配置文件。
- 安装编译工具和依赖:
sudo apt install make git gcc-arm-none-eabi gcc bison flex libssl-dev dpkg-dev lzop libncurses5-dev
- 编译
//清除上次生成的编译环境,避免之前的环境干扰影响编译结果 sudo make distclean //加载板级配置文件,具体的板级配置文件在 uboot 根目录下的 configs 目录下 sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi- mx6ull_fire_mmc_defconfig //设置编译架构为 arm 编译工具链为arm-none-eabi- 然后开始编译 sudo make ARCH=arm CROSS_COMPILE=arm-none-eabi-
编译出的文件:
- u-boot:编译出的ELF格式的uboot镜像文件
- u-boot.bin:编译出来的二进制格式的uboot可执行镜像文件
- u-boot.cfg:uboot的另一种配置文件
- u-boot.imx:u-boot.bin添加头部信息以后的文件,NXP的CPU专用文件
- u-boot.lds:链接脚本
- u-boot.map:uboot映射文件
- u-boot.srec:S-Record格式的镜像文件
- u-boot.sym:uboot符号文件
- u-boot-nodtb.bin:和u-boot.bin一样,u-boot-nodtb.bin的复制文件
插上读卡器,使用 lsblk 命令查看磁盘设备,如下所示
执行以下烧录命令,将 u-boot-dtb.imx 烧写到/dev/sdb 中
sudo dd iflag=dsync oflag=dsync if=u-boot-dtb.imx of=/dev/sdb seek=2
烧录成功提示:
将SD卡插入板子,选择从SD卡启动,查看串口日志:
可以看出 uboot 打印出了板子的一些基本信息,包括 CPU、内存等信息。
uboot 支持很多的命令,功能十分强大,与 linux 类似,在执行某条 uboot 命令时,可使用tab 自动补全命令,在没有命令名冲突的情况下可以使用命令的前几个字母作为命令的输入,例如想要执行 reset 命令,输入 res 或 re 即可。
当不清楚 uboot 支持什么命令时,可输入 help 或 ? 可查看 uboot 支持的命令列表,如下所示:
当需要具体使用哪个命令时,可使用 “help 命令” 或 “? 命令” 的方式查看具体命令的使用说明。
mmc 命令能够对如 sd 卡以及 emmc 类的存储介质进行操作,以下进行简单说明,对于 mmc 命令不熟悉可使用 help mmc 查看相关命令的帮助,常用功能如下所示:



