介绍
由于 i.MX8M/Mini 的引导有几部分组成,所以需要编译这几个部分生成最终的目标镜像。有以下几个文件组成:
- imx-atf:ATF 主要负责 Non-secure 环境和 secure 环境的切换。
- myir-imx-uboot: i.MX8M/Mini 平台使用系列使用 SPL 启动 ,不同的 boot chains 模式 会对应不同启动阶段。spl 的编译是编译 uboot 的一部分,和 uboot.bin 走的是两条编 译流程,这个要重点注意。正常来说,会先编译主体 uboot,也就是 uboot.bin.再编译 uboot-spl,也就是 uboot-spl.bin,虽然编译命令是一起的,但是编译流程是分开的。下 面就介绍整个 u-boot 的编译。
- firmware-8.7:初始化的 bin 格式文件,由 spl 或者 uboot 调用,用以初始化 ddr。
- imx-mkimage:生成目标镜像的工具
开发环境搭建
初始化SDK
准备源码
- 源码位置:04-sources/目录中找到 bootloader
- 源码结构
bootloader/
├── firmware-imx-8.7
├── firmware-imx-8.7.bin //初始化的 bin 格式文件,由 spl 或者 uboot 调用,用以初始化 ddr。
├── imx-atf //主要负责 Non-secure 环境和 secure 环境的切换。
├── imx-mkimage //生成目标镜像的工具
├── myir-imx-uboot //Uboot 源码
├── make-uboot-emmc.sh //制作 eMMC 和 SD 卡启动的脚本文件
└── make-uboot-qspi.sh //是制作 QSPI 启动的脚本文件。
U-Boot编译
编译 myir-imx-uboot
- eMMC 或 SD 卡启动
$: cd bootloader/myir-imx-uboot/
/bootloader/myir-imx-uboot$: make distclean
~/bootloader/myir-imx-uboot$: make myd_imx8mm_defconfig
~/bootloader/myir-imx-uboot$: make -j16
- 编译后生成镜像如下
u-boot-nodtb.bin
spl/u-boot-spl.bin
arch/arm/dts/myb-imx8mm-base.dtb
编译 imx-atf
myir@myir-server1:~$ cd bootloader/
wujl@myir-server1:~/bootloader/imx-atf$ tar xvf imx-atf.tar.gz
wujl@myir-server1:~/bootloader/imx-atf$ cd imx-atf
wujl@myir-server1:~/bootloader/imx-atf$ make clean PLAT=imx8mm
wujl@myir-server1:~/bootloader/imx-atf$ LDFLAGS="" make PLAT=imx8mm
- 编译后生成文件如下
build/imx8mm/release/bl31.bin
生成引导目标镜像
- eMMC 或 SD 卡启动
进入 bootloader 目录,执行以下命令制作 uboot 目标镜像:
myir@myir-server1:~$ cd bootloader/
wujl@myir-server1:~/bootloader$ ./make-uboot-emmc.sh
- 编译完成后,生成引导镜像
imx-mkimage/iMX8M/flash.bin
U-Boot单独烧录
烧录镜像到 sdcard
烧录镜像到 eMMC
使用uuu下载uboot
- 将生成的 flash.bin 拷贝到uuu下载文件夹
- 添加修改uuu下载脚本flash_uboot.uuu
uuu_version 1.0.1
SDP: boot -f flash.bin
# This command will be run when use SPL
SDPU: delay 1000
SDPU: write -f imx-boot-myd-imx8mm-sd.bin-flash_ddr4_evk -offset 0x57c00
SDPU: jump
# This command will be run when ROM support stream mode
SDPS: boot -f imx-boot-myd-imx8mm-sd.bin-flash_ddr4_evk
FB: ucmd setenv fastboot_dev mmc
FB: ucmd setenv mmcdev ${emmc_dev}
FB: ucmd mmc dev ${emmc_dev}
#FB: flash -raw2sparse all myir-image-full-myd-imx8mm.sdcard
FB: flash bootloader flash.bin
FB: ucmd mmc partconf ${emmc_dev} 0 1 0
FB: done
-
开发板切换到下载模式下,执行 uuu.exe flash_uboot.uuu
-
烧录完成后切换到 emmc 运行模式重启
可以看到uboot已经更新到2023新编译的uboot。