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 / pid | USB 设备的厂商 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)
| type | body | 参数 | 说明 |
|---|---|---|---|
load | - | file, address, loadSection=OTH, setSection=OTH/APP, HasFlashHeader | 下载镜像到 RAM |
jump | - | - | 通知 ROM 跳转到 RAM 中运行的镜像(紧跟 setSection=APP 的 load) |
boot | Recovery | file | 下载镜像到 RAM |
load命令仅适用于 Bulk-IO 模式设备(i.MX50 HID 模式除外)。
固件侧命令(Firmware Specific,type=“push”)
| body | 参数 | 说明 |
|---|---|---|
? | - | 请求发送设备身份信息(XML 格式) |
! | 整数 | 重启(3)或强制关机(其他值) |
$ | 字符串 | 执行 Shell 命令,如 $ echo hello |
flush | - | 等待所有数据传输完成 |
ffs | - | 分区 SD 卡并烧录 boot stream |
mknod | class,mtd,mtd0,/dev/mtd0 | 创建设备节点 |
read | 字符串 | 读取文件并发送给主机 |
send | file | 从主机接收文件,后续命令通过 $FILE 引用 |
save | 字符串 | 将 send 接收的文件保存到指定路径 |
pipe | file | 从 stdio 管道读取数据,适用于大数据传输(> 物理内存) |
wrf | file | 将 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(不区分大小写) |