系统烧写工具--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烧写工具)

相关推荐
yutian06062 小时前
Keil MDK下载程序后MCU自动重启设置
单片机·嵌入式硬件·keil
析木不会编程5 小时前
【小白51单片机专用教程】protues仿真独立按键控制LED
单片机·嵌入式硬件·51单片机
枯无穷肉9 小时前
stm32制作CAN适配器4--WinUsb的使用
stm32·单片机·嵌入式硬件
不过四级不改名6779 小时前
基于HAL库的stm32的can收发实验
stm32·单片机·嵌入式硬件
嵌入式科普10 小时前
十一、从0开始卷出一个新项目之瑞萨RA6M5串口DTC接收不定长
c语言·stm32·cubeide·e2studio·ra6m5·dma接收不定长
嵌入式大圣10 小时前
单片机UDP数据透传
单片机·嵌入式硬件·udp
云山工作室10 小时前
基于单片机的视力保护及身姿矫正器设计(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·毕设
嵌入式-老费10 小时前
基于海思soc的智能产品开发(mcu读保护的设置)
单片机·嵌入式硬件
qq_3975623112 小时前
MPU6050 , 设置内部低通滤波器,对于输出数据的影响。(简单实验)
单片机
liyinuo201712 小时前
嵌入式(单片机方向)面试题总结
嵌入式硬件·设计模式·面试·设计规范