系统烧写工具--MfgTool
- 1 介绍
- 1.1 概述
- 1.2 UUU 特性
- 1.3 UUU 功能
- 1.4 UUU 命令
- 1.5 MFGTools 功能
- 2 MFGTools 目录结构及说明
- 2.1 MFGTools 目录结构
- 重要文件
- 烧写自己系统
- 2.2 说明
- 2.3 分析配置文件
- 2.3.1 UiCfg.ini
- 2.3.2 cfg.ini
- 2.3.3 ucl2.xml
- 3 MfgTool 工作流程
- 4 烧录流程
- 4.1 烧录流程图
- 4.2 使用 MfgTool 更新系统的流程
- 1 设置拨码开关
- 2 使用 USB 线连接PC机与板子
- 3 启动 MfgTool
- 4 识别板子
- 5 烧录【先烧媒介镜像,再烧目标镜像】
- 6 烧录完成
- 补充
- HID设备
- USB OTG
- mksdcard
- 参考
1 介绍
1.1 概述
uuu(Universal Update Utility,通用更新实用程序)是 Freescale/NXP I.MX 芯片系统部署工具,这是 MFGTools(又名 MFGTools v3)的演变。
uuu 由原来的Linux版本和Windows版本发展而来。该项目不仅支持Linux、Windows操作系统,还尝试兼容MacOS,旨在提供一个真正的跨平台解决方案。
1.2 UUU 特性
- 真正的跨平台。Linux、Windows、MacOS(尚未测试)
- 多设备程序支持
- 守护进程模式支持
- 依赖性很少(仅 libusb、zlibc、libbz2)
- 固件(uboot/kernel)使用 WCID 在 Windows 端自动加载 winusb 驱动程序。Windows7 用户需要从https://zadig.akeo.ie/安装 winusb 驱动程序 ,Windows10 将自动安装该驱动程序。
1.3 UUU 功能
- 固件升级:对NXP I.MX系列芯片进行固件(如u-boot、内核)的在线更新。
- 设备调试:实时监测设备状态,方便进行设备初始化和故障恢复。
- 批量部署:在生产环境中,uuu可作为批量生产设备固件的工具,提升效率。
1.4 UUU 命令
命令 | 描述 |
---|---|
uuu u-boot.imx | Download u-boot.imx via HID device 通过 HID 设备下载 u-boot.imx |
uuu list.uu | Run all the commands in list.uu 运行 list.uu 中的所有命令 |
uuu -s | Enter shell mode. Input command. 进入 shell 模式。输入命令。 |
uuu -v u-boot.imx | verbose mode 详细模式 |
uuu -d u-boot.imx | Once it detects the attachment of a known device, download boot.imx. u-boot.imx can be replaced, new file will be download once board reset. Do not unplug the SD card, write to the SD card, nor plug in a SD card when debugging uboot. 一旦检测到已知设备的连接,下载 boot.imx。 u-boot.imx 可以替换,板子重置后将下载新文件。 调试 uboot 时,不要拔出 SD 卡,写入 SD 卡,或插入 SD 卡。 |
uuu -b emmc u-boot.imx | write u-boot.imx to emmc boot partition. u-boot.imx need enable fastboot 将 u-boot.imx 写入 emmc 启动分区。u-boot.imx 需要启用 fastboot。 |
uuu -b emmc_all wic.zst | decompress wic.zst file and download the whole image into emmc 解压 wic.zst 文件,并将整个镜像下载到 emmc。 |
安装: ubuntu 22.04,‘apt-get install uuu’
1.5 MFGTools 功能
- 可以用来升级 Linux,也可以升级 Android;
- 允许单独刷写某一系统分区,如 Android 的 boot.img;
- 支持独立刷写 SPINOR、Nand、eMMC 等:
- 支持多通道刷写,可作为量产工具;
2 MFGTools 目录结构及说明
2.1 MFGTools 目录结构
.
+--- cfg.ini
+--- cfg.ini.bak
+--- Document
| +--- Eclipse Plugin and mfgtoolcli
| | +--- mfgtoolcli-readme
| | +--- User_Guide.docx
| +--- V2
| | +--- Manufacturing Tool V2 Factory Operation manual.docx
| | +--- Manufacturing Tool V2 Linux or Android Firmware Development Guide V2.docx
| | +--- Manufacturing Tool V2 Quick Start Guide.docx
| | +--- Manufacturing Tool V2 Release Notes.docx
| | +--- Manufacturing Tool V2 UCL User Guide.docx
| | +--- Manufacturing Tool V2 UTP Introduction.docx
| | +--- Manufacturing Tool V2 Work Flow.docx
+--- Drivers
| +--- iMX_BulkIO_Driver
| | +--- amd64
| | | +--- imxusb.sys
| | | +--- WdfCoInstaller01009.dll
| | +--- i386
| | | +--- imxusb.sys
| | | +--- WdfCoInstaller01009.dll
| | +--- imxusb.cat
| | +--- imxusb.inf
| | +--- imxusb.x64.cat
+--- libMfgToolLib.so
+--- linux-cvbs.sh
+--- linux-runvbs.sh
+--- linux-ver-usage
+--- MfgTool.log
+--- mfgtool2-mx6qdl-advantech.vbs
+--- mfgtool2-mx6qdl-c-sabresd-emmc.vbs
+--- MfgTool2.exe
+--- mfgtoolcli
+--- MfgToolLib.dll
+--- MfgToolLibLog.txt
+--- Profiles
| +--- Linux
| | +--- OS Firmware
| | | +--- advantech_backups
| | | | +--- imx6q-c-sabresd.dtb
| | | | +--- imx6q-rom3420-a1.dtb
| | | | +--- initramfs.cpio.gz.uboot
| | | | +--- u-boot-0x26800000.bin
| | | | +--- u-boot-0x26800000.bin.crc
| | | | +--- u-boot.bin
| | | | +--- u-boot.imx
| | | | +--- uImage-imx6q-rom3420.dtb
| | | | +--- zImage
| | | | +--- zImage_utp
| | | +--- files
| | | | +--- .gitignore
| | | | +--- okmx6-c
| | | | | +--- imx6dl-c-sabresd.dtb
| | | | | +--- imx6q-c-sabresd.dtb
| | | | | +--- logo.bmp
| | | | | +--- rootfs.tar.bz2
| | | | | +--- u-boot-6dl-2g.imx
| | | | | +--- u-boot-6dl.imx
| | | | | +--- u-boot-6q-2g.imx
| | | | | +--- u-boot-6q.imx
| | | | | +--- zImage
| | | +--- firmware
| | | | +--- fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot
| | | | +--- u-boot-imx6dlcsabresd_sd.imx
| | | | +--- u-boot-imx6dls2sabresd_sd.imx
| | | | +--- u-boot-imx6dls3sabresd_sd.imx
| | | | +--- u-boot-imx6qcsabresd_sd.imx
| | | | +--- u-boot-imx6qs2sabresd_sd.imx
| | | | +--- u-boot-imx6qs3sabresd_sd.imx
| | | | +--- zImage
| | | | +--- zImage-imx6dl-c-sabresd.dtb
| | | | +--- zImage-imx6dl-s2-sabresd.dtb
| | | | +--- zImage-imx6dl-s3-sabresd.dtb
| | | | +--- zImage-imx6q-c-sabresd.dtb
| | | | +--- zImage-imx6q-s2-sabresd.dtb
| | | | +--- zImage-imx6q-s3-sabresd.dtb
| | | +--- mksdcard-android-f2fs.sh.tar
| | | +--- mksdcard-android.sh.tar
| | | +--- mksdcard-brillo.sh.tar
| | | +--- mksdcard.sh
| | | +--- mksdcard.sh.tar
| | | +--- mksdcard.shok
| | | +--- mksdcard.sh_forlinx
| | | +--- mksdcard.sh_gai
| | | +--- mksdcard_xinsong.sh.tar
| | | +--- qspi-header.sh.tar
| | | +--- ucl2.xml
| | +--- player.ini
+--- UICfg.ini
+--- Utils
| +--- cfimager
| | +--- cfimager.exe
| | +--- Readme.txt
| +--- sb_loader
| | +--- sb_loader.exe
| | +--- UserGuide.txt
重要文件
files、firmware、ucl2.xml
文件 | 描述 |
---|---|
zImage | NXP官方I.MX6ULLEVK开发板的Linux镜像文件 |
u-boot-imx6ull14x14evk emmc.imx | NXP官方I.MX6ULLEVK开发板的uboot文件 |
zlmage-imx6ul1-14x14-evk-emmc.dtb | NXP官方I.MX6ULLEVK开发板的设备树 |
rootfs_nogpu.tar.bz2 | NXP官方I.MX6ULLEVK开发板的根文件系统,no gpu |
脚本文件 | 功能 |
---|---|
mfgtool2-yocto-mx-evk-emmc.vbs | NXP官方evk评估板的eMMC烧写脚本 |
mfgtool2-yocto-mx-evk-nand.vbs | NXP官方evk评估板的Nand Flash烧写脚本 |
烧写自己系统
如果要烧写自己的系统,就需要用自己编译出来的 zImage、u-boot.imx、*.dtb 和 rootfs 这4个文件,同时文件名字改为表中的名字。
2.2 说明
- MfgTool2.exe 是一个可执行文件,用于打开烧写工具。
- 通常不直接运行 MfgTool2.exe,而是通过运行 VBS 脚本文件来启动。
- cfg.ini、UiCfg.ini 和 ucl2.xml 是配置文件。
- Profile 文件夹内定义了存放镜像文件和配置文件的不同目录层级。
- 镜像文件 分为两种:
(1)第一种作为媒介用途,在 Yocto 下包括 “uboot”、“dtb” 和 “zimage”。
(2)第二种是实际烧录到 eMMC、Nand Flash 或 sdCard 的镜像文件。 - 对于该项目:
(1)媒介镜像存放于 “firmware” 目录。
(2)实际烧写的镜像存放于 “files” 目录。 - 需要两种镜像的原因是 MfgTool 的烧写原理是先烧录媒介镜像到 DDR,然后启动媒介系统,通过该系统把目标镜像固化到存储设备中。
- 烧录过程分为两个部分:
(1)第一部分:烧录前的准备工作。
(2)第二部分:MfgTool 开始烧录到结束烧录的过程,严格根据 ucl2.xml 文件进行。
2.3 分析配置文件
2.3.1 UiCfg.ini
[UICfg]
PortMgrDlg=1
2.3.2 cfg.ini
[profiles]
chip = Linux // 目标平台,对应 Profile/Linux 目录,可根据自己的需求定义 profile
[platform]
board = SabreSD // 板子型号为“SabreSD”。
[LIST]
name = eMMC // 存储设备为“eMMC”。
[variable]
board = sabresd // 引用模式是 %board%,要和平台的名字一样,否则可能会出错
mmc = 0 // 引用模式是 %mmc%
sxuboot=sabresd
sxdtb=sdb
7duboot=sabresd
7ddtb=sdb
6uluboot=14x14ddr3arm2
6uldtb=14x14-ddr3-arm2
6ulldtb=14x14-ddr3-arm2
ldo=
plus=
lite=l
initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot
seek = 1
sxnor=qspi2
7dnor=qspi1
6ulnor=qspi1
nor_part=0
2.3.3 ucl2.xml
<!--
* Copyright (C) 2012, Freescale Semiconductor, Inc. All Rights Reserved.
* The CFG element contains a list of recognized usb devices.
* DEV elements provide a name, class, vid and pid for each device.
*
* Each LIST element contains a list of update instructions.
* "Install" - Erase media and install firmware.
* "Update" - Update firmware only.
*
* Each CMD element contains one update instruction of attribute type.
* "pull" - Does UtpRead(body, file) transaction.
* "push" - Does UtpWrite(body, file) transaction.
* "drop" - Does UtpCommand(body) then waits for device to disconnect.
* "boot" - Finds configured device, forces it to "body" device and downloads "file".
* "find" - Waits for "timeout" seconds for the "body" device to connect.
* "show" - Parse and show device info in "file".
-->
<UCL>
<CFG>
<STATE name="BootStrap" dev="MX6SL" vid="15A2" pid="0063"/>
<STATE name="BootStrap" dev="MX6D" vid="15A2" pid="0061"/>
<STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
<STATE name="BootStrap" dev="MX6SX" vid="15A2" pid="0071"/>
<STATE name="BootStrap" dev="MX6UL" vid="15A2" pid="007D"/>
<STATE name="BootStrap" dev="MX7D" vid="15A2" pid="0076"/>
<STATE name="Updater" dev="MSC" vid="066F" pid="37FF"/>
</CFG>
<LIST name="eMMC_c" desc="Choose eMMC as media">
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6q%plus%%board%_sd.imx" ifdev="MX6Q">Loading U-boot</CMD>
<CMD state="BootStrap" type="boot" body="BootStrap" file ="firmware/u-boot-imx6dl%plus%%board%_sd.imx" ifdev="MX6D">Loading U-boot</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage" address="0x12000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">Loading Kernel.</CMD>
<CMD state="BootStrap" type="load" file="firmware/%initramfs%" address="0x12C00000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q MX6D">Loading Initramfs.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6q-%plus%-%board%.dtb" address="0x18000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6Q">Loading device tree.</CMD>
<CMD state="BootStrap" type="load" file="firmware/zImage-imx6dl-%plus%-%board%.dtb" address="0x18000000"
loadSection="OTH" setSection="OTH" HasFlashHeader="FALSE" ifdev="MX6D">Loading device tree.</CMD>
<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>
<!-- create partition -->
<!-- 创建分区,详见 mksdcard.sh 脚本 -->
<CMD state="Updater" type="push" body="send" file="mksdcard.sh.tar">Sending partition shell</CMD>
<CMD state="Updater" type="push" body="$ tar xf $FILE "> Partitioning...</CMD>
<CMD state="Updater" type="push" body="$ sh mksdcard.sh /dev/mmcblk%mmc%"> Partitioning...</CMD>
<!-- burn uboot -->
<!-- 烧写 uboot -->
<!-- create fat partition -->
<!-- 创建 FAT 分区 -->
<!-- burn zImage -->
<!-- 烧写 zImage 到 FAT 分区 -->
<!-- burn logo -->
<!-- 烧写 logo.bmp 到 FAT 分区 -->
<!-- burn dtb -->
<!-- 烧写 dtb 到 FAT 分区 -->
<!-- burn rootfs -->
<!-- 烧写 rootfs 到 第二 分区 -->
<!-- burn test tools -->
<!-- 烧写 测试工具 到相应目录下 -->
<!-- format system and user data -->
<!-- 格式化系统和用户数据 -->
<CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>
</LIST>
</UCL>
uc2.xml 是系统升级时的操作文件,MfgTool会根据文件里面 list 的内容进行相应的升级。文件以如下一行为界线,可以分为上阶段和下阶段。
<CMD state="BootStrap" type="jump" > Jumping to OS image. </CMD>
上阶段是把“媒介镜像”烧录到DDR里面并启动;
下阶段是烧录“file”目录里面的文件到emmc上。
如上烧录过程:
分区 –> 烧写uboot –> 烧写zImage –> 烧写dtb –> 烧写rootfs –> 测试工具 –> 格式化系统和用户数据
3 MfgTool 工作流程
MfgTool 是先通过 USB OTG 先将 uboot、kernel 和.dtb(设备树)这是三个文件下载到开发板的 DDR 中,注意不需要下载 rootfs。就相当于直接在开发板的 DDR上启动 Linux 系统,等 Linux 系统启动以后再向 EMMC 中烧写完整的系统,包括 uboot、kernel、.dtb(设备树)和 rootfs,因此 MfgTool 工作过程主要分两个阶段:
(1)上阶段是把“媒介镜像”烧录到DDR里面并启动;
(2)下阶段是烧录“file”目录里面的文件到emmc上。
文件 | 描述 |
---|---|
zImage | NXP官方I.MX6ULLEVK开发板的Linux镜像文件 |
u-boot-imx6ull14x14evk emmc.imx | NXP官方I.MX6ULLEVK开发板的uboot文件 |
zlmage-imx6ul1-14x14-evk-emmc.dtb | NXP官方I.MX6ULLEVK开发板的设备树 |
4 烧录流程
4.1 烧录流程图
MfgTool2 >> 媒介镜像 >> 目标镜像
4.2 使用 MfgTool 更新系统的流程
1 设置拨码开关
根据板子硬件设计决定。
2 使用 USB 线连接PC机与板子
注意需要驱动的话直接在安装包里找一下。
3 启动 MfgTool
进入 MfgTool 目录,双击执行 mfgtool2-yocto-mx-evk-nand.vbs 脚本
4 识别板子
一切正常的话,在设备管理器或 MfgTool 界面可以看到已识别板子
5 烧录【先烧媒介镜像,再烧目标镜像】
点击 MfgTool 界面上的 Start 按钮,MfgTool 就开始自动更新系统至板载存储设备;
6 烧录完成
更新成功后底部的总进度条显示为绿色,若失败则为红色,MfgTool.log 文件会记录错误提示信息。
补充
HID设备
HID设备,全称为Human Interface Devices。USB等都是。
HMI是人机交互的简称,是Human Machine Interface的缩写。
USB OTG
USB On-The-Go(简称USB OTG)是一种在嵌入式系统中广泛使用的功能,它允许设备在主机模式和设备模式之间切换,实现主机和设备之间的直接通信。
USB OTG的核心概念是支持设备在不同模式下操作。在主机模式下,设备充当主机的角色,可以连接其他USB设备(如键盘、鼠标、存储设备等)。在设备模式下,设备充当普通的USB设备,可以被主机识别和控制。
mksdcard
以使用 mksdcard 工具创建 FAT32 磁盘映像。
参考
1、github–mfgtools
2、MYS-6ULX-IOT 开发板测评——使用MfgTool更新系统
3、MfgTool系统烧写(imx6ull)
4、NXP官方MfgTools工具使用
5、推荐使用:uuu(通用更新工具),mfgtools 3.0 - 强大的跨平台固件部署利器
6、mksdcard
7、i.MX6ULL嵌入式Linux开发6-系统烧写到eMMC与遇到的坑!
8、野火–烧录NXP官方固件
9、飞凌–NXP MFGTool软件烧录原理
10、Linux学习笔记—使用MfgTool工具烧写官方系统(一)
11、系统烧写(MfgTool烧写工具)