MFGTool V2 UCL 配置手册

本文档介绍 Manufacturing Tool V2(MFGTool2)的 UCL(Update Command List)脚本文件格式,用于定义烧录过程中的全部操作指令。

总体结构

UCL 是一个 XML 脚本文件(通常为 ucl2.xml),包含若干个 <LIST> 操作列表,每个列表描述一种烧录场景(如不同的存储介质、不同的操作系统等)。

全局配置 <CFG>

<CFG>
  <STATE name="BootStrap" dev="MX6Q" vid="15A2" pid="0054"/>
  <STATE name="Updater"   dev="MSC" vid="066F" pid="37FF"/>
</CFG>
属性含义
name阶段名:BootStrap(烧录第一阶段)或 Updater(第二阶段)
dev设备类型。BootStrap 阶段有效值:MX6Q、MX6D、MX6SL;Updater 阶段固定为 MSC
vid / pidUSB 设备的厂商 ID 和产品 ID,用于识别目标板

BootStrap 支持多实例,可同时匹配多个芯片类型:

<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"/>

操作列表 <LIST>

<LIST name="Sabre-SD" desc="Choose SD as media">
  <!-- 命令列表 -->
</LIST>
  • name:操作列表名,由 cfg.ini 的 [LIST] name 引用
  • desc:描述说明

命令类型

主机侧命令(Host Specific)

typebody参数说明
load-file, address, loadSection=OTH, setSection=OTH/APP, HasFlashHeader下载镜像到 RAM
jump--通知 ROM 跳转到 RAM 中运行的镜像(紧跟 setSection=APP 的 load)
bootRecoveryfile下载镜像到 RAM

load 命令仅适用于 Bulk-IO 模式设备(i.MX50 HID 模式除外)。

固件侧命令(Firmware Specific,type=“push”)

body参数说明
?-请求发送设备身份信息(XML 格式)
!整数重启(3)或强制关机(其他值)
$字符串执行 Shell 命令,如 $ echo hello
flush-等待所有数据传输完成
ffs-分区 SD 卡并烧录 boot stream
mknodclass,mtd,mtd0,/dev/mtd0创建设备节点
read字符串读取文件并发送给主机
sendfile从主机接收文件,后续命令通过 $FILE 引用
save字符串将 send 接收的文件保存到指定路径
pipefile从 stdio 管道读取数据,适用于大数据传输(> 物理内存)
wrffile将 UBI 镜像写入 NAND
wrs分区号+file将 rootfs 写入 SD 卡
frf / frs-等同于 flush

大数据传输模式(pipe + flush)

<!-- 先释放内存 -->
<CMD type="push" body="$ echo 3 > /proc/sys/vm/drop_caches"/>
<!-- 管道传输 -->
<CMD type="push" body="pipe tar -xv -C /mnt/ubi0" file="files/rootfs.tar"/>
<CMD type="push" body="flush"/>

条件执行(ifdev)

通过 ifdev 属性实现按芯片类型条件执行:

<CMD state="BootStrap" type="load" file="firmware/uImage" address="0x12000000"
     ifdev="MX6Q MX6D">Loading Kernel.</CMD>

仅在连接的芯片匹配 ifdev 中的值时执行,否则跳过。

UCL 变量 %name%

支持静态变量,通过 %变量名% 语法引用:

在 cfg.ini 中定义:

[variable]
board = sabresd
mmc = 0

在命令行中覆盖:

MfgTool2.exe -s "board=sabresd" -s "mmc=0"

在 UCL 中使用:

<CMD state="BootStrap" type="boot" body="BootStrap"
     file="firmware/u-boot-imx6q%board%_sd.imx" ifdev="MX6Q">Loading U-boot</CMD>

限制:XML 解析器在软件启动时只解析一次,修改 ucl2.xml 后需重启 MFGTool。

文件存在性要求

所有在 UCL 中声明的 file 必须实际存在,即使该命令因 ifdev 条件被跳过。例如:

<CMD file="firmware/u-boot-imx6q%sabresd%_sd.imx" ifdev="MX6Q"/>
<CMD file="firmware/u-boot-imx6dl%sabresd%_sd.imx" ifdev="MX6D"/>

当 %board%=sabresd 时,两个文件都必须存在,否则工具启动会报错。

MFGTool V1 → V2 迁移要点

V1 (ucl.xml)V2 (ucl2.xml)
<STATE name="Recovery" dev="MX6Q"/><STATE name="BootStrap" dev="MX6Q" vid="..." pid="..."/>
<CMD type="boot" body="Recovery" ...><CMD state="BootStrap" type="boot" body="Recovery" ...>
find 命令已移除,需删除
结束命令任意文本结束命令文本必须为 Done(不区分大小写)