系统烧写工具--MfgTool

系统烧写工具--MfgTool

  • [1 介绍](#1 介绍)
    • [1.1 概述](#1.1 概述)
    • [1.2 UUU 特性](#1.2 UUU 特性)
    • [1.3 UUU 功能](#1.3 UUU 功能)
    • [1.4 UUU 命令](#1.4 UUU 命令)
    • [1.5 MFGTools 功能](#1.5 MFGTools 功能)
  • [2 MFGTools 目录结构及说明](#2 MFGTools 目录结构及说明)
    • [2.1 MFGTools 目录结构](#2.1 MFGTools 目录结构)
    • [2.2 说明](#2.2 说明)
    • [2.3 分析配置文件](#2.3 分析配置文件)
      • [2.3.1 UiCfg.ini](#2.3.1 UiCfg.ini)
      • [2.3.2 cfg.ini](#2.3.2 cfg.ini)
      • [2.3.3 ucl2.xml](#2.3.3 ucl2.xml)
  • [3 MfgTool 工作流程](#3 MfgTool 工作流程)
  • [4 烧录流程](#4 烧录流程)
    • [4.1 烧录流程图](#4.1 烧录流程图)
    • [4.2 使用 MfgTool 更新系统的流程](#4.2 使用 MfgTool 更新系统的流程)
      • [1 设置拨码开关](#1 设置拨码开关)
      • [2 使用 USB 线连接PC机与板子](#2 使用 USB 线连接PC机与板子)
      • [3 启动 MfgTool](#3 启动 MfgTool)
      • [4 识别板子](#4 识别板子)
      • [5 烧录【先烧媒介镜像,再烧目标镜像】](#5 烧录【先烧媒介镜像,再烧目标镜像】)
      • [6 烧录完成](#6 烧录完成)
  • 补充
  • 参考

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 目录结构

bash 复制代码
.
+--- 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

bash 复制代码
[UICfg]
PortMgrDlg=1

2.3.2 cfg.ini

bash 复制代码
[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

bash 复制代码
<!--
* 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 的内容进行相应的升级。文件以如下一行为界线,可以分为上阶段和下阶段。

bash 复制代码
<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烧写工具)

相关推荐
-Springer-9 小时前
STM32 学习 —— 个人学习笔记5(EXTI 外部中断 & 对射式红外传感器及旋转编码器计数)
笔记·stm32·学习
LS_learner10 小时前
树莓派(ARM64 架构)Ubuntu 24.04 (Noble) 系统 `apt update` 报错解决方案
嵌入式硬件
来自晴朗的明天10 小时前
16、电压跟随器(缓冲器)电路
单片机·嵌入式硬件·硬件工程
钰珠AIOT11 小时前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠11 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠1 天前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg20051 天前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT1 天前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen1 天前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制