EmbedFire i.MX 6ull开发板学习笔记(八)---使用mfgtools烧录固件
之前为了调试方便,一直是将uboot烧录进SD卡,从SD卡启动,然后通过局域网下载内核的方式进行的。近期刚好做有关imx6ull的项目,要在上面实现5G上网功能,自己做的板子没有本地网卡,也不支持SD卡,只能将固件烧录进eMMC。NXP提供了烧录固件的工具mfgtools和uuu.exe,可烧录进eMMC。mfgtools是老板工具,现在官网文档里介绍的uuu.exe,uuu.exe是命令行的,不方面客户使用,我还是采用mfgtools。
一、mfgtools使用介绍
到官网下载mfgtools,目前的版本是IMX6_L4.1.15_2.0.0_MFG_TOOL,解压后,分为两个版本:with rootfs和without rootfs,顾名思义:就是要不要烧录rootfs。我们得选择with rootfs,继续解压,会看见很多vbs文件,其中mfgtool2-yocto-mx-evk-emmc.vbs便是我们要使用的。
mfgtools烧录固件的原理:读取Profiles\Linux\OS Firmware\ucl2.xml文件,根据当前硬件存储方式是eMMC,SD,NAND还是nor flash,自动烧录对应的uboot和设备树。
烧录过程:
- 第一步:先将Profiles\Linux\OS Firmware\firmware目录下的uboot,设备和内核下载进内存,并以此启动内核。该目录下的文件请保持官方原版,千万不要替换为自己的版本。我们用到的是这三个文件。
u-boot-imx6ull14x14evk_emmc.imx
zImage
zImage-imx6ull-14x14-evk-emmc.dtb
- 第二步:对存储器eMMC进行分区并格式化。
- 第三步:下载Profiles\Linux\OS Firmware\files目录下的uboot,设备树、内核和rootfs,将其写入eMMC指定的分区。该目录下的文件才是我们真实需要烧录进eMMC的。烧录进入的几个文件是:
zImage
u-boot-imx6ull14x14evk_emmc.imx
zImage-imx6ull-14x14-evk-emmc.dtb
rootfs_nogpu.tar.bz2
待升级成功可看见如下界面。
二、改造mfgtools
了解了上面的烧录原理,我们便可以去mfgtools进行改造了,去掉其冗余臃肿的部分。
- 删掉mfgtools根目录下多余的vbs文件,仅保留mfgtool2-yocto-mx-evk-emmc.vbs即可。
- 删掉Profiles\Linux\OS Firmware\firmware目录下多余的uboot和设备树文件,仅保留上面三个文件即可。
- 删掉Profiles\Linux\OS Firmware\files目录下多余uboot,设备树、内核和rootfs文件,仅保留上面的四个文件即可。
- 修改ucl2.xml文件,仅保留与imx6ull,eMCC有关的部分。我修改后的如下。注意:firmware和file目录下文件名一定要和ucl2.xml中指定的一致。
<UCL>
<CFG>
<STATE name="BootStrap" dev="MX6ULL" vid="15A2" pid="0080"/>
<STATE name="Updater" dev="MSC" vid="066F" pid="37FF"/>
</CFG>
<LIST name="eMMC" desc="Choose eMMC as media">
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6ull14x14evk_emmc.imx" ifdev="MX6ULL">Loading U-boot</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x80800000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6SL MX6SX MX7D MX6UL MX6ULL">Loading Kernel.</CMD>
<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address